Vorwort-Signatur (Köln, Datum + Dieter Schlüter) und Versionsnummer v<Std>.<Min> im Stand-Datum

- Vorwort endet mit „Köln, im <aktueller Monat> <Jahr>“ und rechtsbuendigem
  Autornamen (LaTeX flushright + HTML text-align:right)
- Stand-Datum auf Titelseite und Website um Versionsnummer erweitert:
  „Stand: 10. September 2026  v16.09“ — v<Stunde>.<Minute> macht jeden
  Uebersetzungslauf unterscheidbar
- erzeuge_titelseite.py: datum_string() um Versionsnummer erweitert
- build_version_04.py: aktuelles_datum() um Versionsnummer erweitert,
  README_RE-Regex fuer Versionsnummer angepasst
- neues Platzhalter-System {vorwort_datum} analog zu {datum}
This commit is contained in:
dschlueter 2026-09-10 16:12:42 +02:00
commit 81ddb02d5c
12 changed files with 139 additions and 16 deletions

View file

@ -2444,7 +2444,7 @@ z
</g> </g>
</g> </g>
<g id="text_14"> <g id="text_14">
<!-- Stand: 10. September 2026 --> <!-- Stand: 10. September 2026 v16.09 -->
<g style="fill: #c7d2fe" transform="translate(71.4528 818.05749) scale(0.12 -0.12)"> <g style="fill: #c7d2fe" transform="translate(71.4528 818.05749) scale(0.12 -0.12)">
<defs> <defs>
<path id="DejaVuSans-31" d="M 794 531 <path id="DejaVuSans-31" d="M 794 531
@ -2535,6 +2535,36 @@ Q 1497 4750 2381 4750
Q 2619 4750 2861 4703 Q 2619 4750 2861 4703
Q 3103 4656 3366 4563 Q 3103 4656 3366 4563
z z
" transform="scale(0.015625)"/>
<path id="DejaVuSans-39" d="M 703 97
L 703 672
Q 941 559 1184 500
Q 1428 441 1663 441
Q 2288 441 2617 861
Q 2947 1281 2994 2138
Q 2813 1869 2534 1725
Q 2256 1581 1919 1581
Q 1219 1581 811 2004
Q 403 2428 403 3163
Q 403 3881 828 4315
Q 1253 4750 1959 4750
Q 2769 4750 3195 4129
Q 3622 3509 3622 2328
Q 3622 1225 3098 567
Q 2575 -91 1691 -91
Q 1453 -91 1209 -44
Q 966 3 703 97
z
M 1959 2075
Q 2384 2075 2632 2365
Q 2881 2656 2881 3163
Q 2881 3666 2632 3958
Q 2384 4250 1959 4250
Q 1534 4250 1286 3958
Q 1038 3666 1038 3163
Q 1038 2656 1286 2365
Q 1534 2075 1959 2075
z
" transform="scale(0.015625)"/> " transform="scale(0.015625)"/>
</defs> </defs>
<use xlink:href="#DejaVuSans-53"/> <use xlink:href="#DejaVuSans-53"/>
@ -2562,6 +2592,14 @@ z
<use xlink:href="#DejaVuSans-30" transform="translate(1195.263672 0)"/> <use xlink:href="#DejaVuSans-30" transform="translate(1195.263672 0)"/>
<use xlink:href="#DejaVuSans-32" transform="translate(1258.886719 0)"/> <use xlink:href="#DejaVuSans-32" transform="translate(1258.886719 0)"/>
<use xlink:href="#DejaVuSans-36" transform="translate(1322.509766 0)"/> <use xlink:href="#DejaVuSans-36" transform="translate(1322.509766 0)"/>
<use xlink:href="#DejaVuSans-20" transform="translate(1386.132812 0)"/>
<use xlink:href="#DejaVuSans-20" transform="translate(1417.919922 0)"/>
<use xlink:href="#DejaVuSans-76" transform="translate(1449.707031 0)"/>
<use xlink:href="#DejaVuSans-31" transform="translate(1508.886719 0)"/>
<use xlink:href="#DejaVuSans-36" transform="translate(1572.509766 0)"/>
<use xlink:href="#DejaVuSans-2e" transform="translate(1636.132812 0)"/>
<use xlink:href="#DejaVuSans-30" transform="translate(1667.919922 0)"/>
<use xlink:href="#DejaVuSans-39" transform="translate(1731.542969 0)"/>
</g> </g>
</g> </g>
<g id="text_15"> <g id="text_15">

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Before After
Before After

View file

@ -381,7 +381,7 @@
<p>Mit Python planen, optimieren und entscheiden: von <strong>Personal, Schichten und Logistik</strong> über <strong>Energie, Ressourcen und Netzwerke</strong> bis zur <strong>Portfoliooptimierung an den Finanzmärkten</strong>.</p> <p>Mit Python planen, optimieren und entscheiden: von <strong>Personal, Schichten und Logistik</strong> über <strong>Energie, Ressourcen und Netzwerke</strong> bis zur <strong>Portfoliooptimierung an den Finanzmärkten</strong>.</p>
<p>Autor / Herausgeber: Dieter Schlüter</p> <p>Autor / Herausgeber: Dieter Schlüter</p>
<p>&lt;dieter(dot)schlueter(atsign)linix(dot)de&gt;</p> <p>&lt;dieter(dot)schlueter(atsign)linix(dot)de&gt;</p>
<p>Stand: 10. September 2026</p> <p>Stand: 10. September 2026 v16.09</p>
<hr /> <hr />
<nav id="TOC" role="doc-toc"> <nav id="TOC" role="doc-toc">
<ul> <ul>
@ -2081,6 +2081,8 @@ Alles bereit — Sie können mit dem ersten Kapitel beginnen.</code></pre>
<p>Die wirksamste Art, mit diesem Buch zu arbeiten, ist unbequem: <strong>Lesen Sie die Problemstellung, schließen Sie das Buch und versuchen Sie, das Modell selbst aufzuschreiben</strong> — Variablen, Zielfunktion, Nebenbedingungen. Vergleichen Sie erst dann. Die Abweichungen zwischen Ihrem Entwurf und dem Text sind genau die Stellen, an denen Sie etwas lernen. Wer stattdessen mitliest und nickt, hat am Ende des Kapitels das angenehme Gefühl, es verstanden zu haben — und steht beim eigenen Problem vor einem leeren Blatt.</p> <p>Die wirksamste Art, mit diesem Buch zu arbeiten, ist unbequem: <strong>Lesen Sie die Problemstellung, schließen Sie das Buch und versuchen Sie, das Modell selbst aufzuschreiben</strong> — Variablen, Zielfunktion, Nebenbedingungen. Vergleichen Sie erst dann. Die Abweichungen zwischen Ihrem Entwurf und dem Text sind genau die Stellen, an denen Sie etwas lernen. Wer stattdessen mitliest und nickt, hat am Ende des Kapitels das angenehme Gefühl, es verstanden zu haben — und steht beim eigenen Problem vor einem leeren Blatt.</p>
<p>Zweitens: <strong>Lassen Sie jedes Programm laufen und verändern Sie danach eine Zahl.</strong> Was passiert mit dem Vertretungsplan, wenn eine Lehrkraft ausfällt? Was mit dem Portfolio, wenn die Obergrenze von 20 % auf 10 % sinkt? Diese Experimente kosten Sekunden und bauen genau die Intuition auf, die man später beim Modellieren braucht.</p> <p>Zweitens: <strong>Lassen Sie jedes Programm laufen und verändern Sie danach eine Zahl.</strong> Was passiert mit dem Vertretungsplan, wenn eine Lehrkraft ausfällt? Was mit dem Portfolio, wenn die Obergrenze von 20 % auf 10 % sinkt? Diese Experimente kosten Sekunden und bauen genau die Intuition auf, die man später beim Modellieren braucht.</p>
<p>Und drittens: <strong>Nehmen Sie die Übungen ernst.</strong> Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird.</p> <p>Und drittens: <strong>Nehmen Sie die Übungen ernst.</strong> Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird.</p>
<p>Köln, im September 2026</p>
<p style="text-align: right;"><em>Dieter Schlüter</em></p>
<hr /> <hr />
<h1 id="notation-und-abkürzungen">Notation und Abkürzungen</h1> <h1 id="notation-und-abkürzungen">Notation und Abkürzungen</h1>
<p>Dieses Kapitel ist zum Nachschlagen gedacht, nicht zum Durchlesen. Schlagen Sie hier nach, sobald Ihnen ein Symbol oder ein Kürzel begegnet, das Sie nicht sicher zuordnen können.</p> <p>Dieses Kapitel ist zum Nachschlagen gedacht, nicht zum Durchlesen. Schlagen Sie hier nach, sobald Ihnen ein Symbol oder ein Kürzel begegnet, das Sie nicht sicher zuordnen können.</p>

2
OR_HTML_04/index.html generated
View file

@ -115,7 +115,7 @@
<p class="hero-anwendungen">Mit Python planen, optimieren und entscheiden: von Personal, Schichten und Logistik über Energie, Ressourcen und Netzwerke bis zur Portfoliooptimierung an den Finanzmärkten.</p> <p class="hero-anwendungen">Mit Python planen, optimieren und entscheiden: von Personal, Schichten und Logistik über Energie, Ressourcen und Netzwerke bis zur Portfoliooptimierung an den Finanzmärkten.</p>
<p class="hero-autor">Autor / Herausgeber: Dieter Schlüter<br> <p class="hero-autor">Autor / Herausgeber: Dieter Schlüter<br>
&lt;dieter(dot)schlueter(atsign)linix(dot)de&gt;<br> &lt;dieter(dot)schlueter(atsign)linix(dot)de&gt;<br>
Stand: 10. September 2026</p> Stand: 10. September 2026 v16.11</p>
</div> </div>
</section> </section>
<section class="einstieg"> <section class="einstieg">

View file

@ -110,7 +110,7 @@
<p>Mit Python planen, optimieren und entscheiden: von <strong>Personal, Schichten und Logistik</strong> über <strong>Energie, Ressourcen und Netzwerke</strong> bis zur <strong>Portfoliooptimierung an den Finanzmärkten</strong>.</p> <p>Mit Python planen, optimieren und entscheiden: von <strong>Personal, Schichten und Logistik</strong> über <strong>Energie, Ressourcen und Netzwerke</strong> bis zur <strong>Portfoliooptimierung an den Finanzmärkten</strong>.</p>
<p>Autor / Herausgeber: Dieter Schlüter</p> <p>Autor / Herausgeber: Dieter Schlüter</p>
<p>&lt;dieter(dot)schlueter(atsign)linix(dot)de&gt;</p> <p>&lt;dieter(dot)schlueter(atsign)linix(dot)de&gt;</p>
<p>Stand: 10. September 2026</p> <p>Stand: 10. September 2026 v16.11</p>
<hr /> <hr />
<h1 class="unnumbered" id="über-den-kurs">Über den Kurs</h1> <h1 class="unnumbered" id="über-den-kurs">Über den Kurs</h1>
<h2 class="unnumbered" id="vorwort">Vorwort</h2> <h2 class="unnumbered" id="vorwort">Vorwort</h2>
@ -831,6 +831,8 @@ Alles bereit — Sie können mit dem ersten Kapitel beginnen.</code></pre>
<p>Die wirksamste Art, mit diesem Buch zu arbeiten, ist unbequem: <strong>Lesen Sie die Problemstellung, schließen Sie das Buch und versuchen Sie, das Modell selbst aufzuschreiben</strong> — Variablen, Zielfunktion, Nebenbedingungen. Vergleichen Sie erst dann. Die Abweichungen zwischen Ihrem Entwurf und dem Text sind genau die Stellen, an denen Sie etwas lernen. Wer stattdessen mitliest und nickt, hat am Ende des Kapitels das angenehme Gefühl, es verstanden zu haben — und steht beim eigenen Problem vor einem leeren Blatt.</p> <p>Die wirksamste Art, mit diesem Buch zu arbeiten, ist unbequem: <strong>Lesen Sie die Problemstellung, schließen Sie das Buch und versuchen Sie, das Modell selbst aufzuschreiben</strong> — Variablen, Zielfunktion, Nebenbedingungen. Vergleichen Sie erst dann. Die Abweichungen zwischen Ihrem Entwurf und dem Text sind genau die Stellen, an denen Sie etwas lernen. Wer stattdessen mitliest und nickt, hat am Ende des Kapitels das angenehme Gefühl, es verstanden zu haben — und steht beim eigenen Problem vor einem leeren Blatt.</p>
<p>Zweitens: <strong>Lassen Sie jedes Programm laufen und verändern Sie danach eine Zahl.</strong> Was passiert mit dem Vertretungsplan, wenn eine Lehrkraft ausfällt? Was mit dem Portfolio, wenn die Obergrenze von 20 % auf 10 % sinkt? Diese Experimente kosten Sekunden und bauen genau die Intuition auf, die man später beim Modellieren braucht.</p> <p>Zweitens: <strong>Lassen Sie jedes Programm laufen und verändern Sie danach eine Zahl.</strong> Was passiert mit dem Vertretungsplan, wenn eine Lehrkraft ausfällt? Was mit dem Portfolio, wenn die Obergrenze von 20 % auf 10 % sinkt? Diese Experimente kosten Sekunden und bauen genau die Intuition auf, die man später beim Modellieren braucht.</p>
<p>Und drittens: <strong>Nehmen Sie die Übungen ernst.</strong> Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird.</p> <p>Und drittens: <strong>Nehmen Sie die Übungen ernst.</strong> Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird.</p>
<p>Köln, im September 2026</p>
<p style="text-align: right;"><em>Dieter Schlüter</em></p>
</article> </article>

View file

@ -26,7 +26,7 @@ Autor / Herausgeber: Dieter Schlüter
<dieter(dot)schlueter(atsign)linix(dot)de> <dieter(dot)schlueter(atsign)linix(dot)de>
Stand: 10. September 2026 Stand: 10. September 2026 v16.09
--- ---
@ -479,6 +479,18 @@ Zweitens: **Lassen Sie jedes Programm laufen und verändern Sie danach eine Zahl
Und drittens: **Nehmen Sie die Übungen ernst.** Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird. Und drittens: **Nehmen Sie die Übungen ernst.** Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird.
Köln, im September 2026
```{=latex}
\begin{flushright}
\textit{Dieter Schlüter}
\end{flushright}
```
```{=html}
<p style="text-align: right;"><em>Dieter Schlüter</em></p>
```
--- ---

View file

@ -650,6 +650,18 @@ die Intuition auf, die man später beim Modellieren braucht.
Und drittens: **Nehmen Sie die Übungen ernst.** Sie sind nicht Beiwerk, sondern der Ort, an Und drittens: **Nehmen Sie die Übungen ernst.** Sie sind nicht Beiwerk, sondern der Ort, an
dem aus Kenntnis Können wird. dem aus Kenntnis Können wird.
Köln, im {vorwort_datum}
```{=latex}
\begin{flushright}
\textit{Dieter Schlüter}
\end{flushright}
```
```{=html}
<p style="text-align: right;"><em>Dieter Schlüter</em></p>
```
--- ---
*Weiter mit:* [dem Verzeichnis Notation und Abkürzungen](01_Notation_und_Abkuerzungen.md) — oder direkt zu [{ref:kap:einfuehrung}](10_Einfuehrung_OR.md), wenn Sie die Notation lieber nachschlagen, sobald sie auftaucht. *Weiter mit:* [dem Verzeichnis Notation und Abkürzungen](01_Notation_und_Abkuerzungen.md) — oder direkt zu [{ref:kap:einfuehrung}](10_Einfuehrung_OR.md), wenn Sie die Notation lieber nachschlagen, sobald sie auftaucht.

View file

@ -157,4 +157,4 @@ Details zu den Lernpfaden stehen in [`00_Vorwort_und_Lesehilfe.md`](00_Vorwort_u
--- ---
*Autor / Herausgeber: Dieter Schlüter · Stand: 10. September 2026* *Autor / Herausgeber: Dieter Schlüter · Stand: 10. September 2026 v16.09*

View file

@ -191,9 +191,22 @@ MONATE = ["Januar", "Februar", "März", "April", "Mai", "Juni",
def aktuelles_datum() -> str: def aktuelles_datum() -> str:
"""Heutiges Datum als '5. September 2026' (locale-unabhaengig).""" """Heutiges Datum+Version als '5. September 2026 v11.55' (locale-unabhaengig).
Die Versionsnummer v<Std>.<Min> (24er Format, zweistellig) macht jeden
Uebersetzungslauf unterscheidbar - nicht nur einen pro Tag.
"""
n = datetime.datetime.now()
return f"{n.day}. {MONATE[n.month - 1]} {n.year} v{n.hour:02d}.{n.minute:02d}"
def aktuelles_monat_jahr() -> str:
"""Heutiges Datum als 'September 2026' (locale-unabhaengig).
Fuer die Vorwort-Signatur 'Köln, im {vorwort_datum}'.
"""
n = datetime.date.today() n = datetime.date.today()
return f"{n.day}. {MONATE[n.month - 1]} {n.year}" return f"{MONATE[n.month - 1]} {n.year}"
def pruefe_dateien() -> list[str]: def pruefe_dateien() -> list[str]:
@ -1100,7 +1113,7 @@ def erzeuge_titelseite() -> None:
# README.md wird direkt auf GitHub gerendert, deshalb steht dort kein # README.md wird direkt auf GitHub gerendert, deshalb steht dort kein
# Platzhalter '{datum}' (waere dort unpassend sichtbar), sondern ein lesbares # Platzhalter '{datum}' (waere dort unpassend sichtbar), sondern ein lesbares
# Datum, das der Build bei jedem Lauf auf den aktuellen Stand bringt. # Datum, das der Build bei jedem Lauf auf den aktuellen Stand bringt.
README_RE = re.compile(r"Stand: \d+\. \w+ \d{4}") README_RE = re.compile(r"Stand: \d+\. \w+ \d{4}(?: v\d{2}\.\d{2})?")
def aktualisiere_readme_datum(datum: str) -> None: def aktualisiere_readme_datum(datum: str) -> None:
@ -1135,6 +1148,8 @@ def baue_markdown() -> str:
# Datum-Platzhalter 'Stand: {datum}' durch das heutige Datum ersetzen # Datum-Platzhalter 'Stand: {datum}' durch das heutige Datum ersetzen
# (nur in Dateien, die den Platzhalter enthalten - z. B. Vorwort). # (nur in Dateien, die den Platzhalter enthalten - z. B. Vorwort).
inhalt = inhalt.replace("Stand: {datum}", f"Stand: {datum}") inhalt = inhalt.replace("Stand: {datum}", f"Stand: {datum}")
# Vorwort-Signatur 'Köln, im {vorwort_datum}' dynamisch setzen.
inhalt = inhalt.replace("{vorwort_datum}", aktuelles_monat_jahr())
# Inhaltsverzeichnis vor dem Vorwort einfuegen (LaTeX-Rohblock) # Inhaltsverzeichnis vor dem Vorwort einfuegen (LaTeX-Rohblock)
if TOC_MARKE in inhalt and i == 0: if TOC_MARKE in inhalt and i == 0:
@ -2275,6 +2290,7 @@ def baue_kapitel_seiten(html_verz: str, datei_seite: dict, labels: dict,
text = wandle_querverweise_seite(text, datei_seite, eintrag["seite"]) text = wandle_querverweise_seite(text, datei_seite, eintrag["seite"])
datum = aktuelles_datum() datum = aktuelles_datum()
text = text.replace("Stand: {datum}", f"Stand: {datum}") text = text.replace("Stand: {datum}", f"Stand: {datum}")
text = text.replace("{vorwort_datum}", aktuelles_monat_jahr())
text = reflow_markdown(text) text = reflow_markdown(text)
text = resolve_numbering_seite(text, eintrag["seite"], labels, label_seite) text = resolve_numbering_seite(text, eintrag["seite"], labels, label_seite)
text = resolve_index(text) text = resolve_index(text)

View file

@ -4,8 +4,8 @@
""" """
Baut die Titelseite bilder_04/titelseite.svg (und die HTML-Kopie Baut die Titelseite bilder_04/titelseite.svg (und die HTML-Kopie
OR_HTML_04/bilder_04/titelseite.svg) als SVG mit matplotlib. Das Datum im Fußband OR_HTML_04/bilder_04/titelseite.svg) als SVG mit matplotlib. Das Datum im Fußband
('Stand: <datum>') wird dynamisch aus datetime.now() gesetzt, damit es nach ('Stand: <datum> v<Std>.<Min>') wird dynamisch aus datetime.now() gesetzt,
jedem Build den aktuellen Stand zeigt. damit es nach jedem Build den aktuellen Stand zeigt.
Die Koordinaten unten sind SVG-Punkte (595.44 x 841.68, A4 @ 72 dpi). Die Die Koordinaten unten sind SVG-Punkte (595.44 x 841.68, A4 @ 72 dpi). Die
y-Achse wird invertiert (set_ylim(841.68, 0)), sodass y von oben zählt und y-Achse wird invertiert (set_ylim(841.68, 0)), sodass y von oben zählt und
@ -52,8 +52,7 @@ from matplotlib.patches import Circle, FancyBboxPatch, Rectangle
# Schreibvorgangs (auf die Mikrosekunde) in den SVG-Metadaten. # Schreibvorgangs (auf die Mikrosekunde) in den SVG-Metadaten.
# Beides ist unsichtbar, macht aber jeden git-diff unlesbar und die beiden # Beides ist unsichtbar, macht aber jeden git-diff unlesbar und die beiden
# Kopien bilder_04/ und OR_HTML_04/bilder_04/ dauerhaft verschieden. Die Datei # Kopien bilder_04/ und OR_HTML_04/bilder_04/ dauerhaft verschieden. Die Datei
# aendert sich jetzt nur noch, wenn sich das SICHTBARE Datum im Fussband # aendert sich jetzt bei jedem Lauf mit neuem Datum oder neuer Uhrzeit.
# aendert - also einmal pro Tag.
plt.rcParams["svg.hashsalt"] = "or-mit-python-v04" plt.rcParams["svg.hashsalt"] = "or-mit-python-v04"
# Hardcodierte deutsche Monatsnamen statt strftime("%B") - so ist das Datum # Hardcodierte deutsche Monatsnamen statt strftime("%B") - so ist das Datum
@ -91,9 +90,13 @@ KARTEN = [
def datum_string() -> str: def datum_string() -> str:
"""Heutiges Datum als '5. September 2026' (locale-unabhängig).""" """Heutiges Datum+Version als '5. September 2026 v11.55' (locale-unabhängig).
Die Versionsnummer v< Stunde>.<Minute> (24er Format, zweistellig) macht
jeden Übersetzungslauf unterscheidbar nicht nur einen pro Tag.
"""
n = datetime.now() n = datetime.now()
return f"{n.day}. {MONATE[n.month - 1]} {n.year}" return f"{n.day}. {MONATE[n.month - 1]} {n.year} v{n.hour:02d}.{n.minute:02d}"
def _ring(ax, x, y, r): def _ring(ax, x, y, r):

View file

@ -2444,7 +2444,7 @@ z
</g> </g>
</g> </g>
<g id="text_14"> <g id="text_14">
<!-- Stand: 10. September 2026 --> <!-- Stand: 10. September 2026 v16.09 -->
<g style="fill: #c7d2fe" transform="translate(71.4528 818.05749) scale(0.12 -0.12)"> <g style="fill: #c7d2fe" transform="translate(71.4528 818.05749) scale(0.12 -0.12)">
<defs> <defs>
<path id="DejaVuSans-31" d="M 794 531 <path id="DejaVuSans-31" d="M 794 531
@ -2535,6 +2535,36 @@ Q 1497 4750 2381 4750
Q 2619 4750 2861 4703 Q 2619 4750 2861 4703
Q 3103 4656 3366 4563 Q 3103 4656 3366 4563
z z
" transform="scale(0.015625)"/>
<path id="DejaVuSans-39" d="M 703 97
L 703 672
Q 941 559 1184 500
Q 1428 441 1663 441
Q 2288 441 2617 861
Q 2947 1281 2994 2138
Q 2813 1869 2534 1725
Q 2256 1581 1919 1581
Q 1219 1581 811 2004
Q 403 2428 403 3163
Q 403 3881 828 4315
Q 1253 4750 1959 4750
Q 2769 4750 3195 4129
Q 3622 3509 3622 2328
Q 3622 1225 3098 567
Q 2575 -91 1691 -91
Q 1453 -91 1209 -44
Q 966 3 703 97
z
M 1959 2075
Q 2384 2075 2632 2365
Q 2881 2656 2881 3163
Q 2881 3666 2632 3958
Q 2384 4250 1959 4250
Q 1534 4250 1286 3958
Q 1038 3666 1038 3163
Q 1038 2656 1286 2365
Q 1534 2075 1959 2075
z
" transform="scale(0.015625)"/> " transform="scale(0.015625)"/>
</defs> </defs>
<use xlink:href="#DejaVuSans-53"/> <use xlink:href="#DejaVuSans-53"/>
@ -2562,6 +2592,14 @@ z
<use xlink:href="#DejaVuSans-30" transform="translate(1195.263672 0)"/> <use xlink:href="#DejaVuSans-30" transform="translate(1195.263672 0)"/>
<use xlink:href="#DejaVuSans-32" transform="translate(1258.886719 0)"/> <use xlink:href="#DejaVuSans-32" transform="translate(1258.886719 0)"/>
<use xlink:href="#DejaVuSans-36" transform="translate(1322.509766 0)"/> <use xlink:href="#DejaVuSans-36" transform="translate(1322.509766 0)"/>
<use xlink:href="#DejaVuSans-20" transform="translate(1386.132812 0)"/>
<use xlink:href="#DejaVuSans-20" transform="translate(1417.919922 0)"/>
<use xlink:href="#DejaVuSans-76" transform="translate(1449.707031 0)"/>
<use xlink:href="#DejaVuSans-31" transform="translate(1508.886719 0)"/>
<use xlink:href="#DejaVuSans-36" transform="translate(1572.509766 0)"/>
<use xlink:href="#DejaVuSans-2e" transform="translate(1636.132812 0)"/>
<use xlink:href="#DejaVuSans-30" transform="translate(1667.919922 0)"/>
<use xlink:href="#DejaVuSans-39" transform="translate(1731.542969 0)"/>
</g> </g>
</g> </g>
<g id="text_15"> <g id="text_15">

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Before After
Before After