Files
website-build/build/article-make-regex-engine-1.typ.desktop.html
2025-08-29 15:28:30 +02:00

480 lines
109 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<title>Introduction to RegEx</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" sizes="512x512" href="res/favicon.png">
<link rel="image_src" type="image/png" href="res/favicon.png">
<link type="application/atom+xml" rel="alternate" title="alexs168's blog" href="atom.xml">
</head>
<body>
<style>
@font-face {
font-family: 'DejaVu Sans Mono';
src:local('DejaVu Sans Mono'),
url('res/DejaVuSansMono.woff2') format('woff2'),
local('Courier New'),
local(Courier),
local(monospace);
font-weight: normal;
font-style: normal;
font-display: swap;
}
/*
@font-face {
font-family: 'DejaVu Sans Mono';
src:local('DejaVu Sans Mono'),
url('res/DejaVuSansMono-Bold.woff2') format('woff2'),
local('Courier New'),
local(Courier),
local(monospace);
font-weight: bold;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'DejaVu Sans';
src:local('DejaVu Sans'),
url('res/DejaVuSans-Bold.woff2') format('woff2'),
local('Courier New');
font-weight: bold;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'DejaVu Sans';
src:local('DejaVu Sans'),
url('res/DejaVuSans.woff2') format('woff2'),
local('Courier New');
font-weight: normal;
font-style: normal;
font-display: swap;
}*/
body {
font-family: DejaVu Sans Mono;
font-size: 17pt;
}
td {
width: 100%;
display: inline;
vertical-align: top;
}
h1,h2,h3,h4 {
margin-top: 1%;
margin-bottom: 0.75%;
margin-left: -0.75%;
}
p {
margin-top: 0.75%;
margin-bottom: 0.75%;
}
ul {
margin-top: 0%;
}
.current {
font-weight: bold;
}
pre {
margin-top: 0px;
margin-bottom: 0px;
display: inline;
}
a {
color: #3f51b5;
text-decoration: none;
}
a:visited {
color: #3f51b5;
text-decoration: none;
}
</style>
<table>
<tr>
<td><span class="sidebar" style><span class="column-fixed" style="display: inline-flex; position: fixed; justify-content: center; width: 25%"><table><tr><td><span class="table-of-contents" style><div style="
border:1.2pt solid black;
border-radius:2pt;
padding:3%;"><p><span style="text-decoration: underline">Table of contents</span><br></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-0"><a href="#loc-1">Introduction</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-1"><a href="#loc-2">Syntax</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-2"><a href="#loc-3">“Atoms”</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  |  ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-3"><a href="#loc-4">Characters</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  |  ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-4"><a href="#escaped-chars">Escaped Characters</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  |  ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-5"><a href="#char-groups">Character Groups</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  |  └─</span> <span class style="flex:1;"><span class="headingr" id="headingr-6"><a href="#loc-5">Anchors</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-7"><a href="#greedy">Greedy VS Lazy</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  └─</span> <span class style="flex:1;"><span class="headingr" id="headingr-8"><a href="#loc-6">Combinators</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|     ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-9"><a href="#loc-7">Chain</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|     ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-10"><a href="#loc-8">Or</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|     ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-11"><a href="#loc-9">Or-Not</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|     ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-12"><a href="#loc-10">Repeated</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|     ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-13"><a href="#loc-11">Repeated At Least Once</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|     ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-14"><a href="#non-capture-group">(Non-Capture) Group</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|     ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-15"><a href="#loc-12">Capture Group</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|     └─</span> <span class style="flex:1;"><span class="headingr" id="headingr-16"><a href="#loc-13">Character Set</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">└─</span> <span class style="flex:1;"><span class="headingr" id="headingr-17"><a href="#loc-14">Conclusion</a></span></span></span></p></div></span><span class="table-of-contents" style><script>document.addEventListener('DOMContentLoaded', function() {
let tags = ['h2', 'h3', 'h4'].flatMap(x => Array.from(document.getElementsByTagName(x))).sort((a, b) => a.getBoundingClientRect().top - b.getBoundingClientRect().top);
let pageHeight = document.documentElement.scrollHeight-window.innerHeight;
document.addEventListener('scroll', (event) => {
let progress = -(document.documentElement.getBoundingClientRect().y / pageHeight);
let delta = progress * window.innerHeight;
let idx = tags.map(x => 0 > x.getBoundingClientRect().top - delta).lastIndexOf(true);
Array.from(document.getElementsByClassName('headingr')).map(x => x.classList.remove('current'));
if (idx != -1) {
document.getElementById('headingr-' + idx).classList.add('current');
}
}
);
})</script><style>
.table-of-contents > p > span { width: 100%; }
</style></span></td></tr><tr><td><br>
<a href="index.html"><b>Website Home</b></a> <br>
</td></tr><tr><td><p>Renderings of this page:</p><ul><li><a href="#" onclick="gotoVariant(&quot;.min.pdf&quot;);">minimal PDF (printable)</a></li><li><a href="#" onclick="gotoVariant(&quot;.nano.html&quot;);">minimal HTML</a></li></ul></td></tr><tr><td><a href="atom.xml">Atom feed</a> <br>
</td></tr><tr><td><style>
@media only screen and (max-width: 1200px) {
.sidebar {
display: none !important;
}
.column-fixed {
width: 0% !important;
}
.body-column {
left: 3% !important;
}
}
@media only screen and (max-width: 1800px) {
.body-column > span {
width: 75% !important;
}
}
@media only screen and (max-width: 1200px) {
.body-column {
width: 97% !important;
}
.body-column > span {
width: 100% !important;
}
}
.hide { display: inline; background: black; transition: background 0.3s linear; }
.hide:hover, .hide:focus { background: transparent; }
</style></td></tr></table><style>
.column-fixed > table > tbody > tr > td > * { width: 100%; }
</style></span></span></td>
<td><span class="body-column" style="position: absolute; left: 28%; width: 72%"><span style="
width:50%;
display:inline-block"><div style="
"><p><br></p><h1>Making a simple RegEx engine:
Part 1: Introduction to RegEx</h1><p><span style="font-size: 14pt"><p>Git revision <a href="https://github.com/alex-s168/website/tree/fee2a36453b624f2e6ede5186b5f3e59aa3e6cc7">#fee2a364</a><br>Modified at 26. July 2025 14:20</p><p>Written by <a href="https://alex.vxcc.dev">alex_s168</a></p></span></p></div><div style="
"><br>Note that the <a href="#" onclick="gotoVariant(&quot;.min.pdf&quot;);">PDF Version</a> of this page might look a bit better styling wise.</div><div style="
"><p><br><span id="loc-1" style="text-decoration: underline"><h2>Introduction</h2></span> If you are any kind of programmer, youve probably heard of <a href="https://en.wikipedia.org/wiki/Regular_expression">RegEx</a></p><p>RegEx (Regular expression) is kind of like a small programming language used to define string search and replace patterns.</p><p><br>RegEx might seem overwhelming at first, but you can learn the most important features of RegEx very quickly.</p><p><br>It is important to mention that there is not a single standard for RegEx syntax, but instead each “implementation” has its own quirks, and additional features. Most common features however behave identically on most RegEx “engines”/implementations.</p></div><div style="
"><p><br><span id="loc-2" style="text-decoration: underline"><h2>Syntax</h2></span> The behavior of RegEx expressions / patterns depends on the match options passed to the RegEx engine.</p><p>Common match options<span id="match-options">:</span></p><ul><li>Anchored at start and end of line</li><li>Case insensitive</li><li>multi-line or instead whole string</li></ul></div><div style="
"><br><span id="loc-3" style="text-decoration: underline"><h3>“Atoms”</h3></span> In this article, we will refer to single expression parts as “atoms”.</div><div style="
"><br><span id="loc-4" style="text-decoration: underline"><h4>Characters</h4></span> Just use the character that you want to match. For example <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">a</code></span> to match an <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">a</code></span>. This however does not work for all characters, because many are part of special RegEx syntax.</div><div style="
"><p><br><span id="escaped-chars" style="text-decoration: underline"><h4>Escaped Characters</h4></span> Thee previously mentioned special characters like <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">[</code></span> can be matched by putting a backslash in front of them: <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap"><span style="color: #1d6c76">\[</span></code></span></p><svg class="typst-frame" style="overflow: visible; width: 20.442095588235293em; height: 4.916567095588235em;" viewBox="0 0 347.515625 83.58164062499999" width="347.515625pt" height="83.58164062499999pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml"><g><g transform="translate(0 0)"><g class="typst-group"><g><g transform="translate(0 -0.5)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 0 84.58164 "/></g><g transform="translate(81.64404296875 -0.5)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 0 84.58164 "/></g><g transform="translate(347.515625 -0.5)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 0 84.58164 "/></g><g transform="translate(-0.5 0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 348.51563 0 "/></g><g transform="translate(-0.5 22.916015625)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 348.51563 0 "/></g><g transform="translate(-0.5 53.248828124999996)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 348.51563 0 "/></g><g transform="translate(-0.5 83.58164062499999)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 348.51563 0 "/></g><g transform="translate(5 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#gD50A97DBFCC1B2AF88274C574B62AD0F" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="30.70458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#gDFA239FF7EF365A2405280CFC1B30A88" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="30.70458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD0269DB94B2B0282AF9573513A87B979" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/></g></g><g transform="translate(0 22.916015625)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 24.875782 0 C 25.704208 0 26.375782 0.67157286 26.375782 1.5 L 26.375782 18.832813 C 26.375782 19.66124 25.704208 20.332813 24.875782 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="0" y="0" fill="#1d6c76" fill-rule="nonzero"/><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="8.187890625" y="0" fill="#1d6c76" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g35BF6B03EF89CF7767A7FE0A80AABDB5" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="30.70458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="133.05322265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="143.2880859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gFF8E70305C9B4F601E02AB26F65CF687" x="163.7578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="173.99267578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="184.2275390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6CF87839CD3E8D9C3AE5A144A46E9E75" x="194.46240234375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="204.697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="214.93212890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="225.1669921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="235.40185546875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="245.63671875" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(0 53.248828124999996)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 24.875782 0 C 25.704208 0 26.375782 0.67157286 26.375782 1.5 L 26.375782 18.832813 C 26.375782 19.66124 25.704208 20.332813 24.875782 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="0" y="0" fill="#1d6c76" fill-rule="nonzero"/><use xlink:href="#g70A289BFCD7786312D0559D10B396C25" x="8.187890625" y="0" fill="#1d6c76" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g35BF6B03EF89CF7767A7FE0A80AABDB5" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="30.70458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gF468206C1E68B7C03DB0A6C10E852788" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC739666B161A484290AFC054395BB590" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="133.05322265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="143.2880859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="153.52294921875" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g></g></g></g></g><defs id="glyph"><symbol id="gD50A97DBFCC1B2AF88274C574B62AD0F" overflow="visible"><path d="M 3.3120117 11.015137 L 3.3120117 6.3583984 L 5.2543945 6.3583984 Q 6.416504 6.3583984 7.068115 6.9726563 Q 7.7197266 7.586914 7.7197266 8.690918 Q 7.7197266 9.794922 7.0722656 10.405029 Q 6.4248047 11.015137 5.2543945 11.015137 L 3.3120117 11.015137 Z M 1.6352539 12.393066 L 5.2543945 12.393066 Q 7.32959 12.393066 8.400391 11.450928 Q 9.471191 10.508789 9.471191 8.690918 Q 9.471191 6.8564453 8.404541 5.918457 Q 7.3378906 4.9804688 5.2543945 4.9804688 L 3.3120117 4.9804688 L 3.3120117 0 L 1.6352539 0 L 1.6352539 12.393066 Z "/></symbol><symbol id="g6B1726F4DF965EF5F691F5F83A105856" overflow="visible"><path d="M 5.8271484 4.67334 L 5.320801 4.67334 Q 3.984375 4.67334 3.3078613 4.2043457 Q 2.6313477 3.7353516 2.6313477 2.805664 Q 2.6313477 1.9672852 3.1376953 1.5024414 Q 3.644043 1.0375977 4.5405273 1.0375977 Q 5.802246 1.0375977 6.524414 1.9133301 Q 7.246582 2.7890625 7.254883 4.333008 L 7.254883 4.67334 L 5.8271484 4.67334 Z M 8.790527 5.304199 L 8.790527 0 L 7.254883 0 L 7.254883 1.3779297 Q 6.7651367 0.54785156 6.022217 0.15356445 Q 5.279297 -0.24072266 4.216797 -0.24072266 Q 2.7973633 -0.24072266 1.9506836 0.56030273 Q 1.1040039 1.3613281 1.1040039 2.7060547 Q 1.1040039 4.258301 2.145752 5.0634766 Q 3.1875 5.8686523 5.20459 5.8686523 L 7.254883 5.8686523 L 7.254883 6.109375 Q 7.246582 7.2216797 6.6904297 7.723877 Q 6.1342773 8.226074 4.9140625 8.226074 Q 4.133789 8.226074 3.336914 8.001953 Q 2.540039 7.777832 1.784668 7.3461914 L 1.784668 8.873535 Q 2.6313477 9.197266 3.4074707 9.359131 Q 4.1835938 9.520996 4.9140625 9.520996 Q 6.067871 9.520996 6.885498 9.180664 Q 7.703125 8.840332 8.209473 8.159668 Q 8.524902 7.744629 8.657715 7.1345215 Q 8.790527 6.524414 8.790527 5.304199 Z "/></symbol><symbol id="g6DFAAC9B19C5F55A301A27DA78BC3D2B" overflow="visible"><path d="M 5.0966797 11.936523 L 5.0966797 9.296875 L 8.566406 9.296875 L 8.566406 8.109863 L 5.0966797 8.109863 L 5.0966797 3.0629883 Q 5.0966797 2.0336914 5.4868164 1.6269531 Q 5.876953 1.2202148 6.8481445 1.2202148 L 8.566406 1.2202148 L 8.566406 0 L 6.6987305 0 Q 4.9804688 0 4.2749023 0.68896484 Q 3.569336 1.3779297 3.569336 3.0629883 L 3.569336 8.109863 L 1.0874023 8.109863 L 1.0874023 9.296875 L 3.569336 9.296875 L 3.569336 11.936523 L 5.0966797 11.936523 Z "/></symbol><symbol id="gDB38173BD41D6F8246F6E4E5034FA1E3" overflow="visible"><path d="M 9.230469 5.0302734 L 9.230469 4.283203 L 2.614746 4.283203 L 2.614746 4.2333984 Q 2.614746 2.7143555 3.4074707 1.8842773 Q 4.2001953 1.0541992 5.6445313 1.0541992 Q 6.375 1.0541992 7.171875 1.2866211 Q 7.96875 1.519043 8.873535 1.9921875 L 8.873535 0.47314453 Q 8.001953 0.11621094 7.192627 -0.06225586 Q 6.383301 -0.24072266 5.6279297 -0.24072266 Q 3.4614258 -0.24072266 2.241211 1.0583496 Q 1.0209961 2.3574219 1.0209961 4.6401367 Q 1.0209961 6.864746 2.2163086 8.192871 Q 3.411621 9.520996 5.4038086 9.520996 Q 7.180176 9.520996 8.205322 8.317383 Q 9.230469 7.1137695 9.230469 5.0302734 Z M 7.703125 5.4785156 Q 7.669922 6.823242 7.068115 7.524658 Q 6.4663086 8.226074 5.3374023 8.226074 Q 4.2333984 8.226074 3.5195313 7.4956055 Q 2.805664 6.7651367 2.6728516 5.470215 L 7.703125 5.4785156 Z "/></symbol><symbol id="gD1C7956DAF8AD82D229D654A639ECA4" overflow="visible"><path d="M 9.587402 7.3793945 Q 9.097656 7.7612305 8.591309 7.935547 Q 8.084961 8.109863 7.479004 8.109863 Q 6.0512695 8.109863 5.2958984 7.213379 Q 4.5405273 6.3168945 4.5405273 4.623535 L 4.5405273 0 L 3.0048828 0 L 3.0048828 9.296875 L 4.5405273 9.296875 L 4.5405273 7.479004 Q 4.9223633 8.466797 5.715088 8.9938965 Q 6.5078125 9.520996 7.595215 9.520996 Q 8.159668 9.520996 8.649414 9.379883 Q 9.13916 9.23877 9.587402 8.939941 L 9.587402 7.3793945 Z "/></symbol><symbol id="g15F8D98A982CAFFBB2DC5CFB952688B3" overflow="visible"><path d="M 8.724121 5.760742 L 8.724121 0 L 7.1884766 0 L 7.1884766 5.760742 Q 7.1884766 7.01416 6.748535 7.6035156 Q 6.3085938 8.192871 5.3706055 8.192871 Q 4.2998047 8.192871 3.7229004 7.4333496 Q 3.145996 6.673828 3.145996 5.2543945 L 3.145996 0 L 1.6186523 0 L 1.6186523 9.296875 L 3.145996 9.296875 L 3.145996 7.9023438 Q 3.5527344 8.699219 4.25 9.110107 Q 4.9472656 9.520996 5.9018555 9.520996 Q 7.321289 9.520996 8.022705 8.587158 Q 8.724121 7.6533203 8.724121 5.760742 Z "/></symbol><symbol id="gDFA239FF7EF365A2405280CFC1B30A88" overflow="visible"><path d="M 3.6191406 1.3779297 Q 5.73584 1.3779297 6.5742188 2.4196777 Q 7.4125977 3.4614258 7.4125977 6.184082 Q 7.4125977 8.931641 6.578369 9.973389 Q 5.7441406 11.015137 3.6191406 11.015137 L 2.8222656 11.015137 L 2.8222656 1.3779297 L 3.6191406 1.3779297 Z M 3.6523438 12.393066 Q 6.491211 12.393066 7.8359375 10.882324 Q 9.180664 9.371582 9.180664 6.184082 Q 9.180664 3.0131836 7.8359375 1.5065918 Q 6.491211 0 3.6523438 0 L 1.137207 0 L 1.137207 12.393066 L 3.6523438 12.393066 Z "/></symbol><symbol id="gAD49535C0E195BFBF1C53D400910C0D3" overflow="visible"><path d="M 8.07666 8.973145 L 8.07666 7.479004 Q 7.4208984 7.86084 6.756836 8.051758 Q 6.0927734 8.242676 5.4038086 8.242676 Q 4.366211 8.242676 3.855713 7.906494 Q 3.3452148 7.5703125 3.3452148 6.8813477 Q 3.3452148 6.258789 3.7270508 5.95166 Q 4.1088867 5.6445313 5.6279297 5.354004 L 6.2421875 5.237793 Q 7.3793945 5.0219727 7.9645996 4.3745117 Q 8.549805 3.7270508 8.549805 2.6894531 Q 8.549805 1.3115234 7.5703125 0.5354004 Q 6.5908203 -0.24072266 4.8476563 -0.24072266 Q 4.1586914 -0.24072266 3.4033203 -0.095458984 Q 2.6479492 0.049804688 1.7680664 0.34033203 L 1.7680664 1.9174805 Q 2.6230469 1.4775391 3.4033203 1.2575684 Q 4.1835938 1.0375977 4.8808594 1.0375977 Q 5.8935547 1.0375977 6.449707 1.4484863 Q 7.0058594 1.859375 7.0058594 2.5981445 Q 7.0058594 3.6606445 4.972168 4.067383 L 4.9057617 4.0839844 L 4.333008 4.2001953 Q 3.0131836 4.4575195 2.4072266 5.067627 Q 1.8012695 5.6777344 1.8012695 6.7319336 Q 1.8012695 8.068359 2.7060547 8.794678 Q 3.6108398 9.520996 5.2875977 9.520996 Q 6.034668 9.520996 6.723633 9.384033 Q 7.4125977 9.24707 8.07666 8.973145 Z "/></symbol><symbol id="g287DBFEC2AF7D6697558565F1658C356" overflow="visible"><path d="M 8.807129 0.47314453 Q 8.192871 0.11621094 7.54126 -0.06225586 Q 6.8896484 -0.24072266 6.2089844 -0.24072266 Q 4.0507813 -0.24072266 2.8347168 1.0541992 Q 1.6186523 2.349121 1.6186523 4.6401367 Q 1.6186523 6.9311523 2.8347168 8.226074 Q 4.0507813 9.520996 6.2089844 9.520996 Q 6.8813477 9.520996 7.520508 9.34668 Q 8.159668 9.172363 8.807129 8.807129 L 8.807129 7.205078 Q 8.201172 7.744629 7.5910645 7.9853516 Q 6.980957 8.226074 6.2089844 8.226074 Q 4.772949 8.226074 4.0009766 7.2963867 Q 3.229004 6.366699 3.229004 4.6401367 Q 3.229004 2.921875 4.005127 1.9880371 Q 4.78125 1.0541992 6.2089844 1.0541992 Q 7.0058594 1.0541992 7.6367188 1.2990723 Q 8.267578 1.5439453 8.807129 2.0585938 L 8.807129 0.47314453 Z "/></symbol><symbol id="g8994DF9C9688059F90C624273B89485C" overflow="visible"><path d="M 2.125 9.296875 L 6.034668 9.296875 L 6.034668 1.1870117 L 9.064453 1.1870117 L 9.064453 0 L 1.4775391 0 L 1.4775391 1.1870117 L 4.507324 1.1870117 L 4.507324 8.109863 L 2.125 8.109863 L 2.125 9.296875 Z M 4.507324 12.916016 L 6.034668 12.916016 L 6.034668 10.981934 L 4.507324 10.981934 L 4.507324 12.916016 Z "/></symbol><symbol id="gD0269DB94B2B0282AF9573513A87B979" overflow="visible"><path d="M 3.112793 1.1704102 L 3.112793 -3.5361328 L 1.5771484 -3.5361328 L 1.5771484 9.296875 L 3.112793 9.296875 L 3.112793 8.109863 Q 3.494629 8.798828 4.1296387 9.159912 Q 4.7646484 9.520996 5.5947266 9.520996 Q 7.279785 9.520996 8.238525 8.217773 Q 9.197266 6.914551 9.197266 4.6069336 Q 9.197266 2.3408203 8.234375 1.0500488 Q 7.2714844 -0.24072266 5.5947266 -0.24072266 Q 4.748047 -0.24072266 4.113037 0.12036133 Q 3.4780273 0.4814453 3.112793 1.1704102 Z M 7.595215 4.6401367 Q 7.595215 6.416504 7.034912 7.321289 Q 6.4746094 8.226074 5.3706055 8.226074 Q 4.258301 8.226074 3.6855469 7.3171387 Q 3.112793 6.408203 3.112793 4.6401367 Q 3.112793 2.880371 3.6855469 1.9672852 Q 4.258301 1.0541992 5.3706055 1.0541992 Q 6.4746094 1.0541992 7.034912 1.9589844 Q 7.595215 2.8637695 7.595215 4.6401367 Z "/></symbol><symbol id="gC9947EF6A39C68349F7D66C615F6F2B0" overflow="visible"><path d="M 5.1132813 8.226074 Q 3.9511719 8.226074 3.3535156 7.321289 Q 2.7558594 6.416504 2.7558594 4.6401367 Q 2.7558594 2.8720703 3.3535156 1.9631348 Q 3.9511719 1.0541992 5.1132813 1.0541992 Q 6.2836914 1.0541992 6.8813477 1.9631348 Q 7.479004 2.8720703 7.479004 4.6401367 Q 7.479004 6.416504 6.8813477 7.321289 Q 6.2836914 8.226074 5.1132813 8.226074 Z M 5.1132813 9.520996 Q 7.0473633 9.520996 8.07251 8.267578 Q 9.097656 7.01416 9.097656 4.6401367 Q 9.097656 2.2578125 8.07666 1.0085449 Q 7.055664 -0.24072266 5.1132813 -0.24072266 Q 3.1791992 -0.24072266 2.1582031 1.0085449 Q 1.137207 2.2578125 1.137207 4.6401367 Q 1.137207 7.01416 2.1582031 8.267578 Q 3.1791992 9.520996 5.1132813 9.520996 Z "/></symbol><symbol id="g77B515F5A19B726699BB309F6E7D1982" overflow="visible"><path d="M 1.9457031 9.9144535 L 7.1652346 -1.2617188 L 5.903516 -1.2617188 L 0.6773438 9.9144535 L 1.9457031 9.9144535 Z "/></symbol><symbol id="g35BF6B03EF89CF7767A7FE0A80AABDB5" overflow="visible"><path d="M 5.611328 8.350586 Q 5.8935547 8.948242 6.3293457 9.234619 Q 6.7651367 9.520996 7.3793945 9.520996 Q 8.5 9.520996 8.960693 8.653564 Q 9.421387 7.786133 9.421387 5.387207 L 9.421387 0 L 8.026855 0 L 8.026855 5.320801 Q 8.026855 7.288086 7.806885 7.765381 Q 7.586914 8.242676 7.0058594 8.242676 Q 6.341797 8.242676 6.096924 7.7321777 Q 5.852051 7.2216797 5.852051 5.320801 L 5.852051 0 L 4.4575195 0 L 4.4575195 5.320801 Q 4.4575195 7.3129883 4.2209473 7.777832 Q 3.984375 8.242676 3.3701172 8.242676 Q 2.7641602 8.242676 2.527588 7.7321777 Q 2.2910156 7.2216797 2.2910156 5.320801 L 2.2910156 0 L 0.90478516 0 L 0.90478516 9.296875 L 2.2910156 9.296875 L 2.2910156 8.5 Q 2.5649414 8.998047 2.97583 9.2595215 Q 3.3867188 9.520996 3.909668 9.520996 Q 4.5405273 9.520996 4.959717 9.230469 Q 5.3789063 8.939941 5.611328 8.350586 Z "/></symbol><symbol id="g749DDD24D2CF11CC6BABE93F5597223" overflow="visible"><path d="M 8.724121 5.760742 L 8.724121 0 L 7.1884766 0 L 7.1884766 5.760742 Q 7.1884766 7.01416 6.748535 7.6035156 Q 6.3085938 8.192871 5.3706055 8.192871 Q 4.2998047 8.192871 3.7229004 7.4333496 Q 3.145996 6.673828 3.145996 5.2543945 L 3.145996 0 L 1.6186523 0 L 1.6186523 12.916016 L 3.145996 12.916016 L 3.145996 7.9023438 Q 3.5527344 8.699219 4.25 9.110107 Q 4.9472656 9.520996 5.9018555 9.520996 Q 7.321289 9.520996 8.022705 8.587158 Q 8.724121 7.6533203 8.724121 5.760742 Z "/></symbol><symbol id="g24E3568E488DCB2078ED57BE6FD97B56" overflow="visible"><path d="M 5.304199 3.3701172 Q 5.304199 2.3408203 5.681885 1.8178711 Q 6.0595703 1.2949219 6.79834 1.2949219 L 8.583008 1.2949219 L 8.583008 0 L 6.648926 0 Q 5.279297 0 4.528076 0.8798828 Q 3.7768555 1.7597656 3.7768555 3.3701172 L 3.7768555 11.812012 L 1.328125 11.812012 L 1.328125 13.007324 L 5.304199 13.007324 L 5.304199 3.3701172 Z "/></symbol><symbol id="gFF8E70305C9B4F601E02AB26F65CF687" overflow="visible"><path d="M 7.620117 4.6401367 Q 7.620117 6.416504 7.055664 7.321289 Q 6.491211 8.226074 5.387207 8.226074 Q 4.2749023 8.226074 3.7021484 7.3171387 Q 3.1293945 6.408203 3.1293945 4.6401367 Q 3.1293945 2.880371 3.7021484 1.9672852 Q 4.2749023 1.0541992 5.387207 1.0541992 Q 6.491211 1.0541992 7.055664 1.9589844 Q 7.620117 2.8637695 7.620117 4.6401367 Z M 3.1293945 8.109863 Q 3.494629 8.790527 4.1379395 9.155762 Q 4.78125 9.520996 5.6279297 9.520996 Q 7.3046875 9.520996 8.267578 8.230225 Q 9.230469 6.939453 9.230469 4.67334 Q 9.230469 2.3740234 8.263428 1.0666504 Q 7.2963867 -0.24072266 5.611328 -0.24072266 Q 4.78125 -0.24072266 4.14624 0.12036133 Q 3.5112305 0.4814453 3.1293945 1.1704102 L 3.1293945 0 L 1.6020508 0 L 1.6020508 12.916016 L 3.1293945 12.916016 L 3.1293945 8.109863 Z "/></symbol><symbol id="g6CF87839CD3E8D9C3AE5A144A46E9E75" overflow="visible"><path d="M 1.9589844 12.916016 L 3.5361328 12.916016 L 3.5361328 5.4370117 L 7.54541 9.296875 L 9.404785 9.296875 L 5.7441406 5.7939453 L 9.977539 0 L 8.109863 0 L 4.67334 4.7978516 L 3.5361328 3.7270508 L 3.5361328 0 L 1.9589844 0 L 1.9589844 12.916016 Z "/></symbol><symbol id="g70A289BFCD7786312D0559D10B396C25" overflow="visible"><path d="M 6.979297 4.608594 L 6.979297 0 L 5.7507815 0 L 5.7507815 4.608594 Q 5.7507815 5.611328 5.3988285 6.082813 Q 5.046875 6.554297 4.2964845 6.554297 Q 3.439844 6.554297 2.9783204 5.94668 Q 2.5167968 5.3390627 2.5167968 4.2035155 L 2.5167968 0 L 1.2949219 0 L 1.2949219 7.4375 L 2.5167968 7.4375 L 2.5167968 6.321875 Q 2.8421876 6.9593754 3.4 7.288086 Q 3.9578125 7.616797 4.7214847 7.616797 Q 5.8570313 7.616797 6.4181643 6.8697267 Q 6.979297 6.1226563 6.979297 4.608594 Z "/></symbol><symbol id="gF468206C1E68B7C03DB0A6C10E852788" overflow="visible"><path d="M 0 9.296875 L 1.5107422 9.296875 L 3.1293945 1.784668 L 4.4575195 6.5825195 L 5.760742 6.5825195 L 7.1054688 1.784668 L 8.724121 9.296875 L 10.234863 9.296875 L 8.060059 0 L 6.599121 0 L 5.1132813 5.0966797 L 3.6357422 0 L 2.1748047 0 L 0 9.296875 Z "/></symbol><symbol id="gC739666B161A484290AFC054395BB590" overflow="visible"><path d="M 2.9550781 5.3374023 L 7.279785 5.3374023 L 7.279785 3.9760742 L 2.9550781 3.9760742 L 2.9550781 5.3374023 Z "/></symbol></defs></svg></div><div style="
"><p><br><span id="char-groups" style="text-decoration: underline"><h4>Character Groups</h4></span> RegEx engines already define some groups of characters that can make writing RegEx expressions quicker.</p><svg class="typst-frame" style="overflow: visible; width: 39.7077205882353em; height: 13.837982536764708em;" viewBox="0 0 675.03125 235.24570312500003" width="675.03125pt" height="235.24570312500003pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:h5="http://www.w3.org/1999/xhtml"><g><g transform="translate(0 0)"><g class="typst-group"><g><g transform="translate(0 -0.5)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 0 236.2457 "/></g><g transform="translate(81.64404296875 -0.5)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 0 236.2457 "/></g><g transform="translate(675.03125 -0.5)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 0 236.2457 "/></g><g transform="translate(-0.5 0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(-0.5 22.916015625)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(-0.5 53.248828124999996)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(-0.5 83.58164062499999)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(-0.5 113.914453125)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(-0.5 144.24726562499998)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(-0.5 174.580078125)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(-0.5 204.91289062500002)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(-0.5 235.24570312500003)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 0 0 L 676.03125 0 "/></g><g transform="translate(5 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#gD50A97DBFCC1B2AF88274C574B62AD0F" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="30.70458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#gDFA239FF7EF365A2405280CFC1B30A88" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="30.70458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD0269DB94B2B0282AF9573513A87B979" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/></g></g><g transform="translate(0 22.916015625)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 16.687891 0 C 17.516317 0 18.187891 0.67157286 18.187891 1.5 L 18.187891 18.832813 C 18.187891 19.66124 17.516317 20.332813 16.687891 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#gDB4F87C53AA688C04B27F90D7D4956AF" x="0" y="0" fill="#d73a49" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g22BB7F87581003081CACEB300774C57F" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="143.2880859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gB785B0A2E202BDDAFD2D1BD6098DB78A" x="153.52294921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="163.7578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="173.99267578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD0269DB94B2B0282AF9573513A87B979" x="184.2275390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="194.46240234375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g3D3A895CF8B7FBD193F547B40ED49009" x="214.93212890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="225.1669921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="235.40185546875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="255.87158203125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="266.1064453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="276.34130859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="286.576171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gFF8E70305C9B4F601E02AB26F65CF687" x="307.0458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="317.28076171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="327.515625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="337.75048828125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6CF87839CD3E8D9C3AE5A144A46E9E75" x="347.9853515625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="358.22021484375" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(0 53.248828124999996)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 24.875782 0 C 25.704208 0 26.375782 0.67157286 26.375782 1.5 L 26.375782 18.832813 C 26.375782 19.66124 25.704208 20.332813 24.875782 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="0" y="0" fill="#d73a49" fill-rule="nonzero"/><use xlink:href="#gB034F787F09585BA1FF5236D1F06E3D3" x="8.187890625" y="0" fill="#d73a49" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g22BB7F87581003081CACEB300774C57F" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gF468206C1E68B7C03DB0A6C10E852788" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD0269DB94B2B0282AF9573513A87B979" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="133.05322265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="153.52294921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="163.7578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="184.2275390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="194.46240234375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="204.697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="214.93212890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gFF8E70305C9B4F601E02AB26F65CF687" x="235.40185546875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="245.63671875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="255.87158203125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="266.1064453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6CF87839CD3E8D9C3AE5A144A46E9E75" x="276.34130859375" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(0 83.58164062499999)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 24.875782 0 C 25.704208 0 26.375782 0.67157286 26.375782 1.5 L 26.375782 18.832813 C 26.375782 19.66124 25.704208 20.332813 24.875782 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="0" y="0" fill="#d73a49" fill-rule="nonzero"/><use xlink:href="#gAD6C26F03E3A39D528E1E18DA7B1B8AE" x="8.187890625" y="0" fill="#d73a49" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g22BB7F87581003081CACEB300774C57F" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="143.2880859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gB785B0A2E202BDDAFD2D1BD6098DB78A" x="153.52294921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="163.7578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="173.99267578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD0269DB94B2B0282AF9573513A87B979" x="184.2275390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="194.46240234375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gF468206C1E68B7C03DB0A6C10E852788" x="214.93212890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="225.1669921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="235.40185546875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="245.63671875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="255.87158203125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="266.1064453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD0269DB94B2B0282AF9573513A87B979" x="276.34130859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="286.576171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="296.81103515625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="307.0458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="317.28076171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="337.75048828125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="347.9853515625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="368.455078125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="378.68994140625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="388.9248046875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="399.15966796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gFF8E70305C9B4F601E02AB26F65CF687" x="419.62939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="429.8642578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="440.09912109375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="450.333984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6CF87839CD3E8D9C3AE5A144A46E9E75" x="460.56884765625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="470.8037109375" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(0 113.914453125)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 24.875782 0 C 25.704208 0 26.375782 0.67157286 26.375782 1.5 L 26.375782 18.832813 C 26.375782 19.66124 25.704208 20.332813 24.875782 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="0" y="0" fill="#d73a49" fill-rule="nonzero"/><use xlink:href="#g7C532BDA3B5D8A81B35335F76ACBCF30" x="8.187890625" y="0" fill="#d73a49" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g22BB7F87581003081CACEB300774C57F" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g616EBC7276319E939FB1D86AB5DBB912" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gB867E918A4E2661645635F384E764254" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g3D3A895CF8B7FBD193F547B40ED49009" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g35BF6B03EF89CF7767A7FE0A80AABDB5" x="133.05322265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g30FCAC3B435FB3AC4069238FB96B06DD" x="153.52294921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="173.99267578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="184.2275390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g200F656D5CFFD9B50E894E289C11E6CF" x="204.697265625" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(0 144.24726562499998)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 24.875782 0 C 25.704208 0 26.375782 0.67157286 26.375782 1.5 L 26.375782 18.832813 C 26.375782 19.66124 25.704208 20.332813 24.875782 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="0" y="0" fill="#d73a49" fill-rule="nonzero"/><use xlink:href="#g3951AB7FB8AF1BF3ECDD41E01B5EC4F1" x="8.187890625" y="0" fill="#d73a49" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g22BB7F87581003081CACEB300774C57F" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="143.2880859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gB785B0A2E202BDDAFD2D1BD6098DB78A" x="153.52294921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="163.7578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="173.99267578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD0269DB94B2B0282AF9573513A87B979" x="184.2275390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="194.46240234375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g616EBC7276319E939FB1D86AB5DBB912" x="214.93212890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="225.1669921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gB867E918A4E2661645635F384E764254" x="235.40185546875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="245.63671875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="255.87158203125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="266.1064453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g3D3A895CF8B7FBD193F547B40ED49009" x="286.576171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="296.81103515625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="307.0458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g35BF6B03EF89CF7767A7FE0A80AABDB5" x="317.28076171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g30FCAC3B435FB3AC4069238FB96B06DD" x="337.75048828125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="358.22021484375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="368.455078125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g200F656D5CFFD9B50E894E289C11E6CF" x="388.9248046875" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(0 174.580078125)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 24.875782 0 C 25.704208 0 26.375782 0.67157286 26.375782 1.5 L 26.375782 18.832813 C 26.375782 19.66124 25.704208 20.332813 24.875782 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="0" y="0" fill="#d73a49" fill-rule="nonzero"/><use xlink:href="#gC0627B222C0A997C36396EB980A889A5" x="8.187890625" y="0" fill="#d73a49" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="30.70458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6D7057CCE3B27AA91C8177EE42F604FC" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g616EBC7276319E939FB1D86AB5DBB912" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gB867E918A4E2661645635F384E764254" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="133.05322265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="143.2880859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6D7057CCE3B27AA91C8177EE42F604FC" x="153.52294921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="173.99267578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="184.2275390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g91164FC0321F75AFFDF6C4C0508B9403" x="204.697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="214.93212890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g616EBC7276319E939FB1D86AB5DBB912" x="225.1669921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="235.40185546875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="245.63671875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="255.87158203125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="266.1064453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="276.34130859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="286.576171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="296.81103515625" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(0 204.91289062500002)"><g class="typst-group"><g><g transform="translate(5 5)"><g class="typst-group"><g><g transform="translate(-0 -0)"><path class="typst-shape" fill="none" stroke="#000000" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" d="M 1.5 0 L 24.875782 0 C 25.704208 0 26.375782 0.67157286 26.375782 1.5 L 26.375782 18.832813 C 26.375782 19.66124 25.704208 20.332813 24.875782 20.332813 L 1.5 20.332813 C 0.67157286 20.332813 0 19.66124 0 18.832813 L 0 1.5 C 0 0.67157286 0.67157286 0 1.5 0 "/></g><g transform="translate(5 15.332812500000001)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g77B515F5A19B726699BB309F6E7D1982" x="0" y="0" fill="#d73a49" fill-rule="nonzero"/><use xlink:href="#g4F298DF10B025E01D569158CD543023C" x="8.187890625" y="0" fill="#d73a49" fill-rule="nonzero"/></g></g></g></g></g><g transform="translate(86.64404296875 17.916015625)"><g class="typst-text" transform="scale(1, -1)"><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="0" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="10.23486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g22BB7F87581003081CACEB300774C57F" x="20.4697265625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="40.939453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g749DDD24D2CF11CC6BABE93F5597223" x="51.17431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="61.4091796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="71.64404296875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="81.87890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="92.11376953125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="102.3486328125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="112.58349609375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="122.818359375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="143.2880859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gB785B0A2E202BDDAFD2D1BD6098DB78A" x="153.52294921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="163.7578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="173.99267578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD0269DB94B2B0282AF9573513A87B979" x="184.2275390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="194.46240234375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g3D3A895CF8B7FBD193F547B40ED49009" x="214.93212890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="225.1669921875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="235.40185546875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g24E3568E488DCB2078ED57BE6FD97B56" x="255.87158203125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="266.1064453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="276.34130859375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="286.576171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="296.81103515625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="307.0458984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="317.28076171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6D7057CCE3B27AA91C8177EE42F604FC" x="327.515625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g616EBC7276319E939FB1D86AB5DBB912" x="347.9853515625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="358.22021484375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gB867E918A4E2661645635F384E764254" x="368.455078125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g8994DF9C9688059F90C624273B89485C" x="378.68994140625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6DFAAC9B19C5F55A301A27DA78BC3D2B" x="388.9248046875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="399.15966796875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6D7057CCE3B27AA91C8177EE42F604FC" x="409.39453125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g6B1726F4DF965EF5F691F5F83A105856" x="429.8642578125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="440.09912109375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g616EBC7276319E939FB1D86AB5DBB912" x="450.333984375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g91164FC0321F75AFFDF6C4C0508B9403" x="470.8037109375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g15F8D98A982CAFFBB2DC5CFB952688B3" x="481.03857421875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g616EBC7276319E939FB1D86AB5DBB912" x="491.2734375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="501.50830078125" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="511.7431640625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="521.97802734375" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#g287DBFEC2AF7D6697558565F1658C356" x="532.212890625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gC9947EF6A39C68349F7D66C615F6F2B0" x="542.44775390625" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gD1C7956DAF8AD82D229D654A639ECA4" x="552.6826171875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gDB38173BD41D6F8246F6E4E5034FA1E3" x="562.91748046875" y="0" fill="#000000" fill-rule="nonzero"/><use xlink:href="#gAD49535C0E195BFBF1C53D400910C0D3" x="573.15234375" y="0" fill="#000000" fill-rule="nonzero"/></g></g></g></g></g></g></g></g></g><defs id="glyph"><symbol id="gD50A97DBFCC1B2AF88274C574B62AD0F" overflow="visible"><path d="M 3.3120117 11.015137 L 3.3120117 6.3583984 L 5.2543945 6.3583984 Q 6.416504 6.3583984 7.068115 6.9726563 Q 7.7197266 7.586914 7.7197266 8.690918 Q 7.7197266 9.794922 7.0722656 10.405029 Q 6.4248047 11.015137 5.2543945 11.015137 L 3.3120117 11.015137 Z M 1.6352539 12.393066 L 5.2543945 12.393066 Q 7.32959 12.393066 8.400391 11.450928 Q 9.471191 10.508789 9.471191 8.690918 Q 9.471191 6.8564453 8.404541 5.918457 Q 7.3378906 4.9804688 5.2543945 4.9804688 L 3.3120117 4.9804688 L 3.3120117 0 L 1.6352539 0 L 1.6352539 12.393066 Z "/></symbol><symbol id="g6B1726F4DF965EF5F691F5F83A105856" overflow="visible"><path d="M 5.8271484 4.67334 L 5.320801 4.67334 Q 3.984375 4.67334 3.3078613 4.2043457 Q 2.6313477 3.7353516 2.6313477 2.805664 Q 2.6313477 1.9672852 3.1376953 1.5024414 Q 3.644043 1.0375977 4.5405273 1.0375977 Q 5.802246 1.0375977 6.524414 1.9133301 Q 7.246582 2.7890625 7.254883 4.333008 L 7.254883 4.67334 L 5.8271484 4.67334 Z M 8.790527 5.304199 L 8.790527 0 L 7.254883 0 L 7.254883 1.3779297 Q 6.7651367 0.54785156 6.022217 0.15356445 Q 5.279297 -0.24072266 4.216797 -0.24072266 Q 2.7973633 -0.24072266 1.9506836 0.56030273 Q 1.1040039 1.3613281 1.1040039 2.7060547 Q 1.1040039 4.258301 2.145752 5.0634766 Q 3.1875 5.8686523 5.20459 5.8686523 L 7.254883 5.8686523 L 7.254883 6.109375 Q 7.246582 7.2216797 6.6904297 7.723877 Q 6.1342773 8.226074 4.9140625 8.226074 Q 4.133789 8.226074 3.336914 8.001953 Q 2.540039 7.777832 1.784668 7.3461914 L 1.784668 8.873535 Q 2.6313477 9.197266 3.4074707 9.359131 Q 4.1835938 9.520996 4.9140625 9.520996 Q 6.067871 9.520996 6.885498 9.180664 Q 7.703125 8.840332 8.209473 8.159668 Q 8.524902 7.744629 8.657715 7.1345215 Q 8.790527 6.524414 8.790527 5.304199 Z "/></symbol><symbol id="g6DFAAC9B19C5F55A301A27DA78BC3D2B" overflow="visible"><path d="M 5.0966797 11.936523 L 5.0966797 9.296875 L 8.566406 9.296875 L 8.566406 8.109863 L 5.0966797 8.109863 L 5.0966797 3.0629883 Q 5.0966797 2.0336914 5.4868164 1.6269531 Q 5.876953 1.2202148 6.8481445 1.2202148 L 8.566406 1.2202148 L 8.566406 0 L 6.6987305 0 Q 4.9804688 0 4.2749023 0.68896484 Q 3.569336 1.3779297 3.569336 3.0629883 L 3.569336 8.109863 L 1.0874023 8.109863 L 1.0874023 9.296875 L 3.569336 9.296875 L 3.569336 11.936523 L 5.0966797 11.936523 Z "/></symbol><symbol id="gDB38173BD41D6F8246F6E4E5034FA1E3" overflow="visible"><path d="M 9.230469 5.0302734 L 9.230469 4.283203 L 2.614746 4.283203 L 2.614746 4.2333984 Q 2.614746 2.7143555 3.4074707 1.8842773 Q 4.2001953 1.0541992 5.6445313 1.0541992 Q 6.375 1.0541992 7.171875 1.2866211 Q 7.96875 1.519043 8.873535 1.9921875 L 8.873535 0.47314453 Q 8.001953 0.11621094 7.192627 -0.06225586 Q 6.383301 -0.24072266 5.6279297 -0.24072266 Q 3.4614258 -0.24072266 2.241211 1.0583496 Q 1.0209961 2.3574219 1.0209961 4.6401367 Q 1.0209961 6.864746 2.2163086 8.192871 Q 3.411621 9.520996 5.4038086 9.520996 Q 7.180176 9.520996 8.205322 8.317383 Q 9.230469 7.1137695 9.230469 5.0302734 Z M 7.703125 5.4785156 Q 7.669922 6.823242 7.068115 7.524658 Q 6.4663086 8.226074 5.3374023 8.226074 Q 4.2333984 8.226074 3.5195313 7.4956055 Q 2.805664 6.7651367 2.6728516 5.470215 L 7.703125 5.4785156 Z "/></symbol><symbol id="gD1C7956DAF8AD82D229D654A639ECA4" overflow="visible"><path d="M 9.587402 7.3793945 Q 9.097656 7.7612305 8.591309 7.935547 Q 8.084961 8.109863 7.479004 8.109863 Q 6.0512695 8.109863 5.2958984 7.213379 Q 4.5405273 6.3168945 4.5405273 4.623535 L 4.5405273 0 L 3.0048828 0 L 3.0048828 9.296875 L 4.5405273 9.296875 L 4.5405273 7.479004 Q 4.9223633 8.466797 5.715088 8.9938965 Q 6.5078125 9.520996 7.595215 9.520996 Q 8.159668 9.520996 8.649414 9.379883 Q 9.13916 9.23877 9.587402 8.939941 L 9.587402 7.3793945 Z "/></symbol><symbol id="g15F8D98A982CAFFBB2DC5CFB952688B3" overflow="visible"><path d="M 8.724121 5.760742 L 8.724121 0 L 7.1884766 0 L 7.1884766 5.760742 Q 7.1884766 7.01416 6.748535 7.6035156 Q 6.3085938 8.192871 5.3706055 8.192871 Q 4.2998047 8.192871 3.7229004 7.4333496 Q 3.145996 6.673828 3.145996 5.2543945 L 3.145996 0 L 1.6186523 0 L 1.6186523 9.296875 L 3.145996 9.296875 L 3.145996 7.9023438 Q 3.5527344 8.699219 4.25 9.110107 Q 4.9472656 9.520996 5.9018555 9.520996 Q 7.321289 9.520996 8.022705 8.587158 Q 8.724121 7.6533203 8.724121 5.760742 Z "/></symbol><symbol id="gDFA239FF7EF365A2405280CFC1B30A88" overflow="visible"><path d="M 3.6191406 1.3779297 Q 5.73584 1.3779297 6.5742188 2.4196777 Q 7.4125977 3.4614258 7.4125977 6.184082 Q 7.4125977 8.931641 6.578369 9.973389 Q 5.7441406 11.015137 3.6191406 11.015137 L 2.8222656 11.015137 L 2.8222656 1.3779297 L 3.6191406 1.3779297 Z M 3.6523438 12.393066 Q 6.491211 12.393066 7.8359375 10.882324 Q 9.180664 9.371582 9.180664 6.184082 Q 9.180664 3.0131836 7.8359375 1.5065918 Q 6.491211 0 3.6523438 0 L 1.137207 0 L 1.137207 12.393066 L 3.6523438 12.393066 Z "/></symbol><symbol id="gAD49535C0E195BFBF1C53D400910C0D3" overflow="visible"><path d="M 8.07666 8.973145 L 8.07666 7.479004 Q 7.4208984 7.86084 6.756836 8.051758 Q 6.0927734 8.242676 5.4038086 8.242676 Q 4.366211 8.242676 3.855713 7.906494 Q 3.3452148 7.5703125 3.3452148 6.8813477 Q 3.3452148 6.258789 3.7270508 5.95166 Q 4.1088867 5.6445313 5.6279297 5.354004 L 6.2421875 5.237793 Q 7.3793945 5.0219727 7.9645996 4.3745117 Q 8.549805 3.7270508 8.549805 2.6894531 Q 8.549805 1.3115234 7.5703125 0.5354004 Q 6.5908203 -0.24072266 4.8476563 -0.24072266 Q 4.1586914 -0.24072266 3.4033203 -0.095458984 Q 2.6479492 0.049804688 1.7680664 0.34033203 L 1.7680664 1.9174805 Q 2.6230469 1.4775391 3.4033203 1.2575684 Q 4.1835938 1.0375977 4.8808594 1.0375977 Q 5.8935547 1.0375977 6.449707 1.4484863 Q 7.0058594 1.859375 7.0058594 2.5981445 Q 7.0058594 3.6606445 4.972168 4.067383 L 4.9057617 4.0839844 L 4.333008 4.2001953 Q 3.0131836 4.4575195 2.4072266 5.067627 Q 1.8012695 5.6777344 1.8012695 6.7319336 Q 1.8012695 8.068359 2.7060547 8.794678 Q 3.6108398 9.520996 5.2875977 9.520996 Q 6.034668 9.520996 6.723633 9.384033 Q 7.4125977 9.24707 8.07666 8.973145 Z "/></symbol><symbol id="g287DBFEC2AF7D6697558565F1658C356" overflow="visible"><path d="M 8.807129 0.47314453 Q 8.192871 0.11621094 7.54126 -0.06225586 Q 6.8896484 -0.24072266 6.2089844 -0.24072266 Q 4.0507813 -0.24072266 2.8347168 1.0541992 Q 1.6186523 2.349121 1.6186523 4.6401367 Q 1.6186523 6.9311523 2.8347168 8.226074 Q 4.0507813 9.520996 6.2089844 9.520996 Q 6.8813477 9.520996 7.520508 9.34668 Q 8.159668 9.172363 8.807129 8.807129 L 8.807129 7.205078 Q 8.201172 7.744629 7.5910645 7.9853516 Q 6.980957 8.226074 6.2089844 8.226074 Q 4.772949 8.226074 4.0009766 7.2963867 Q 3.229004 6.366699 3.229004 4.6401367 Q 3.229004 2.921875 4.005127 1.9880371 Q 4.78125 1.0541992 6.2089844 1.0541992 Q 7.0058594 1.0541992 7.6367188 1.2990723 Q 8.267578 1.5439453 8.807129 2.0585938 L 8.807129 0.47314453 Z "/></symbol><symbol id="g8994DF9C9688059F90C624273B89485C" overflow="visible"><path d="M 2.125 9.296875 L 6.034668 9.296875 L 6.034668 1.1870117 L 9.064453 1.1870117 L 9.064453 0 L 1.4775391 0 L 1.4775391 1.1870117 L 4.507324 1.1870117 L 4.507324 8.109863 L 2.125 8.109863 L 2.125 9.296875 Z M 4.507324 12.916016 L 6.034668 12.916016 L 6.034668 10.981934 L 4.507324 10.981934 L 4.507324 12.916016 Z "/></symbol><symbol id="gD0269DB94B2B0282AF9573513A87B979" overflow="visible"><path d="M 3.112793 1.1704102 L 3.112793 -3.5361328 L 1.5771484 -3.5361328 L 1.5771484 9.296875 L 3.112793 9.296875 L 3.112793 8.109863 Q 3.494629 8.798828 4.1296387 9.159912 Q 4.7646484 9.520996 5.5947266 9.520996 Q 7.279785 9.520996 8.238525 8.217773 Q 9.197266 6.914551 9.197266 4.6069336 Q 9.197266 2.3408203 8.234375 1.0500488 Q 7.2714844 -0.24072266 5.5947266 -0.24072266 Q 4.748047 -0.24072266 4.113037 0.12036133 Q 3.4780273 0.4814453 3.112793 1.1704102 Z M 7.595215 4.6401367 Q 7.595215 6.416504 7.034912 7.321289 Q 6.4746094 8.226074 5.3706055 8.226074 Q 4.258301 8.226074 3.6855469 7.3171387 Q 3.112793 6.408203 3.112793 4.6401367 Q 3.112793 2.880371 3.6855469 1.9672852 Q 4.258301 1.0541992 5.3706055 1.0541992 Q 6.4746094 1.0541992 7.034912 1.9589844 Q 7.595215 2.8637695 7.595215 4.6401367 Z "/></symbol><symbol id="gC9947EF6A39C68349F7D66C615F6F2B0" overflow="visible"><path d="M 5.1132813 8.226074 Q 3.9511719 8.226074 3.3535156 7.321289 Q 2.7558594 6.416504 2.7558594 4.6401367 Q 2.7558594 2.8720703 3.3535156 1.9631348 Q 3.9511719 1.0541992 5.1132813 1.0541992 Q 6.2836914 1.0541992 6.8813477 1.9631348 Q 7.479004 2.8720703 7.479004 4.6401367 Q 7.479004 6.416504 6.8813477 7.321289 Q 6.2836914 8.226074 5.1132813 8.226074 Z M 5.1132813 9.520996 Q 7.0473633 9.520996 8.07251 8.267578 Q 9.097656 7.01416 9.097656 4.6401367 Q 9.097656 2.2578125 8.07666 1.0085449 Q 7.055664 -0.24072266 5.1132813 -0.24072266 Q 3.1791992 -0.24072266 2.1582031 1.0085449 Q 1.137207 2.2578125 1.137207 4.6401367 Q 1.137207 7.01416 2.1582031 8.267578 Q 3.1791992 9.520996 5.1132813 9.520996 Z "/></symbol><symbol id="gDB4F87C53AA688C04B27F90D7D4956AF" overflow="visible"><path d="M 3.2472658 2.0253906 L 4.9207034 2.0253906 L 4.9207034 0 L 3.2472658 0 L 3.2472658 2.0253906 Z "/></symbol><symbol id="g22BB7F87581003081CACEB300774C57F" overflow="visible"><path d="M 7.1220703 2.9882813 Q 6.7402344 2.0170898 6.150879 0.43164063 Q 5.3291016 -1.7597656 5.046875 -2.241211 Q 4.665039 -2.8886719 4.092285 -3.2124023 Q 3.5195313 -3.5361328 2.7558594 -3.5361328 L 1.5273438 -3.5361328 L 1.5273438 -2.2578125 L 2.432129 -2.2578125 Q 3.1044922 -2.2578125 3.4863281 -1.8676758 Q 3.868164 -1.4775391 4.4575195 0.14941406 L 0.86328125 9.296875 L 2.4819336 9.296875 L 5.237793 2.0253906 L 7.9521484 9.296875 L 9.570801 9.296875 L 7.1220703 2.9882813 Z "/></symbol><symbol id="g749DDD24D2CF11CC6BABE93F5597223" overflow="visible"><path d="M 8.724121 5.760742 L 8.724121 0 L 7.1884766 0 L 7.1884766 5.760742 Q 7.1884766 7.01416 6.748535 7.6035156 Q 6.3085938 8.192871 5.3706055 8.192871 Q 4.2998047 8.192871 3.7229004 7.4333496 Q 3.145996 6.673828 3.145996 5.2543945 L 3.145996 0 L 1.6186523 0 L 1.6186523 12.916016 L 3.145996 12.916016 L 3.145996 7.9023438 Q 3.5527344 8.699219 4.25 9.110107 Q 4.9472656 9.520996 5.9018555 9.520996 Q 7.321289 9.520996 8.022705 8.587158 Q 8.724121 7.6533203 8.724121 5.760742 Z "/></symbol><symbol id="gB785B0A2E202BDDAFD2D1BD6098DB78A" overflow="visible"><path d="M 9.280273 9.296875 L 5.95166 4.8476563 L 9.604004 0 L 7.8359375 0 L 5.1132813 3.7270508 L 2.3989258 0 L 0.6308594 0 L 4.283203 4.8476563 L 0.95458984 9.296875 L 2.6479492 9.296875 L 5.1132813 5.9350586 L 7.5620117 9.296875 L 9.280273 9.296875 Z "/></symbol><symbol id="g3D3A895CF8B7FBD193F547B40ED49009" overflow="visible"><path d="M 8.82373 12.916016 L 8.82373 11.645996 L 7.088867 11.645996 Q 6.26709 11.645996 5.94751 11.309814 Q 5.6279297 10.973633 5.6279297 10.118652 L 5.6279297 9.296875 L 8.82373 9.296875 L 8.82373 8.109863 L 5.6279297 8.109863 L 5.6279297 0 L 4.100586 0 L 4.100586 8.109863 L 1.6186523 8.109863 L 1.6186523 9.296875 L 4.100586 9.296875 L 4.100586 9.944336 Q 4.100586 11.47168 4.802002 12.193848 Q 5.503418 12.916016 6.989258 12.916016 L 8.82373 12.916016 Z "/></symbol><symbol id="g24E3568E488DCB2078ED57BE6FD97B56" overflow="visible"><path d="M 5.304199 3.3701172 Q 5.304199 2.3408203 5.681885 1.8178711 Q 6.0595703 1.2949219 6.79834 1.2949219 L 8.583008 1.2949219 L 8.583008 0 L 6.648926 0 Q 5.279297 0 4.528076 0.8798828 Q 3.7768555 1.7597656 3.7768555 3.3701172 L 3.7768555 11.812012 L 1.328125 11.812012 L 1.328125 13.007324 L 5.304199 13.007324 L 5.304199 3.3701172 Z "/></symbol><symbol id="gFF8E70305C9B4F601E02AB26F65CF687" overflow="visible"><path d="M 7.620117 4.6401367 Q 7.620117 6.416504 7.055664 7.321289 Q 6.491211 8.226074 5.387207 8.226074 Q 4.2749023 8.226074 3.7021484 7.3171387 Q 3.1293945 6.408203 3.1293945 4.6401367 Q 3.1293945 2.880371 3.7021484 1.9672852 Q 4.2749023 1.0541992 5.387207 1.0541992 Q 6.491211 1.0541992 7.055664 1.9589844 Q 7.620117 2.8637695 7.620117 4.6401367 Z M 3.1293945 8.109863 Q 3.494629 8.790527 4.1379395 9.155762 Q 4.78125 9.520996 5.6279297 9.520996 Q 7.3046875 9.520996 8.267578 8.230225 Q 9.230469 6.939453 9.230469 4.67334 Q 9.230469 2.3740234 8.263428 1.0666504 Q 7.2963867 -0.24072266 5.611328 -0.24072266 Q 4.78125 -0.24072266 4.14624 0.12036133 Q 3.5112305 0.4814453 3.1293945 1.1704102 L 3.1293945 0 L 1.6020508 0 L 1.6020508 12.916016 L 3.1293945 12.916016 L 3.1293945 8.109863 Z "/></symbol><symbol id="g6CF87839CD3E8D9C3AE5A144A46E9E75" overflow="visible"><path d="M 1.9589844 12.916016 L 3.5361328 12.916016 L 3.5361328 5.4370117 L 7.54541 9.296875 L 9.404785 9.296875 L 5.7441406 5.7939453 L 9.977539 0 L 8.109863 0 L 4.67334 4.7978516 L 3.5361328 3.7270508 L 3.5361328 0 L 1.9589844 0 L 1.9589844 12.916016 Z "/></symbol><symbol id="g77B515F5A19B726699BB309F6E7D1982" overflow="visible"><path d="M 1.9457031 9.9144535 L 7.1652346 -1.2617188 L 5.903516 -1.2617188 L 0.6773438 9.9144535 L 1.9457031 9.9144535 Z "/></symbol><symbol id="gB034F787F09585BA1FF5236D1F06E3D3" overflow="visible"><path d="M 6.4613285 7.178516 L 6.4613285 5.9832034 Q 5.936719 6.288672 5.405469 6.4414063 Q 4.874219 6.594141 4.323047 6.594141 Q 3.4929688 6.594141 3.0845704 6.3251953 Q 2.676172 6.05625 2.676172 5.5050783 Q 2.676172 5.0070314 2.9816408 4.761328 Q 3.2871094 4.515625 4.5023437 4.283203 L 4.99375 4.1902347 Q 5.903516 4.017578 6.37168 3.4996095 Q 6.8398438 2.9816408 6.8398438 2.1515625 Q 6.8398438 1.0492188 6.05625 0.42832032 Q 5.2726564 -0.19257814 3.8781252 -0.19257814 Q 3.3269532 -0.19257814 2.7226563 -0.07636719 Q 2.1183593 0.039843753 1.4144531 0.27226564 L 1.4144531 1.5339844 Q 2.0984375 1.1820313 2.7226563 1.0060548 Q 3.3468752 0.8300781 3.9046876 0.8300781 Q 4.7148438 0.8300781 5.1597657 1.158789 Q 5.6046877 1.4875001 5.6046877 2.0785158 Q 5.6046877 2.9285157 3.9777346 3.2539063 L 3.9246094 3.2671876 L 3.4664063 3.3601563 Q 2.410547 3.5660157 1.9257813 4.0541015 Q 1.4410157 4.5421877 1.4410157 5.385547 Q 1.4410157 6.4546876 2.1648438 7.0357423 Q 2.8886719 7.616797 4.230078 7.616797 Q 4.8277345 7.616797 5.3789063 7.507227 Q 5.9300785 7.3976564 6.4613285 7.178516 Z "/></symbol><symbol id="gF468206C1E68B7C03DB0A6C10E852788" overflow="visible"><path d="M 0 9.296875 L 1.5107422 9.296875 L 3.1293945 1.784668 L 4.4575195 6.5825195 L 5.760742 6.5825195 L 7.1054688 1.784668 L 8.724121 9.296875 L 10.234863 9.296875 L 8.060059 0 L 6.599121 0 L 5.1132813 5.0966797 L 3.6357422 0 L 2.1748047 0 L 0 9.296875 Z "/></symbol><symbol id="gAD6C26F03E3A39D528E1E18DA7B1B8AE" overflow="visible"><path d="M 6.7203126 9.575782 L 6.7203126 8.214454 Q 6.109375 8.60625 5.495117 8.805469 Q 4.8808594 9.004687 4.256641 9.004687 Q 3.3070314 9.004687 2.7558594 8.5630865 Q 2.2046876 8.121485 2.2046876 7.3710938 Q 2.2046876 6.713672 2.5666018 6.3683596 Q 2.9285157 6.023047 3.9179688 5.790625 L 4.6218753 5.6312504 Q 6.0164065 5.3058596 6.6539063 4.608594 Q 7.2914066 3.9113283 7.2914066 2.7093751 Q 7.2914066 1.2949219 6.414844 0.5511719 Q 5.5382814 -0.19257814 3.8648438 -0.19257814 Q 3.1675782 -0.19257814 2.463672 -0.043164063 Q 1.7597656 0.10625 1.0492188 0.40507814 L 1.0492188 1.8328125 Q 1.8128906 1.3480469 2.4935548 1.1222657 Q 3.174219 0.8964844 3.8648438 0.8964844 Q 4.8808594 0.8964844 5.4453125 1.3513672 Q 6.0097656 1.8062501 6.0097656 2.6230469 Q 6.0097656 3.366797 5.6212893 3.7585938 Q 5.232813 4.1503906 4.269922 4.3628907 L 3.5527344 4.5289063 Q 2.1714845 4.841016 1.5472656 5.471875 Q 0.9230469 6.1027346 0.9230469 7.1652346 Q 0.9230469 8.49336 1.816211 9.293555 Q 2.7093751 10.09375 4.1902347 10.09375 Q 4.761328 10.09375 5.3921876 9.964258 Q 6.023047 9.834765 6.7203126 9.575782 Z "/></symbol><symbol id="g7C532BDA3B5D8A81B35335F76ACBCF30" overflow="visible"><path d="M 5.6976566 6.4878907 L 5.6976566 10.332813 L 6.9195313 10.332813 L 6.9195313 0 L 5.6976566 0 L 5.6976566 0.9363282 Q 5.3921876 0.38515627 4.8841796 0.09628907 Q 4.376172 -0.19257814 3.7121096 -0.19257814 Q 2.3640625 -0.19257814 1.5904298 0.85332036 Q 0.8167969 1.8992188 0.8167969 3.738672 Q 0.8167969 5.551563 1.59375 6.58418 Q 2.3707032 7.616797 3.7121096 7.616797 Q 4.3828125 7.616797 4.8941407 7.32793 Q 5.405469 7.0390625 5.6976566 6.4878907 Z M 2.1050782 3.7121096 Q 2.1050782 2.2910156 2.5566406 1.5671875 Q 3.0082033 0.8433594 3.8914063 0.8433594 Q 4.7746096 0.8433594 5.236133 1.5738282 Q 5.6976566 2.304297 5.6976566 3.7121096 Q 5.6976566 5.1265626 5.236133 5.853711 Q 4.7746096 6.5808597 3.8914063 6.5808597 Q 3.0082033 6.5808597 2.5566406 5.8570313 Q 2.1050782 5.1332035 2.1050782 3.7121096 Z "/></symbol><symbol id="g616EBC7276319E939FB1D86AB5DBB912" overflow="visible"><path d="M 7.1220703 8.109863 L 7.1220703 12.916016 L 8.649414 12.916016 L 8.649414 0 L 7.1220703 0 L 7.1220703 1.1704102 Q 6.7402344 0.4814453 6.1052246 0.12036133 Q 5.470215 -0.24072266 4.6401367 -0.24072266 Q 2.9550781 -0.24072266 1.9880371 1.0666504 Q 1.0209961 2.3740234 1.0209961 4.67334 Q 1.0209961 6.939453 1.9921875 8.230225 Q 2.963379 9.520996 4.6401367 9.520996 Q 5.4785156 9.520996 6.117676 9.159912 Q 6.756836 8.798828 7.1220703 8.109863 Z M 2.6313477 4.6401367 Q 2.6313477 2.8637695 3.1958008 1.9589844 Q 3.760254 1.0541992 4.864258 1.0541992 Q 5.9682617 1.0541992 6.545166 1.9672852 Q 7.1220703 2.880371 7.1220703 4.6401367 Q 7.1220703 6.408203 6.545166 7.3171387 Q 5.9682617 8.226074 4.864258 8.226074 Q 3.760254 8.226074 3.1958008 7.321289 Q 2.6313477 6.416504 2.6313477 4.6401367 Z "/></symbol><symbol id="gB867E918A4E2661645635F384E764254" overflow="visible"><path d="M 7.1220703 4.7231445 Q 7.1220703 6.4414063 6.5617676 7.33374 Q 6.001465 8.226074 4.930664 8.226074 Q 3.8100586 8.226074 3.2207031 7.33374 Q 2.6313477 6.4414063 2.6313477 4.7231445 Q 2.6313477 3.0048828 3.2248535 2.104248 Q 3.8183594 1.2036133 4.9472656 1.2036133 Q 6.001465 1.2036133 6.5617676 2.1083984 Q 7.1220703 3.0131836 7.1220703 4.7231445 Z M 8.649414 0.59765625 Q 8.649414 -1.4941406 7.661621 -2.5732422 Q 6.673828 -3.6523438 4.7563477 -3.6523438 Q 4.1254883 -3.6523438 3.4365234 -3.5361328 Q 2.7475586 -3.4199219 2.0585938 -3.1958008 L 2.0585938 -1.6850586 Q 2.8720703 -2.0668945 3.5361328 -2.2495117 Q 4.2001953 -2.432129 4.7563477 -2.432129 Q 5.993164 -2.432129 6.557617 -1.7597656 Q 7.1220703 -1.0874023 7.1220703 0.37353516 L 7.1220703 0.4399414 L 7.1220703 1.4775391 Q 6.756836 0.6972656 6.1259766 0.3154297 Q 5.495117 -0.06640625 4.590332 -0.06640625 Q 2.963379 -0.06640625 1.9921875 1.2368164 Q 1.0209961 2.540039 1.0209961 4.7231445 Q 1.0209961 6.914551 1.9921875 8.217773 Q 2.963379 9.520996 4.590332 9.520996 Q 5.4868164 9.520996 6.109375 9.1640625 Q 6.7319336 8.807129 7.1220703 8.060059 L 7.1220703 9.263672 L 8.649414 9.263672 L 8.649414 0.59765625 Z "/></symbol><symbol id="g35BF6B03EF89CF7767A7FE0A80AABDB5" overflow="visible"><path d="M 5.611328 8.350586 Q 5.8935547 8.948242 6.3293457 9.234619 Q 6.7651367 9.520996 7.3793945 9.520996 Q 8.5 9.520996 8.960693 8.653564 Q 9.421387 7.786133 9.421387 5.387207 L 9.421387 0 L 8.026855 0 L 8.026855 5.320801 Q 8.026855 7.288086 7.806885 7.765381 Q 7.586914 8.242676 7.0058594 8.242676 Q 6.341797 8.242676 6.096924 7.7321777 Q 5.852051 7.2216797 5.852051 5.320801 L 5.852051 0 L 4.4575195 0 L 4.4575195 5.320801 Q 4.4575195 7.3129883 4.2209473 7.777832 Q 3.984375 8.242676 3.3701172 8.242676 Q 2.7641602 8.242676 2.527588 7.7321777 Q 2.2910156 7.2216797 2.2910156 5.320801 L 2.2910156 0 L 0.90478516 0 L 0.90478516 9.296875 L 2.2910156 9.296875 L 2.2910156 8.5 Q 2.5649414 8.998047 2.97583 9.2595215 Q 3.3867188 9.520996 3.909668 9.520996 Q 4.5405273 9.520996 4.959717 9.230469 Q 5.3789063 8.939941 5.611328 8.350586 Z "/></symbol><symbol id="g30FCAC3B435FB3AC4069238FB96B06DD" overflow="visible"><path d="M 4.0092773 6.225586 Q 4.0092773 6.682129 4.3288574 7.01416 Q 4.6484375 7.3461914 5.0966797 7.3461914 Q 5.5615234 7.3461914 5.8935547 7.01416 Q 6.225586 6.682129 6.225586 6.225586 Q 6.225586 5.760742 5.897705 5.4370117 Q 5.569824 5.1132813 5.0966797 5.1132813 Q 4.631836 5.1132813 4.3205566 5.428711 Q 4.0092773 5.7441406 4.0092773 6.225586 Z M 5.1132813 11.2890625 Q 3.942871 11.2890625 3.3659668 10.027344 Q 2.7890625 8.765625 2.7890625 6.184082 Q 2.7890625 3.6108398 3.3659668 2.349121 Q 3.942871 1.0874023 5.1132813 1.0874023 Q 6.291992 1.0874023 6.8688965 2.349121 Q 7.445801 3.6108398 7.445801 6.184082 Q 7.445801 8.765625 6.8688965 10.027344 Q 6.291992 11.2890625 5.1132813 11.2890625 Z M 5.1132813 12.6171875 Q 7.097168 12.6171875 8.114014 10.990234 Q 9.130859 9.363281 9.130859 6.184082 Q 9.130859 3.0131836 8.114014 1.3862305 Q 7.097168 -0.24072266 5.1132813 -0.24072266 Q 3.1293945 -0.24072266 2.1166992 1.3862305 Q 1.1040039 3.0131836 1.1040039 6.184082 Q 1.1040039 9.363281 2.1166992 10.990234 Q 3.1293945 12.6171875 5.1132813 12.6171875 Z "/></symbol><symbol id="g200F656D5CFFD9B50E894E289C11E6CF" overflow="visible"><path d="M 4.9472656 5.495117 Q 6.0180664 5.495117 6.628174 6.26709 Q 7.2382813 7.0390625 7.2382813 8.400391 Q 7.2382813 9.761719 6.628174 10.533691 Q 6.0180664 11.305664 4.9472656 11.305664 Q 3.834961 11.305664 3.2705078 10.571045 Q 2.7060547 9.836426 2.7060547 8.400391 Q 2.7060547 6.9560547 3.2663574 6.225586 Q 3.8266602 5.495117 4.9472656 5.495117 Z M 1.9589844 0.25732422 L 1.9589844 1.8012695 Q 2.4819336 1.4941406 3.071289 1.3322754 Q 3.6606445 1.1704102 4.2998047 1.1704102 Q 5.8935547 1.1704102 6.7111816 2.369873 Q 7.5288086 3.569336 7.5288086 5.9018555 Q 7.138672 5.0717773 6.4331055 4.6276855 Q 5.727539 4.1835938 4.814453 4.1835938 Q 3.0214844 4.1835938 2.0378418 5.2875977 Q 1.0541992 6.3916016 1.0541992 8.416992 Q 1.0541992 10.41748 2.0627441 11.517334 Q 3.071289 12.6171875 4.9140625 12.6171875 Q 7.0722656 12.6171875 8.07666 11.064941 Q 9.081055 9.512695 9.081055 6.184082 Q 9.081055 3.0546875 7.873291 1.4069824 Q 6.6655273 -0.24072266 4.366211 -0.24072266 Q 3.760254 -0.24072266 3.145996 -0.11206055 Q 2.5317383 0.016601563 1.9589844 0.25732422 Z "/></symbol><symbol id="g3951AB7FB8AF1BF3ECDD41E01B5EC4F1" overflow="visible"><path d="M 2.8953125 1.1023438 Q 4.588672 1.1023438 5.259375 1.9357423 Q 5.9300785 2.7691407 5.9300785 4.9472656 Q 5.9300785 7.145313 5.2626953 7.978711 Q 4.5953126 8.81211 2.8953125 8.81211 L 2.2578125 8.81211 L 2.2578125 1.1023438 L 2.8953125 1.1023438 Z M 2.921875 9.9144535 Q 5.192969 9.9144535 6.26875 8.705859 Q 7.3445315 7.497266 7.3445315 4.9472656 Q 7.3445315 2.410547 6.26875 1.2052735 Q 5.192969 0 2.921875 0 L 0.90976566 0 L 0.90976566 9.9144535 L 2.921875 9.9144535 Z "/></symbol><symbol id="gC0627B222C0A997C36396EB980A889A5" overflow="visible"><path d="M 0 7.4375 L 1.2085937 7.4375 L 2.5035157 1.4277344 L 3.5660157 5.266016 L 4.608594 5.266016 L 5.6843753 1.4277344 L 6.979297 7.4375 L 8.187891 7.4375 L 6.448047 0 L 5.279297 0 L 4.0906253 4.077344 L 2.908594 0 L 1.7398438 0 L 0 7.4375 Z "/></symbol><symbol id="g6D7057CCE3B27AA91C8177EE42F604FC" overflow="visible"><path d="M 4.166992 2.5151367 L 6.258789 2.5151367 L 6.258789 0.796875 L 4.623535 -2.3823242 L 3.3452148 -2.3823242 L 4.166992 0.796875 L 4.166992 2.5151367 Z "/></symbol><symbol id="g91164FC0321F75AFFDF6C4C0508B9403" overflow="visible"><path d="M 1.6186523 3.5195313 L 1.6186523 9.280273 L 3.145996 9.280273 L 3.145996 3.5195313 Q 3.145996 2.2661133 3.590088 1.6767578 Q 4.0341797 1.0874023 4.963867 1.0874023 Q 6.0429688 1.0874023 6.6157227 1.8469238 Q 7.1884766 2.6064453 7.1884766 4.025879 L 7.1884766 9.280273 L 8.724121 9.280273 L 8.724121 0 L 7.1884766 0 L 7.1884766 1.3945313 Q 6.7817383 0.58935547 6.0803223 0.1743164 Q 5.3789063 -0.24072266 4.440918 -0.24072266 Q 3.0131836 -0.24072266 2.315918 0.69311523 Q 1.6186523 1.6269531 1.6186523 3.5195313 Z "/></symbol><symbol id="g4F298DF10B025E01D569158CD543023C" overflow="visible"><path d="M 0 9.9144535 L 1.3082032 9.9144535 L 2.2578125 1.8660157 L 3.3867188 7.1917973 L 4.787891 7.1917973 L 5.9300785 1.8527344 L 6.879688 9.9144535 L 8.187891 9.9144535 L 6.7070313 0 L 5.438672 0 L 4.0906253 5.8902345 L 2.749219 0 L 1.4808594 0 L 0 9.9144535 Z "/></symbol></defs></svg></div><div style="
"><p><br><span id="loc-5" style="text-decoration: underline"><h4>Anchors</h4></span> <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap"><span style="color: #d73a49">^</span></code></span> is used to assert the beginning of a line in multi-line mode, or the beginning of the string in whole-string mode.</p><p><span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap"><span style="color: #d73a49">$</span></code></span> is used to assert the end of a line in multi-line mode, or the end of the string in whole-string mode.</p><p>The behaviours of these depend on the <a href="#match-options">match options</a></p></div><div style="
"><p><br><span id="greedy" style="text-decoration: underline"><h3>Greedy VS Lazy</h3></span> Some combinators will either match “lazy”, or “greedy”.</p><p>Lazy is when the engine only matches as many characters required to get to the next step. This should almost always be used.</p><p>Greedy matching is when the engine tries to match as many characters as possible. The problem with this is that it might cause “backtracking”, which happens when the engine goes back in the pattern multiple times to ensure that as many characters as possible where matched. This can cause big performance issues.</p></div><div style="
"><br><span id="loc-6" style="text-decoration: underline"><h3>Combinators</h3></span> Multiple atoms can be combined together to form more complex patterns.</div><div style="
"><p><br><span id="loc-7" style="text-decoration: underline"><h4>Chain</h4></span> When two expressions are next to each other, they will be chained together, which means that both will be evaluated in-order.</p><p>Example: <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">x<span style="color: #d73a49">\d</span></code></span> matches a <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">x</code></span> and then a digit, like for example <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">x9</code></span></p></div><div style="
"><p><br><span id="loc-8" style="text-decoration: underline"><h4>Or</h4></span> Two expressions separated by a <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">|</code></span> cause the RegEx engine to first try to match the left side, and only if it fails, it tries the right side instead.</p><p>Note that “or” has a long left and right scope, which means that <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">ab<span style="color: #d73a49">|</span>cd</code></span> will match either <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">ab</code></span> or <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">cd</code></span></p></div><div style="
"><p><br><span id="loc-9" style="text-decoration: underline"><h4>Or-Not</h4></span> Tries to match the expression on the left to it, but wont error if it doesnt succeed.</p><p>Note that “or-not” has a short left scope, which means that <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">ab<span style="color: #d73a49">?</span></code></span> will always match <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">a</code></span>, and then try to match <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">b</code></span></p></div><div style="
"><p><br><span id="loc-10" style="text-decoration: underline"><h4>Repeated</h4></span> A expression followed by either a <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">*</code></span> for <a href="#greedy">greedy</a> repeat, or a <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">*?</code></span> for <a href="#greedy">lazy</a> repeat.</p><p>This matches as many times as possible, but can also match the pattern zero times.</p><p>Note that this has a short left scope.</p></div><div style="
"><p><br><span id="loc-11" style="text-decoration: underline"><h4>Repeated At Least Once</h4></span> A expression followed by either a <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">+</code></span> for <a href="#greedy">greedy</a> repeat, or a <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">+?</code></span> for <a href="#greedy">lazy</a> repeat.</p><p>This matches as many times as possible, and at least one time.</p><p>Note that this has a short left scope.</p></div><div style="
"><p><br><span id="non-capture-group" style="text-decoration: underline"><h4>(Non-Capture) Group</h4></span> Groups multiple expressions together for scoping.</p><p>Example: <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap"><span style="color: #d73a49">(</span><span style="color: #b60157">?:</span>abc<span style="color: #d73a49">)</span></code></span> will just match <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">abc</code></span></p></div><div style="
"><p><br><span id="loc-12" style="text-decoration: underline"><h4>Capture Group</h4></span> Similar to <a href="#non-capture-group">Non-Capture Groups</a> except that they capture the matched text. This allows the matched text of the inner expression to be extracted later.</p><p>Capture group IDs are enumerated from left to right, starting with 1.</p><p>Example: <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap"><span style="color: #d73a49">(</span>abc<span style="color: #d73a49">)</span>de</code></span> will match <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">abcde</code></span>, and store <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">abc</code></span> in group 1.</p></div><div style="
"><p><br><span id="loc-13" style="text-decoration: underline"><h4>Character Set</h4></span> By surrounding multiple characters in square brackets, the engine will match any of them. Special characters or expressions wont be parsed inside them, which means that this can also be used to escape characters.</p><p>For example: <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap"><span style="color: #d73a49">[</span>abc<span style="color: #d73a49">]</span></code></span> will match either <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">a</code></span>, <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">b</code></span> or <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">c</code></span>.</p><p>and <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap"><span style="color: #d73a49">[</span>ab(?:c)<span style="color: #d73a49">]</span></code></span> will match either <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">a</code></span>, <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">b</code></span>, <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">(</code></span>, <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">?</code></span>, <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">:</code></span>, <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">c</code></span>, or <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap">)</code></span>.</p><p><a href="#char-groups">Character groups</a> and <a href="#escaped-chars">escaped characters</a> still work inside character sets.</p><p>Character sets can also contain ranges. For example: <span style="
border:1pt solid black;
border-radius:2pt;
padding:1.6pt;display:inline-block"><code style="white-space: pre-wrap"><span style="color: #d73a49">[</span><span style="color: #b60157">0</span><span style="color: #b60157">-9</span><span style="color: #b60157">a</span><span style="color: #b60157">-z</span><span style="color: #d73a49">]</span></code></span> will match either any digit, or any lowercase letter.</p></div><div style="
"><p><br><span id="loc-14" style="text-decoration: underline"><h2>Conclusion</h2></span> RegEx is perfect for when you just want to match some patterns, but the syntax can make patterns very hard to read or modify.</p><p>In the next article, we will start to dive into implementing RegEx.</p><p>Stay tuned!</p></div></span></span></td>
<td></td>
</tr>
</table>
<script>
function gotoVariant(variant) {
window.location.href = window.location.href.replace(/\.\w+.html/g, variant);
}
window.addEventListener('beforeprint', (event) => {
gotoVariant('.min.pdf');
});
</script>
<script src="coffee.js" async>
</script>
</body>
</html>