Skip to content
Snippets Groups Projects
Commit 0c003765 authored by Brady James Garvin's avatar Brady James Garvin
Browse files

Initial commit.

parents
Branches
No related tags found
No related merge requests found
Showing
with 889 additions and 0 deletions
# Disable line-ending conversions for this repository.
* -text
# dependencies
/node_modules
# testing
/coverage
# production
/build
# environments
.env.local
.env.development.local
.env.test.local
.env.production.local
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# misc
*~
.DS_Store
[submodule "stylelint-config"]
path = stylelint-config
url = git@git.unl.edu:soft-core/soft-260/stylelint-config.git
[submodule "eslint-config"]
path = eslint-config
url = git@git.unl.edu:soft-core/soft-260/eslint-config.git
{
"folders": [
{
"path": "."
}
],
"settings": {
"files.eol": "LF",
"files.exclude": {
"**/node_modules": true
},
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true
}
}
# dependencies
/node_modules
# testing
/coverage
# production
/build
# environments
.env.local
.env.development.local
.env.test.local
.env.production.local
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# misc
*~
.DS_Store
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="77.9616pt" height="71.0002pt" viewBox="0 0 77.9616 71.0002" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 3.71875 -3.765625 C 3.53125 -4.140625 3.25 -4.40625 2.796875 -4.40625 C 1.640625 -4.40625 0.40625 -2.9375 0.40625 -1.484375 C 0.40625 -0.546875 0.953125 0.109375 1.71875 0.109375 C 1.921875 0.109375 2.421875 0.0625 3.015625 -0.640625 C 3.09375 -0.21875 3.453125 0.109375 3.921875 0.109375 C 4.28125 0.109375 4.5 -0.125 4.671875 -0.4375 C 4.828125 -0.796875 4.96875 -1.40625 4.96875 -1.421875 C 4.96875 -1.53125 4.875 -1.53125 4.84375 -1.53125 C 4.75 -1.53125 4.734375 -1.484375 4.703125 -1.34375 C 4.53125 -0.703125 4.359375 -0.109375 3.953125 -0.109375 C 3.671875 -0.109375 3.65625 -0.375 3.65625 -0.5625 C 3.65625 -0.78125 3.671875 -0.875 3.78125 -1.3125 C 3.890625 -1.71875 3.90625 -1.828125 4 -2.203125 L 4.359375 -3.59375 C 4.421875 -3.875 4.421875 -3.890625 4.421875 -3.9375 C 4.421875 -4.109375 4.3125 -4.203125 4.140625 -4.203125 C 3.890625 -4.203125 3.75 -3.984375 3.71875 -3.765625 Z M 3.078125 -1.1875 C 3.015625 -1 3.015625 -0.984375 2.875 -0.8125 C 2.4375 -0.265625 2.03125 -0.109375 1.75 -0.109375 C 1.25 -0.109375 1.109375 -0.65625 1.109375 -1.046875 C 1.109375 -1.546875 1.421875 -2.765625 1.65625 -3.234375 C 1.96875 -3.8125 2.40625 -4.1875 2.8125 -4.1875 C 3.453125 -4.1875 3.59375 -3.375 3.59375 -3.3125 C 3.59375 -3.25 3.578125 -3.1875 3.5625 -3.140625 Z M 3.078125 -1.1875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 2.375 -6.8125 C 2.375 -6.8125 2.375 -6.921875 2.25 -6.921875 C 2.03125 -6.921875 1.296875 -6.84375 1.03125 -6.8125 C 0.953125 -6.8125 0.84375 -6.796875 0.84375 -6.625 C 0.84375 -6.5 0.9375 -6.5 1.09375 -6.5 C 1.5625 -6.5 1.578125 -6.4375 1.578125 -6.328125 C 1.578125 -6.265625 1.5 -5.921875 1.453125 -5.71875 L 0.625 -2.46875 C 0.515625 -1.96875 0.46875 -1.796875 0.46875 -1.453125 C 0.46875 -0.515625 1 0.109375 1.734375 0.109375 C 2.90625 0.109375 4.140625 -1.375 4.140625 -2.8125 C 4.140625 -3.71875 3.609375 -4.40625 2.8125 -4.40625 C 2.359375 -4.40625 1.9375 -4.109375 1.640625 -3.8125 Z M 1.453125 -3.046875 C 1.5 -3.265625 1.5 -3.28125 1.59375 -3.390625 C 2.078125 -4.03125 2.53125 -4.1875 2.796875 -4.1875 C 3.15625 -4.1875 3.421875 -3.890625 3.421875 -3.25 C 3.421875 -2.65625 3.09375 -1.515625 2.90625 -1.140625 C 2.578125 -0.46875 2.125 -0.109375 1.734375 -0.109375 C 1.390625 -0.109375 1.0625 -0.375 1.0625 -1.109375 C 1.0625 -1.3125 1.0625 -1.5 1.21875 -2.125 Z M 1.453125 -3.046875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 3.953125 -3.78125 C 3.78125 -3.78125 3.65625 -3.78125 3.515625 -3.65625 C 3.34375 -3.5 3.328125 -3.328125 3.328125 -3.265625 C 3.328125 -3.015625 3.515625 -2.90625 3.703125 -2.90625 C 3.984375 -2.90625 4.25 -3.15625 4.25 -3.546875 C 4.25 -4.03125 3.78125 -4.40625 3.078125 -4.40625 C 1.734375 -4.40625 0.40625 -2.984375 0.40625 -1.578125 C 0.40625 -0.671875 0.984375 0.109375 2.03125 0.109375 C 3.453125 0.109375 4.28125 -0.953125 4.28125 -1.0625 C 4.28125 -1.125 4.234375 -1.203125 4.171875 -1.203125 C 4.109375 -1.203125 4.09375 -1.171875 4.03125 -1.09375 C 3.25 -0.109375 2.15625 -0.109375 2.046875 -0.109375 C 1.421875 -0.109375 1.140625 -0.59375 1.140625 -1.203125 C 1.140625 -1.609375 1.34375 -2.578125 1.6875 -3.1875 C 2 -3.765625 2.546875 -4.1875 3.09375 -4.1875 C 3.421875 -4.1875 3.8125 -4.0625 3.953125 -3.78125 Z M 3.953125 -3.78125 "/>
</symbol>
<symbol overflow="visible" id="glyph1-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 2.9375 -6.375 C 2.9375 -6.625 2.9375 -6.640625 2.703125 -6.640625 C 2.078125 -6 1.203125 -6 0.890625 -6 L 0.890625 -5.6875 C 1.09375 -5.6875 1.671875 -5.6875 2.1875 -5.953125 L 2.1875 -0.78125 C 2.1875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.953125 -0.3125 L 0.953125 0 C 1.296875 -0.03125 2.15625 -0.03125 2.5625 -0.03125 C 2.953125 -0.03125 3.828125 -0.03125 4.171875 0 L 4.171875 -0.3125 L 3.859375 -0.3125 C 2.953125 -0.3125 2.9375 -0.421875 2.9375 -0.78125 Z M 2.9375 -6.375 "/>
</symbol>
<symbol overflow="visible" id="glyph1-2">
<path style="stroke:none;" d="M 2.890625 -3.515625 C 3.703125 -3.78125 4.28125 -4.46875 4.28125 -5.265625 C 4.28125 -6.078125 3.40625 -6.640625 2.453125 -6.640625 C 1.453125 -6.640625 0.6875 -6.046875 0.6875 -5.28125 C 0.6875 -4.953125 0.90625 -4.765625 1.203125 -4.765625 C 1.5 -4.765625 1.703125 -4.984375 1.703125 -5.28125 C 1.703125 -5.765625 1.234375 -5.765625 1.09375 -5.765625 C 1.390625 -6.265625 2.046875 -6.390625 2.40625 -6.390625 C 2.828125 -6.390625 3.375 -6.171875 3.375 -5.28125 C 3.375 -5.15625 3.34375 -4.578125 3.09375 -4.140625 C 2.796875 -3.65625 2.453125 -3.625 2.203125 -3.625 C 2.125 -3.609375 1.890625 -3.59375 1.8125 -3.59375 C 1.734375 -3.578125 1.671875 -3.5625 1.671875 -3.46875 C 1.671875 -3.359375 1.734375 -3.359375 1.90625 -3.359375 L 2.34375 -3.359375 C 3.15625 -3.359375 3.53125 -2.6875 3.53125 -1.703125 C 3.53125 -0.34375 2.84375 -0.0625 2.40625 -0.0625 C 1.96875 -0.0625 1.21875 -0.234375 0.875 -0.8125 C 1.21875 -0.765625 1.53125 -0.984375 1.53125 -1.359375 C 1.53125 -1.71875 1.265625 -1.921875 0.984375 -1.921875 C 0.734375 -1.921875 0.421875 -1.78125 0.421875 -1.34375 C 0.421875 -0.4375 1.34375 0.21875 2.4375 0.21875 C 3.65625 0.21875 4.5625 -0.6875 4.5625 -1.703125 C 4.5625 -2.515625 3.921875 -3.296875 2.890625 -3.515625 Z M 2.890625 -3.515625 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 0 0 L 77.960938 0 L 77.960938 71 L 0 71 Z M 0 0 "/>
</clipPath>
</defs>
<g id="surface1">
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="62.32857" y="60.145"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 9.999267 0.0002 C 9.999267 2.652544 8.94458 5.195513 7.06958 7.070513 C 5.19458 8.945513 2.651611 10.0002 -0.0007325 10.0002 C -2.653076 10.0002 -5.196045 8.945513 -7.071045 7.070513 C -8.946045 5.195513 -10.000733 2.652544 -10.000733 0.0002 C -10.000733 -2.652144 -8.946045 -5.195112 -7.071045 -7.070112 C -5.196045 -8.945112 -2.653076 -9.9998 -0.0007325 -9.9998 C 2.651611 -9.9998 5.19458 -8.945112 7.06958 -7.070112 C 8.94458 -5.195112 9.999267 -2.652144 9.999267 0.0002 Z M 9.999267 0.0002 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="36.84307" y="16.4592"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -15.981201 45.0002 C -15.981201 47.652544 -17.035889 50.195513 -18.910889 52.070513 C -20.785889 53.945513 -23.328858 55.0002 -25.981201 55.0002 C -28.633545 55.0002 -31.176514 53.945513 -33.051514 52.070513 C -34.926514 50.195513 -35.981201 47.652544 -35.981201 45.0002 C -35.981201 42.347856 -34.926514 39.804888 -33.051514 37.929888 C -31.176514 36.054888 -28.633545 35.0002 -25.981201 35.0002 C -23.328858 35.0002 -20.785889 36.054888 -18.910889 37.929888 C -17.035889 39.804888 -15.981201 42.347856 -15.981201 45.0002 Z M -15.981201 45.0002 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-3" x="10.84427" y="60.145"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -41.96167 0.0002 C -41.96167 2.652544 -43.016358 5.195513 -44.891358 7.070513 C -46.766358 8.945513 -49.309326 10.0002 -51.96167 10.0002 C -54.614014 10.0002 -57.156983 8.945513 -59.031983 7.070513 C -60.906983 5.195513 -61.96167 2.652544 -61.96167 0.0002 C -61.96167 -2.652144 -60.906983 -5.195112 -59.031983 -7.070112 C -57.156983 -8.945112 -54.614014 -9.9998 -51.96167 -9.9998 C -49.309326 -9.9998 -46.766358 -8.945112 -44.891358 -7.070112 C -43.016358 -5.195112 -41.96167 -2.652144 -41.96167 0.0002 Z M -41.96167 0.0002 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -5.000733 8.660356 L -20.981201 36.340044 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -17.80542 33.90645 L -20.981201 36.340044 L -20.457764 32.3752 Z M -17.80542 33.90645 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="54.07127" y="33.4001"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -10.000733 0.0002 L -41.96167 0.0002 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -38.266358 1.53145 L -41.96167 0.0002 L -38.266358 -1.53105 Z M -38.266358 1.53145 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-2" x="36.49017" y="67.4206"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -30.981201 36.340044 L -46.96167 8.660356 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -46.438233 12.6252 L -46.96167 8.660356 L -43.789795 11.09395 Z M -46.438233 12.6252 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="18.90917" y="33.4001"/>
</g>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -64.46167 -12.4998 L 12.499267 -12.4998 L 12.499267 57.5002 L -64.46167 57.5002 Z M -64.46167 -12.4998 " transform="matrix(1,0,0,-1,64.96167,58.0002)"/>
</g>
</g>
</svg>
# Graph Search vs. Dynamic Programming
* Idea behind *graph search* design:
* Frame the problem as a problem on a graph
* Explore vertices and edges using a worklist algorithm
* Compute a subproblem result for each vertex
* Postprocess to extract a final result
* Idea behind *dynamic programming* design:
* Frame the problem as a problem on a directed acyclic graph (DAG)
* Explore vertices in topological order
* Compute a subproblem result for each vertex
* Postprocess to extract a final result
--------------------------------------------------------------------------------
# Problem 1:
As long as you take no more than 10 kg, you may choose as many as you want of each of these items:
* Item A weighs 3 kg and is worth $10.
* Item B weighs 4 kg and is worth $14.
What choice of items gives you the maximum total value?
Example: The selection ⟅B, B⟆ weights 8 kg and has value $28. But there is a more valuable choice of items.
# Problem 2:
You are placing linebreaks in the following paragraph (where words are represented by 'x's):
> x x x x xxxx xxxx
so that every line is at most seven characters long, including spaces. The penalty for not filling a line is the number of unused spaces on that line squared. What wrapping gives the minimum possible total penalty?
Example: The wrapping
> x x x x
> xxxx
> xxxx
has a total penalty of `(7 - 7)² + (7 - 4)² + (7 - 4)² = 0 + 9 + 9 = 18`. But there is a wrapping with a lower total penalty.
--------------------------------------------------------------------------------
# Dynamic Programming for the Unbounded Knapsack Problem
Problem: Subject to an integer weight limit, what choice of items (allowing repeats) from a collection of items with positive integer weights gives the maximum total value?
## DAG
* Vertices (situations):
*
* Edges (actions):
* … or
*
* Edge weights:
*
* Topological order:
*
* Goal:
*
## Backpointer Class
* Information for the final result:
*
* Information to go back:
*
* Information to compare quality:
*
## Choosing a Backpointer
* Exhaustive search:
* Generate ….
* Check that ….
## Example
* Item Z ….
* Item A weighs 3 kg and is worth $10.
* Item B weighs 4 kg and is worth $14.
Weight (kg) Item Total Value (Back to Weight)
----------- ------ ----------- ----------------
0 [none] $0 ⊥
1 Item … … …
2 Item … … …
3 Item … … …
4 Item … … …
5 Item … … …
6 Item … … …
7 Item … … …
8 Item … … …
9 Item … … …
10 Item … … …
Reversed Path
----
10 → (Item …) → …
--------------------------------------------------------------------------------
# Dynamic Programming for the Line-Wrapping Problem
Problem: Wrap a paragraph to a line length, minimizing the sum of the squares of the lengths of unused space on each line.
## DAG
* Vertices (situations):
*
* Edges (actions):
*
* Edge weights:
*
* Topological order:
*
* Goal:
*
## Backpointer Class
* Information for the final result:
*
* Information to go back:
*
* Information to compare quality:
*
## Choosing a Backpointer
* Exhaustive search:
* Generate ….
* Check that ….
## Example
> x x x x xxxx xxxx
> 0 1 2 3 4 5 6
Index Previous Index Total Penalty
----- -------------- -------------
0 ⊥ 0
1 … …
2 … …
3 … …
4 … …
5 … …
6 … …
Reversed Path
----
6 → …
Source diff could not be displayed: it is too large. Options to address this: view the blob.
{
"name": "@unlsoft/dynamic-programming",
"version": "1.0.0",
"description": "Starter code for the class on dynamic programming.",
"private": true,
"license": "UNLICENSED",
"scripts": {
"lint:css": "stylelint \"**/*.css\" \"**/*.module.css\" \"!coverage/**\"",
"lint:js": "eslint --max-warnings 0 ./src",
"lint": "run-s --continue-on-error lint:**",
"test-once": "react-scripts test --watchAll=false --coverage",
"test": "react-scripts test --watchAll --coverage",
"start": "react-scripts start",
"build": "react-scripts build",
"eject": "react-scripts eject"
},
"homepage": ".",
"dependencies": {
"@reduxjs/toolkit": "^1.6.0",
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^12.0.0",
"@testing-library/user-event": "^13.1.9",
"classnames": "^2.3.1",
"npm-run-all": "^4.1.5",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-redux": "^7.2.4",
"react-router-dom": "^5.2.0",
"react-scripts": "^4.0.3",
"workbox-background-sync": "^5.1.3",
"workbox-broadcast-update": "^5.1.3",
"workbox-cacheable-response": "^5.1.3",
"workbox-core": "^5.1.3",
"workbox-expiration": "^5.1.3",
"workbox-google-analytics": "^5.1.3",
"workbox-navigation-preload": "^5.1.3",
"workbox-precaching": "^5.1.3",
"workbox-range-requests": "^5.1.3",
"workbox-routing": "^5.1.3",
"workbox-strategies": "^5.1.3",
"workbox-streams": "^5.1.3"
},
"devDependencies": {
"@unlsoft/eslint-config": "file:../eslint-config",
"@unlsoft/stylelint-config": "file:../stylelint-config",
"eslint-plugin-jest-dom": "^3.9.0",
"stylelint": "^13.13.1"
},
"stylelint": {
"extends": "@unlsoft/stylelint-config"
},
"eslintConfig": {
"extends": [
"react-app",
"@unlsoft/eslint-config/react"
]
},
"jest": {
"clearMocks": true,
"collectCoverageFrom": [
"src/features/**/*.js"
],
"resetMocks": false,
"restoreMocks": false
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<meta
name="description"
content="Starter code for the class on dynamic programming."
/>
<meta name="theme-color" content="rgba(208 0 0 / 100%)" />
<link rel="icon" href="%PUBLIC_URL%/logo.svg" />
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo.svg" />
<title>Dynamic Programming in Class</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 152 152">
<rect x="0" y="0" width="152" height="152" fill="rgba(0 0 0 / 100%)" />
<path d="M147,1H90V42h10V75.673L53.532,2.393,52.648,1H2V42H12v66H2v41H62V108H52V74.336l46.467,73.271L99.351,149H150V108H140V42h10V1Z" stroke-width="3" stroke="rgba(255 255 255 / 100%)" fill="rgba(208 0 0 / 100%)">
</path>
</svg>
{
"short_name": "Dynamic Programming",
"name": "Dynamic Programming in Class",
"description": "Starter code for the class on dynamic programming.",
"icons": [
{
"src": "logo.svg",
"type": "image/svg+xml",
"sizes": "192x192 512x512",
"purpose": "any maskable"
}
],
"start_url": ".",
"display": "standalone",
"orientation": "portrait",
"theme_color": "rgba(208 0 0 / 100%)",
"background_color": "rgba(255 255 255 / 100%)"
}
import { Route } from 'react-router-dom';
import { Solution as KnapsackSolution } from './features/knapsack/solution.js';
import { Solution as WrappingSolution } from './features/wrapping/solution.js';
export function App() {
return (
<>
<Route exact path={'/'}>
<h1>Knapsack Problem</h1>
<KnapsackSolution />
<h1>Wrapping Problem</h1>
<WrappingSolution />
</Route>
</>
);
}
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="545.6167pt" height="77.9304pt" viewBox="0 0 545.6167 77.9304" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 4.578125 -3.1875 C 4.578125 -3.984375 4.53125 -4.78125 4.1875 -5.515625 C 3.734375 -6.484375 2.90625 -6.640625 2.5 -6.640625 C 1.890625 -6.640625 1.171875 -6.375 0.75 -5.453125 C 0.4375 -4.765625 0.390625 -3.984375 0.390625 -3.1875 C 0.390625 -2.4375 0.421875 -1.546875 0.84375 -0.78125 C 1.265625 0.015625 2 0.21875 2.484375 0.21875 C 3.015625 0.21875 3.78125 0.015625 4.21875 -0.9375 C 4.53125 -1.625 4.578125 -2.40625 4.578125 -3.1875 Z M 2.484375 0 C 2.09375 0 1.5 -0.25 1.328125 -1.203125 C 1.21875 -1.796875 1.21875 -2.71875 1.21875 -3.3125 C 1.21875 -3.953125 1.21875 -4.609375 1.296875 -5.140625 C 1.484375 -6.328125 2.234375 -6.421875 2.484375 -6.421875 C 2.8125 -6.421875 3.46875 -6.234375 3.65625 -5.25 C 3.765625 -4.6875 3.765625 -3.9375 3.765625 -3.3125 C 3.765625 -2.5625 3.765625 -1.890625 3.65625 -1.25 C 3.5 -0.296875 2.9375 0 2.484375 0 Z M 2.484375 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 2.9375 -6.375 C 2.9375 -6.625 2.9375 -6.640625 2.703125 -6.640625 C 2.078125 -6 1.203125 -6 0.890625 -6 L 0.890625 -5.6875 C 1.09375 -5.6875 1.671875 -5.6875 2.1875 -5.953125 L 2.1875 -0.78125 C 2.1875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.953125 -0.3125 L 0.953125 0 C 1.296875 -0.03125 2.15625 -0.03125 2.5625 -0.03125 C 2.953125 -0.03125 3.828125 -0.03125 4.171875 0 L 4.171875 -0.3125 L 3.859375 -0.3125 C 2.953125 -0.3125 2.9375 -0.421875 2.9375 -0.78125 Z M 2.9375 -6.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 1.265625 -0.765625 L 2.328125 -1.796875 C 3.875 -3.171875 4.46875 -3.703125 4.46875 -4.703125 C 4.46875 -5.84375 3.578125 -6.640625 2.359375 -6.640625 C 1.234375 -6.640625 0.5 -5.71875 0.5 -4.828125 C 0.5 -4.28125 1 -4.28125 1.03125 -4.28125 C 1.203125 -4.28125 1.546875 -4.390625 1.546875 -4.8125 C 1.546875 -5.0625 1.359375 -5.328125 1.015625 -5.328125 C 0.9375 -5.328125 0.921875 -5.328125 0.890625 -5.3125 C 1.109375 -5.96875 1.65625 -6.328125 2.234375 -6.328125 C 3.140625 -6.328125 3.5625 -5.515625 3.5625 -4.703125 C 3.5625 -3.90625 3.078125 -3.125 2.515625 -2.5 L 0.609375 -0.375 C 0.5 -0.265625 0.5 -0.234375 0.5 0 L 4.203125 0 L 4.46875 -1.734375 L 4.234375 -1.734375 C 4.171875 -1.4375 4.109375 -1 4 -0.84375 C 3.9375 -0.765625 3.28125 -0.765625 3.0625 -0.765625 Z M 1.265625 -0.765625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 2.890625 -3.515625 C 3.703125 -3.78125 4.28125 -4.46875 4.28125 -5.265625 C 4.28125 -6.078125 3.40625 -6.640625 2.453125 -6.640625 C 1.453125 -6.640625 0.6875 -6.046875 0.6875 -5.28125 C 0.6875 -4.953125 0.90625 -4.765625 1.203125 -4.765625 C 1.5 -4.765625 1.703125 -4.984375 1.703125 -5.28125 C 1.703125 -5.765625 1.234375 -5.765625 1.09375 -5.765625 C 1.390625 -6.265625 2.046875 -6.390625 2.40625 -6.390625 C 2.828125 -6.390625 3.375 -6.171875 3.375 -5.28125 C 3.375 -5.15625 3.34375 -4.578125 3.09375 -4.140625 C 2.796875 -3.65625 2.453125 -3.625 2.203125 -3.625 C 2.125 -3.609375 1.890625 -3.59375 1.8125 -3.59375 C 1.734375 -3.578125 1.671875 -3.5625 1.671875 -3.46875 C 1.671875 -3.359375 1.734375 -3.359375 1.90625 -3.359375 L 2.34375 -3.359375 C 3.15625 -3.359375 3.53125 -2.6875 3.53125 -1.703125 C 3.53125 -0.34375 2.84375 -0.0625 2.40625 -0.0625 C 1.96875 -0.0625 1.21875 -0.234375 0.875 -0.8125 C 1.21875 -0.765625 1.53125 -0.984375 1.53125 -1.359375 C 1.53125 -1.71875 1.265625 -1.921875 0.984375 -1.921875 C 0.734375 -1.921875 0.421875 -1.78125 0.421875 -1.34375 C 0.421875 -0.4375 1.34375 0.21875 2.4375 0.21875 C 3.65625 0.21875 4.5625 -0.6875 4.5625 -1.703125 C 4.5625 -2.515625 3.921875 -3.296875 2.890625 -3.515625 Z M 2.890625 -3.515625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 2.9375 -1.640625 L 2.9375 -0.78125 C 2.9375 -0.421875 2.90625 -0.3125 2.171875 -0.3125 L 1.96875 -0.3125 L 1.96875 0 C 2.375 -0.03125 2.890625 -0.03125 3.3125 -0.03125 C 3.734375 -0.03125 4.25 -0.03125 4.671875 0 L 4.671875 -0.3125 L 4.453125 -0.3125 C 3.71875 -0.3125 3.703125 -0.421875 3.703125 -0.78125 L 3.703125 -1.640625 L 4.6875 -1.640625 L 4.6875 -1.953125 L 3.703125 -1.953125 L 3.703125 -6.484375 C 3.703125 -6.6875 3.703125 -6.75 3.53125 -6.75 C 3.453125 -6.75 3.421875 -6.75 3.34375 -6.625 L 0.28125 -1.953125 L 0.28125 -1.640625 Z M 2.984375 -1.953125 L 0.5625 -1.953125 L 2.984375 -5.671875 Z M 2.984375 -1.953125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 4.46875 -2 C 4.46875 -3.1875 3.65625 -4.1875 2.578125 -4.1875 C 2.109375 -4.1875 1.671875 -4.03125 1.3125 -3.671875 L 1.3125 -5.625 C 1.515625 -5.5625 1.84375 -5.5 2.15625 -5.5 C 3.390625 -5.5 4.09375 -6.40625 4.09375 -6.53125 C 4.09375 -6.59375 4.0625 -6.640625 3.984375 -6.640625 C 3.984375 -6.640625 3.953125 -6.640625 3.90625 -6.609375 C 3.703125 -6.515625 3.21875 -6.3125 2.546875 -6.3125 C 2.15625 -6.3125 1.6875 -6.390625 1.21875 -6.59375 C 1.140625 -6.625 1.125 -6.625 1.109375 -6.625 C 1 -6.625 1 -6.546875 1 -6.390625 L 1 -3.4375 C 1 -3.265625 1 -3.1875 1.140625 -3.1875 C 1.21875 -3.1875 1.234375 -3.203125 1.28125 -3.265625 C 1.390625 -3.421875 1.75 -3.96875 2.5625 -3.96875 C 3.078125 -3.96875 3.328125 -3.515625 3.40625 -3.328125 C 3.5625 -2.953125 3.59375 -2.578125 3.59375 -2.078125 C 3.59375 -1.71875 3.59375 -1.125 3.34375 -0.703125 C 3.109375 -0.3125 2.734375 -0.0625 2.28125 -0.0625 C 1.5625 -0.0625 0.984375 -0.59375 0.8125 -1.171875 C 0.84375 -1.171875 0.875 -1.15625 0.984375 -1.15625 C 1.3125 -1.15625 1.484375 -1.40625 1.484375 -1.640625 C 1.484375 -1.890625 1.3125 -2.140625 0.984375 -2.140625 C 0.84375 -2.140625 0.5 -2.0625 0.5 -1.609375 C 0.5 -0.75 1.1875 0.21875 2.296875 0.21875 C 3.453125 0.21875 4.46875 -0.734375 4.46875 -2 Z M 4.46875 -2 "/>
</symbol>
<symbol overflow="visible" id="glyph0-7">
<path style="stroke:none;" d="M 1.3125 -3.265625 L 1.3125 -3.515625 C 1.3125 -6.03125 2.546875 -6.390625 3.0625 -6.390625 C 3.296875 -6.390625 3.71875 -6.328125 3.9375 -5.984375 C 3.78125 -5.984375 3.390625 -5.984375 3.390625 -5.546875 C 3.390625 -5.234375 3.625 -5.078125 3.84375 -5.078125 C 4 -5.078125 4.3125 -5.171875 4.3125 -5.5625 C 4.3125 -6.15625 3.875 -6.640625 3.046875 -6.640625 C 1.765625 -6.640625 0.421875 -5.359375 0.421875 -3.15625 C 0.421875 -0.484375 1.578125 0.21875 2.5 0.21875 C 3.609375 0.21875 4.5625 -0.71875 4.5625 -2.03125 C 4.5625 -3.296875 3.671875 -4.25 2.5625 -4.25 C 1.890625 -4.25 1.515625 -3.75 1.3125 -3.265625 Z M 2.5 -0.0625 C 1.875 -0.0625 1.578125 -0.65625 1.515625 -0.8125 C 1.328125 -1.28125 1.328125 -2.078125 1.328125 -2.25 C 1.328125 -3.03125 1.65625 -4.03125 2.546875 -4.03125 C 2.71875 -4.03125 3.171875 -4.03125 3.484375 -3.40625 C 3.65625 -3.046875 3.65625 -2.53125 3.65625 -2.046875 C 3.65625 -1.5625 3.65625 -1.0625 3.484375 -0.703125 C 3.1875 -0.109375 2.734375 -0.0625 2.5 -0.0625 Z M 2.5 -0.0625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-8">
<path style="stroke:none;" d="M 4.75 -6.078125 C 4.828125 -6.1875 4.828125 -6.203125 4.828125 -6.421875 L 2.40625 -6.421875 C 1.203125 -6.421875 1.171875 -6.546875 1.140625 -6.734375 L 0.890625 -6.734375 L 0.5625 -4.6875 L 0.8125 -4.6875 C 0.84375 -4.84375 0.921875 -5.46875 1.0625 -5.59375 C 1.125 -5.65625 1.90625 -5.65625 2.03125 -5.65625 L 4.09375 -5.65625 C 3.984375 -5.5 3.203125 -4.40625 2.984375 -4.078125 C 2.078125 -2.734375 1.75 -1.34375 1.75 -0.328125 C 1.75 -0.234375 1.75 0.21875 2.21875 0.21875 C 2.671875 0.21875 2.671875 -0.234375 2.671875 -0.328125 L 2.671875 -0.84375 C 2.671875 -1.390625 2.703125 -1.9375 2.78125 -2.46875 C 2.828125 -2.703125 2.953125 -3.5625 3.40625 -4.171875 Z M 4.75 -6.078125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-9">
<path style="stroke:none;" d="M 1.625 -4.5625 C 1.171875 -4.859375 1.125 -5.1875 1.125 -5.359375 C 1.125 -5.96875 1.78125 -6.390625 2.484375 -6.390625 C 3.203125 -6.390625 3.84375 -5.875 3.84375 -5.15625 C 3.84375 -4.578125 3.453125 -4.109375 2.859375 -3.765625 Z M 3.078125 -3.609375 C 3.796875 -3.984375 4.28125 -4.5 4.28125 -5.15625 C 4.28125 -6.078125 3.40625 -6.640625 2.5 -6.640625 C 1.5 -6.640625 0.6875 -5.90625 0.6875 -4.96875 C 0.6875 -4.796875 0.703125 -4.34375 1.125 -3.875 C 1.234375 -3.765625 1.609375 -3.515625 1.859375 -3.34375 C 1.28125 -3.046875 0.421875 -2.5 0.421875 -1.5 C 0.421875 -0.453125 1.4375 0.21875 2.484375 0.21875 C 3.609375 0.21875 4.5625 -0.609375 4.5625 -1.671875 C 4.5625 -2.03125 4.453125 -2.484375 4.0625 -2.90625 C 3.875 -3.109375 3.71875 -3.203125 3.078125 -3.609375 Z M 2.078125 -3.1875 L 3.3125 -2.40625 C 3.59375 -2.21875 4.0625 -1.921875 4.0625 -1.3125 C 4.0625 -0.578125 3.3125 -0.0625 2.5 -0.0625 C 1.640625 -0.0625 0.921875 -0.671875 0.921875 -1.5 C 0.921875 -2.078125 1.234375 -2.71875 2.078125 -3.1875 Z M 2.078125 -3.1875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-10">
<path style="stroke:none;" d="M 3.65625 -3.171875 L 3.65625 -2.84375 C 3.65625 -0.515625 2.625 -0.0625 2.046875 -0.0625 C 1.875 -0.0625 1.328125 -0.078125 1.0625 -0.421875 C 1.5 -0.421875 1.578125 -0.703125 1.578125 -0.875 C 1.578125 -1.1875 1.34375 -1.328125 1.125 -1.328125 C 0.96875 -1.328125 0.671875 -1.25 0.671875 -0.859375 C 0.671875 -0.1875 1.203125 0.21875 2.046875 0.21875 C 3.34375 0.21875 4.5625 -1.140625 4.5625 -3.28125 C 4.5625 -5.96875 3.40625 -6.640625 2.515625 -6.640625 C 1.96875 -6.640625 1.484375 -6.453125 1.0625 -6.015625 C 0.640625 -5.5625 0.421875 -5.140625 0.421875 -4.390625 C 0.421875 -3.15625 1.296875 -2.171875 2.40625 -2.171875 C 3.015625 -2.171875 3.421875 -2.59375 3.65625 -3.171875 Z M 2.421875 -2.40625 C 2.265625 -2.40625 1.796875 -2.40625 1.5 -3.03125 C 1.3125 -3.40625 1.3125 -3.890625 1.3125 -4.390625 C 1.3125 -4.921875 1.3125 -5.390625 1.53125 -5.765625 C 1.796875 -6.265625 2.171875 -6.390625 2.515625 -6.390625 C 2.984375 -6.390625 3.3125 -6.046875 3.484375 -5.609375 C 3.59375 -5.28125 3.640625 -4.65625 3.640625 -4.203125 C 3.640625 -3.375 3.296875 -2.40625 2.421875 -2.40625 Z M 2.421875 -2.40625 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 0 0 L 545.617188 0 L 545.617188 77.929688 L 0 77.929688 Z M 0 0 "/>
</clipPath>
</defs>
<g id="surface1">
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="10.5094" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10 0.000045 C 10 2.652389 8.945312 5.195358 7.070312 7.070358 C 5.195312 8.945358 2.652344 10.000045 0 10.000045 C -2.652344 10.000045 -5.195312 8.945358 -7.070312 7.070358 C -8.945312 5.195358 -10 2.652389 -10 0.000045 C -10 -2.652299 -8.945312 -5.195267 -7.070312 -7.070267 C -5.195312 -8.945267 -2.652344 -9.999955 0 -9.999955 C 2.652344 -9.999955 5.195312 -8.945267 7.070312 -7.070267 C 8.945312 -5.195267 10 -2.652299 10 0.000045 Z M 10 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="62.471" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 61.960938 0.000045 C 61.960938 2.652389 60.90625 5.195358 59.03125 7.070358 C 57.15625 8.945358 54.613281 10.000045 51.960938 10.000045 C 49.308594 10.000045 46.765625 8.945358 44.890625 7.070358 C 43.015625 5.195358 41.960938 2.652389 41.960938 0.000045 C 41.960938 -2.652299 43.015625 -5.195267 44.890625 -7.070267 C 46.765625 -8.945267 49.308594 -9.999955 51.960938 -9.999955 C 54.613281 -9.999955 57.15625 -8.945267 59.03125 -7.070267 C 60.90625 -5.195267 61.960938 -2.652299 61.960938 0.000045 Z M 61.960938 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-3" x="114.4327" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 113.921875 0.000045 C 113.921875 2.652389 112.871094 5.195358 110.996094 7.070358 C 109.117188 8.945358 106.574219 10.000045 103.921875 10.000045 C 101.269531 10.000045 98.726562 8.945358 96.851562 7.070358 C 94.976562 5.195358 93.921875 2.652389 93.921875 0.000045 C 93.921875 -2.652299 94.976562 -5.195267 96.851562 -7.070267 C 98.726562 -8.945267 101.269531 -9.999955 103.921875 -9.999955 C 106.574219 -9.999955 109.117188 -8.945267 110.996094 -7.070267 C 112.871094 -5.195267 113.921875 -2.652299 113.921875 0.000045 Z M 113.921875 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="166.3944" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 165.886719 0.000045 C 165.886719 2.652389 164.832031 5.195358 162.957031 7.070358 C 161.082031 8.945358 158.539062 10.000045 155.886719 10.000045 C 153.234375 10.000045 150.6875 8.945358 148.8125 7.070358 C 146.9375 5.195358 145.886719 2.652389 145.886719 0.000045 C 145.886719 -2.652299 146.9375 -5.195267 148.8125 -7.070267 C 150.6875 -8.945267 153.234375 -9.999955 155.886719 -9.999955 C 158.539062 -9.999955 161.082031 -8.945267 162.957031 -7.070267 C 164.832031 -5.195267 165.886719 -2.652299 165.886719 0.000045 Z M 165.886719 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="218.356" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 217.847656 0.000045 C 217.847656 2.652389 216.792969 5.195358 214.917969 7.070358 C 213.042969 8.945358 210.5 10.000045 207.847656 10.000045 C 205.195312 10.000045 202.652344 8.945358 200.777344 7.070358 C 198.902344 5.195358 197.847656 2.652389 197.847656 0.000045 C 197.847656 -2.652299 198.902344 -5.195267 200.777344 -7.070267 C 202.652344 -8.945267 205.195312 -9.999955 207.847656 -9.999955 C 210.5 -9.999955 213.042969 -8.945267 214.917969 -7.070267 C 216.792969 -5.195267 217.847656 -2.652299 217.847656 0.000045 Z M 217.847656 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-6" x="270.3177" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 269.808594 0.000045 C 269.808594 2.652389 268.753906 5.195358 266.878906 7.070358 C 265.003906 8.945358 262.460938 10.000045 259.808594 10.000045 C 257.15625 10.000045 254.613281 8.945358 252.738281 7.070358 C 250.863281 5.195358 249.808594 2.652389 249.808594 0.000045 C 249.808594 -2.652299 250.863281 -5.195267 252.738281 -7.070267 C 254.613281 -8.945267 257.15625 -9.999955 259.808594 -9.999955 C 262.460938 -9.999955 265.003906 -8.945267 266.878906 -7.070267 C 268.753906 -5.195267 269.808594 -2.652299 269.808594 0.000045 Z M 269.808594 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-7" x="322.2794" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 321.769531 0.000045 C 321.769531 2.652389 320.714844 5.195358 318.839844 7.070358 C 316.964844 8.945358 314.421875 10.000045 311.769531 10.000045 C 309.117188 10.000045 306.574219 8.945358 304.699219 7.070358 C 302.824219 5.195358 301.769531 2.652389 301.769531 0.000045 C 301.769531 -2.652299 302.824219 -5.195267 304.699219 -7.070267 C 306.574219 -8.945267 309.117188 -9.999955 311.769531 -9.999955 C 314.421875 -9.999955 316.964844 -8.945267 318.839844 -7.070267 C 320.714844 -5.195267 321.769531 -2.652299 321.769531 0.000045 Z M 321.769531 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-8" x="374.241" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 373.730469 0.000045 C 373.730469 2.652389 372.679688 5.195358 370.800781 7.070358 C 368.925781 8.945358 366.382812 10.000045 363.730469 10.000045 C 361.078125 10.000045 358.535156 8.945358 356.660156 7.070358 C 354.785156 5.195358 353.730469 2.652389 353.730469 0.000045 C 353.730469 -2.652299 354.785156 -5.195267 356.660156 -7.070267 C 358.535156 -8.945267 361.078125 -9.999955 363.730469 -9.999955 C 366.382812 -9.999955 368.925781 -8.945267 370.800781 -7.070267 C 372.679688 -5.195267 373.730469 -2.652299 373.730469 0.000045 Z M 373.730469 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-9" x="426.2027" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 425.695312 0.000045 C 425.695312 2.652389 424.640625 5.195358 422.765625 7.070358 C 420.890625 8.945358 418.34375 10.000045 415.695312 10.000045 C 413.042969 10.000045 410.496094 8.945358 408.621094 7.070358 C 406.746094 5.195358 405.695312 2.652389 405.695312 0.000045 C 405.695312 -2.652299 406.746094 -5.195267 408.621094 -7.070267 C 410.496094 -8.945267 413.042969 -9.999955 415.695312 -9.999955 C 418.34375 -9.999955 420.890625 -8.945267 422.765625 -7.070267 C 424.640625 -5.195267 425.695312 -2.652299 425.695312 0.000045 Z M 425.695312 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-10" x="478.1644" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 477.65625 0.000045 C 477.65625 2.652389 476.601562 5.195358 474.726562 7.070358 C 472.851562 8.945358 470.308594 10.000045 467.65625 10.000045 C 465.003906 10.000045 462.460938 8.945358 460.585938 7.070358 C 458.707031 5.195358 457.65625 2.652389 457.65625 0.000045 C 457.65625 -2.652299 458.707031 -5.195267 460.585938 -7.070267 C 462.460938 -8.945267 465.003906 -9.999955 467.65625 -9.999955 C 470.308594 -9.999955 472.851562 -8.945267 474.726562 -7.070267 C 476.601562 -5.195267 477.65625 -2.652299 477.65625 0.000045 Z M 477.65625 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="527.6353" y="38.69462"/>
<use xlink:href="#glyph0-1" x="532.6166" y="38.69462"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 529.617188 0.000045 C 529.617188 2.652389 528.5625 5.195358 526.6875 7.070358 C 524.8125 8.945358 522.269531 10.000045 519.617188 10.000045 C 516.964844 10.000045 514.421875 8.945358 512.546875 7.070358 C 510.671875 5.195358 509.617188 2.652389 509.617188 0.000045 C 509.617188 -2.652299 510.671875 -5.195267 512.546875 -7.070267 C 514.421875 -8.945267 516.964844 -9.999955 519.617188 -9.999955 C 522.269531 -9.999955 524.8125 -8.945267 526.6875 -7.070267 C 528.5625 -5.195267 529.617188 -2.652299 529.617188 0.000045 Z M 529.617188 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10 0.000045 L 41.960938 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 38.265625 -1.531205 L 41.960938 0.000045 L 38.265625 1.531295 Z M 38.265625 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="36.4902" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 61.960938 0.000045 L 93.921875 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 90.226562 -1.531205 L 93.921875 0.000045 L 90.226562 1.531295 Z M 90.226562 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="88.4519" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 113.921875 0.000045 L 145.886719 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 142.1875 -1.531205 L 145.886719 0.000045 L 142.1875 1.531295 Z M 142.1875 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="140.4135" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 165.886719 0.000045 L 197.847656 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 194.152344 -1.531205 L 197.847656 0.000045 L 194.152344 1.531295 Z M 194.152344 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="192.3752" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 217.847656 0.000045 L 249.808594 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 246.113281 -1.531205 L 249.808594 0.000045 L 246.113281 1.531295 Z M 246.113281 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="244.3369" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 269.808594 0.000045 L 301.769531 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 298.074219 -1.531205 L 301.769531 0.000045 L 298.074219 1.531295 Z M 298.074219 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="296.2985" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 321.769531 0.000045 L 353.730469 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 350.035156 -1.531205 L 353.730469 0.000045 L 350.035156 1.531295 Z M 350.035156 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="348.2602" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 373.730469 0.000045 L 405.695312 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 401.996094 -1.531205 L 405.695312 0.000045 L 401.996094 1.531295 Z M 401.996094 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="400.2219" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 425.695312 0.000045 L 457.65625 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 453.960938 -1.531205 L 457.65625 0.000045 L 453.960938 1.531295 Z M 453.960938 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="452.1836" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 477.65625 0.000045 L 509.617188 0.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 505.921875 -1.531205 L 509.617188 0.000045 L 505.921875 1.531295 Z M 505.921875 -1.531205 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="504.1452" y="44.90482"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 5.000045 C 51.53125 29.753951 104.351562 29.753951 147.226562 5.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 143.25 5.464889 C 144.574219 5.32817 145.898438 5.175826 147.226562 5.000045 C 146.410156 6.058639 145.585938 7.105514 144.742188 8.136764 Z M 143.25 5.464889 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="85.9611" y="8.92042"/>
<use xlink:href="#glyph0-1" x="90.9424" y="8.92042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.621094 5.000045 C 103.492188 29.753951 156.3125 29.753951 199.1875 5.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 195.210938 5.464889 C 196.535156 5.32817 197.863281 5.175826 199.1875 5.000045 C 198.371094 6.058639 197.546875 7.105514 196.707031 8.136764 Z M 195.210938 5.464889 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="137.9228" y="8.92042"/>
<use xlink:href="#glyph0-1" x="142.9041" y="8.92042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 112.582031 5.000045 C 155.457031 29.753951 208.277344 29.753951 251.148438 5.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 247.175781 5.464889 C 248.5 5.32817 249.824219 5.175826 251.148438 5.000045 C 250.335938 6.058639 249.507812 7.105514 248.667969 8.136764 Z M 247.175781 5.464889 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="189.8845" y="8.92042"/>
<use xlink:href="#glyph0-1" x="194.8658" y="8.92042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 164.546875 5.000045 C 207.417969 29.753951 260.238281 29.753951 303.109375 5.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 299.136719 5.464889 C 300.460938 5.32817 301.785156 5.175826 303.109375 5.000045 C 302.296875 6.058639 301.46875 7.105514 300.628906 8.136764 Z M 299.136719 5.464889 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="241.8462" y="8.92042"/>
<use xlink:href="#glyph0-1" x="246.8275" y="8.92042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 216.507812 5.000045 C 259.378906 29.753951 312.199219 29.753951 355.070312 5.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 351.097656 5.464889 C 352.421875 5.32817 353.746094 5.175826 355.070312 5.000045 C 354.257812 6.058639 353.429688 7.105514 352.589844 8.136764 Z M 351.097656 5.464889 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="293.8078" y="8.92042"/>
<use xlink:href="#glyph0-1" x="298.7891" y="8.92042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 268.46875 5.000045 C 311.339844 29.753951 364.160156 29.753951 407.03125 5.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 403.058594 5.464889 C 404.382812 5.32817 405.707031 5.175826 407.03125 5.000045 C 406.21875 6.058639 405.390625 7.105514 404.550781 8.136764 Z M 403.058594 5.464889 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="345.7695" y="8.92042"/>
<use xlink:href="#glyph0-1" x="350.7508" y="8.92042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 320.429688 5.000045 C 363.300781 29.753951 416.121094 29.753951 458.996094 5.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 455.019531 5.464889 C 456.34375 5.32817 457.667969 5.175826 458.996094 5.000045 C 458.179688 6.058639 457.355469 7.105514 456.515625 8.136764 Z M 455.019531 5.464889 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="397.7312" y="8.92042"/>
<use xlink:href="#glyph0-1" x="402.7125" y="8.92042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 372.390625 5.000045 C 415.265625 29.753951 468.085938 29.753951 510.957031 5.000045 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 506.984375 5.464889 C 508.308594 5.32817 509.632812 5.175826 510.957031 5.000045 C 510.144531 6.058639 509.316406 7.105514 508.476562 8.136764 Z M 506.984375 5.464889 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="449.6928" y="8.92042"/>
<use xlink:href="#glyph0-1" x="454.6741" y="8.92042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 -4.999955 C 67.609375 -39.035111 140.238281 -39.035111 199.1875 -4.999955 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 196.71875 -8.148392 C 197.550781 -7.10933 198.375 -6.058549 199.1875 -4.999955 C 197.863281 -5.175736 196.539062 -5.335892 195.214844 -5.480424 Z M 196.71875 -8.148392 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="111.942" y="75.43042"/>
<use xlink:href="#glyph0-5" x="116.9233" y="75.43042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.621094 -4.999955 C 119.570312 -39.035111 192.199219 -39.035111 251.148438 -4.999955 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 248.679688 -8.148392 C 249.511719 -7.10933 250.335938 -6.058549 251.148438 -4.999955 C 249.824219 -5.175736 248.5 -5.335892 247.175781 -5.480424 Z M 248.679688 -8.148392 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="163.9037" y="75.43042"/>
<use xlink:href="#glyph0-5" x="168.885" y="75.43042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 112.582031 -4.999955 C 171.53125 -39.035111 244.160156 -39.035111 303.109375 -4.999955 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 300.640625 -8.148392 C 301.472656 -7.10933 302.296875 -6.058549 303.109375 -4.999955 C 301.785156 -5.175736 300.460938 -5.335892 299.136719 -5.480424 Z M 300.640625 -8.148392 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="215.8653" y="75.43042"/>
<use xlink:href="#glyph0-5" x="220.8466" y="75.43042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 164.546875 -4.999955 C 223.496094 -39.035111 296.121094 -39.035111 355.070312 -4.999955 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 352.601562 -8.148392 C 353.433594 -7.10933 354.257812 -6.058549 355.070312 -4.999955 C 353.746094 -5.175736 352.421875 -5.335892 351.097656 -5.480424 Z M 352.601562 -8.148392 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="267.827" y="75.43042"/>
<use xlink:href="#glyph0-5" x="272.8083" y="75.43042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 216.507812 -4.999955 C 275.457031 -39.035111 348.085938 -39.035111 407.03125 -4.999955 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 404.5625 -8.148392 C 405.398438 -7.10933 406.21875 -6.058549 407.03125 -4.999955 C 405.707031 -5.175736 404.382812 -5.335892 403.0625 -5.480424 Z M 404.5625 -8.148392 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="319.7887" y="75.43042"/>
<use xlink:href="#glyph0-5" x="324.77" y="75.43042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 268.46875 -4.999955 C 327.417969 -39.035111 400.046875 -39.035111 458.996094 -4.999955 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 456.527344 -8.148392 C 457.359375 -7.10933 458.183594 -6.058549 458.996094 -4.999955 C 457.671875 -5.175736 456.347656 -5.335892 455.023438 -5.480424 Z M 456.527344 -8.148392 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="371.7503" y="75.43042"/>
<use xlink:href="#glyph0-5" x="376.7316" y="75.43042"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 320.429688 -4.999955 C 379.378906 -39.035111 452.007812 -39.035111 510.957031 -4.999955 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 508.488281 -8.148392 C 509.320312 -7.10933 510.144531 -6.058549 510.957031 -4.999955 C 509.632812 -5.175736 508.308594 -5.335892 506.984375 -5.480424 Z M 508.488281 -8.148392 " transform="matrix(1,0,0,-1,13,35.48442)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="423.712" y="75.43042"/>
<use xlink:href="#glyph0-5" x="428.6933" y="75.43042"/>
</g>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -12.5 -41.945267 L 532.117188 -41.945267 L 532.117188 34.98442 L -12.5 34.98442 Z M -12.5 -41.945267 " transform="matrix(1,0,0,-1,13,35.48442)"/>
</g>
</g>
</svg>
export class Item {
constructor(weight, value) {
console.assert(weight > 0, `Tried to create an item with a nonpositive weight ${weight}.`);
console.assert(Number.isInteger(weight), `Tried to create an item with a noninteger weight ${weight}.`);
this.weight = weight;
this.value = value;
}
}
/* eslint-disable no-magic-numbers */
import { Item } from './items.js';
import { chooseItems } from './solver.js';
import knapsackImage from './images/knapsack.svg';
import styles from './solution.module.css';
function formatSolution(solution) {
return solution.map((item) => `(weight: ${item.weight}, value: ${item.value})`).join(', ');
}
const ITEMS = [
new Item(3, 10),
new Item(4, 14),
];
const WEIGHT_LIMIT = 10;
export function Solution() {
const solution = chooseItems(ITEMS, WEIGHT_LIMIT);
return (
<div>
<figure className={styles.diagram} >
<img src={knapsackImage} alt="A weighted directed graph corresponding to the knapsack problem." />
</figure>
<label>
Chosen Knapsack Items: <output>{formatSolution(solution)}</output>
</label>
</div>
);
}
.diagram {
display: block;
box-sizing: border-box;
margin: auto;
width: 100%;
overflow-x: scroll;
}
import { Item } from './items.js';
class Backpointer {
constructor() {
// TODO: stub
}
}
function chooseBackpointer(items, backpointers) {
const currentWeight = backpointers.length;
// TODO: stub
}
export function chooseItems(items, weightLimit) {
console.assert(Number.isInteger(weightLimit), `Tried to choose items with a noninteger weight limit ${weightLimit}.`);
return []; // TODO: stub
}
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="337.77pt" height="97.2967pt" viewBox="0 0 337.77 97.2967" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 4.578125 -3.1875 C 4.578125 -3.984375 4.53125 -4.78125 4.1875 -5.515625 C 3.734375 -6.484375 2.90625 -6.640625 2.5 -6.640625 C 1.890625 -6.640625 1.171875 -6.375 0.75 -5.453125 C 0.4375 -4.765625 0.390625 -3.984375 0.390625 -3.1875 C 0.390625 -2.4375 0.421875 -1.546875 0.84375 -0.78125 C 1.265625 0.015625 2 0.21875 2.484375 0.21875 C 3.015625 0.21875 3.78125 0.015625 4.21875 -0.9375 C 4.53125 -1.625 4.578125 -2.40625 4.578125 -3.1875 Z M 2.484375 0 C 2.09375 0 1.5 -0.25 1.328125 -1.203125 C 1.21875 -1.796875 1.21875 -2.71875 1.21875 -3.3125 C 1.21875 -3.953125 1.21875 -4.609375 1.296875 -5.140625 C 1.484375 -6.328125 2.234375 -6.421875 2.484375 -6.421875 C 2.8125 -6.421875 3.46875 -6.234375 3.65625 -5.25 C 3.765625 -4.6875 3.765625 -3.9375 3.765625 -3.3125 C 3.765625 -2.5625 3.765625 -1.890625 3.65625 -1.25 C 3.5 -0.296875 2.9375 0 2.484375 0 Z M 2.484375 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 2.9375 -6.375 C 2.9375 -6.625 2.9375 -6.640625 2.703125 -6.640625 C 2.078125 -6 1.203125 -6 0.890625 -6 L 0.890625 -5.6875 C 1.09375 -5.6875 1.671875 -5.6875 2.1875 -5.953125 L 2.1875 -0.78125 C 2.1875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.953125 -0.3125 L 0.953125 0 C 1.296875 -0.03125 2.15625 -0.03125 2.5625 -0.03125 C 2.953125 -0.03125 3.828125 -0.03125 4.171875 0 L 4.171875 -0.3125 L 3.859375 -0.3125 C 2.953125 -0.3125 2.9375 -0.421875 2.9375 -0.78125 Z M 2.9375 -6.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 1.265625 -0.765625 L 2.328125 -1.796875 C 3.875 -3.171875 4.46875 -3.703125 4.46875 -4.703125 C 4.46875 -5.84375 3.578125 -6.640625 2.359375 -6.640625 C 1.234375 -6.640625 0.5 -5.71875 0.5 -4.828125 C 0.5 -4.28125 1 -4.28125 1.03125 -4.28125 C 1.203125 -4.28125 1.546875 -4.390625 1.546875 -4.8125 C 1.546875 -5.0625 1.359375 -5.328125 1.015625 -5.328125 C 0.9375 -5.328125 0.921875 -5.328125 0.890625 -5.3125 C 1.109375 -5.96875 1.65625 -6.328125 2.234375 -6.328125 C 3.140625 -6.328125 3.5625 -5.515625 3.5625 -4.703125 C 3.5625 -3.90625 3.078125 -3.125 2.515625 -2.5 L 0.609375 -0.375 C 0.5 -0.265625 0.5 -0.234375 0.5 0 L 4.203125 0 L 4.46875 -1.734375 L 4.234375 -1.734375 C 4.171875 -1.4375 4.109375 -1 4 -0.84375 C 3.9375 -0.765625 3.28125 -0.765625 3.0625 -0.765625 Z M 1.265625 -0.765625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 2.890625 -3.515625 C 3.703125 -3.78125 4.28125 -4.46875 4.28125 -5.265625 C 4.28125 -6.078125 3.40625 -6.640625 2.453125 -6.640625 C 1.453125 -6.640625 0.6875 -6.046875 0.6875 -5.28125 C 0.6875 -4.953125 0.90625 -4.765625 1.203125 -4.765625 C 1.5 -4.765625 1.703125 -4.984375 1.703125 -5.28125 C 1.703125 -5.765625 1.234375 -5.765625 1.09375 -5.765625 C 1.390625 -6.265625 2.046875 -6.390625 2.40625 -6.390625 C 2.828125 -6.390625 3.375 -6.171875 3.375 -5.28125 C 3.375 -5.15625 3.34375 -4.578125 3.09375 -4.140625 C 2.796875 -3.65625 2.453125 -3.625 2.203125 -3.625 C 2.125 -3.609375 1.890625 -3.59375 1.8125 -3.59375 C 1.734375 -3.578125 1.671875 -3.5625 1.671875 -3.46875 C 1.671875 -3.359375 1.734375 -3.359375 1.90625 -3.359375 L 2.34375 -3.359375 C 3.15625 -3.359375 3.53125 -2.6875 3.53125 -1.703125 C 3.53125 -0.34375 2.84375 -0.0625 2.40625 -0.0625 C 1.96875 -0.0625 1.21875 -0.234375 0.875 -0.8125 C 1.21875 -0.765625 1.53125 -0.984375 1.53125 -1.359375 C 1.53125 -1.71875 1.265625 -1.921875 0.984375 -1.921875 C 0.734375 -1.921875 0.421875 -1.78125 0.421875 -1.34375 C 0.421875 -0.4375 1.34375 0.21875 2.4375 0.21875 C 3.65625 0.21875 4.5625 -0.6875 4.5625 -1.703125 C 4.5625 -2.515625 3.921875 -3.296875 2.890625 -3.515625 Z M 2.890625 -3.515625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 2.9375 -1.640625 L 2.9375 -0.78125 C 2.9375 -0.421875 2.90625 -0.3125 2.171875 -0.3125 L 1.96875 -0.3125 L 1.96875 0 C 2.375 -0.03125 2.890625 -0.03125 3.3125 -0.03125 C 3.734375 -0.03125 4.25 -0.03125 4.671875 0 L 4.671875 -0.3125 L 4.453125 -0.3125 C 3.71875 -0.3125 3.703125 -0.421875 3.703125 -0.78125 L 3.703125 -1.640625 L 4.6875 -1.640625 L 4.6875 -1.953125 L 3.703125 -1.953125 L 3.703125 -6.484375 C 3.703125 -6.6875 3.703125 -6.75 3.53125 -6.75 C 3.453125 -6.75 3.421875 -6.75 3.34375 -6.625 L 0.28125 -1.953125 L 0.28125 -1.640625 Z M 2.984375 -1.953125 L 0.5625 -1.953125 L 2.984375 -5.671875 Z M 2.984375 -1.953125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 4.46875 -2 C 4.46875 -3.1875 3.65625 -4.1875 2.578125 -4.1875 C 2.109375 -4.1875 1.671875 -4.03125 1.3125 -3.671875 L 1.3125 -5.625 C 1.515625 -5.5625 1.84375 -5.5 2.15625 -5.5 C 3.390625 -5.5 4.09375 -6.40625 4.09375 -6.53125 C 4.09375 -6.59375 4.0625 -6.640625 3.984375 -6.640625 C 3.984375 -6.640625 3.953125 -6.640625 3.90625 -6.609375 C 3.703125 -6.515625 3.21875 -6.3125 2.546875 -6.3125 C 2.15625 -6.3125 1.6875 -6.390625 1.21875 -6.59375 C 1.140625 -6.625 1.125 -6.625 1.109375 -6.625 C 1 -6.625 1 -6.546875 1 -6.390625 L 1 -3.4375 C 1 -3.265625 1 -3.1875 1.140625 -3.1875 C 1.21875 -3.1875 1.234375 -3.203125 1.28125 -3.265625 C 1.390625 -3.421875 1.75 -3.96875 2.5625 -3.96875 C 3.078125 -3.96875 3.328125 -3.515625 3.40625 -3.328125 C 3.5625 -2.953125 3.59375 -2.578125 3.59375 -2.078125 C 3.59375 -1.71875 3.59375 -1.125 3.34375 -0.703125 C 3.109375 -0.3125 2.734375 -0.0625 2.28125 -0.0625 C 1.5625 -0.0625 0.984375 -0.59375 0.8125 -1.171875 C 0.84375 -1.171875 0.875 -1.15625 0.984375 -1.15625 C 1.3125 -1.15625 1.484375 -1.40625 1.484375 -1.640625 C 1.484375 -1.890625 1.3125 -2.140625 0.984375 -2.140625 C 0.84375 -2.140625 0.5 -2.0625 0.5 -1.609375 C 0.5 -0.75 1.1875 0.21875 2.296875 0.21875 C 3.453125 0.21875 4.46875 -0.734375 4.46875 -2 Z M 4.46875 -2 "/>
</symbol>
<symbol overflow="visible" id="glyph0-7">
<path style="stroke:none;" d="M 1.3125 -3.265625 L 1.3125 -3.515625 C 1.3125 -6.03125 2.546875 -6.390625 3.0625 -6.390625 C 3.296875 -6.390625 3.71875 -6.328125 3.9375 -5.984375 C 3.78125 -5.984375 3.390625 -5.984375 3.390625 -5.546875 C 3.390625 -5.234375 3.625 -5.078125 3.84375 -5.078125 C 4 -5.078125 4.3125 -5.171875 4.3125 -5.5625 C 4.3125 -6.15625 3.875 -6.640625 3.046875 -6.640625 C 1.765625 -6.640625 0.421875 -5.359375 0.421875 -3.15625 C 0.421875 -0.484375 1.578125 0.21875 2.5 0.21875 C 3.609375 0.21875 4.5625 -0.71875 4.5625 -2.03125 C 4.5625 -3.296875 3.671875 -4.25 2.5625 -4.25 C 1.890625 -4.25 1.515625 -3.75 1.3125 -3.265625 Z M 2.5 -0.0625 C 1.875 -0.0625 1.578125 -0.65625 1.515625 -0.8125 C 1.328125 -1.28125 1.328125 -2.078125 1.328125 -2.25 C 1.328125 -3.03125 1.65625 -4.03125 2.546875 -4.03125 C 2.71875 -4.03125 3.171875 -4.03125 3.484375 -3.40625 C 3.65625 -3.046875 3.65625 -2.53125 3.65625 -2.046875 C 3.65625 -1.5625 3.65625 -1.0625 3.484375 -0.703125 C 3.1875 -0.109375 2.734375 -0.0625 2.5 -0.0625 Z M 2.5 -0.0625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-8">
<path style="stroke:none;" d="M 3.65625 -3.171875 L 3.65625 -2.84375 C 3.65625 -0.515625 2.625 -0.0625 2.046875 -0.0625 C 1.875 -0.0625 1.328125 -0.078125 1.0625 -0.421875 C 1.5 -0.421875 1.578125 -0.703125 1.578125 -0.875 C 1.578125 -1.1875 1.34375 -1.328125 1.125 -1.328125 C 0.96875 -1.328125 0.671875 -1.25 0.671875 -0.859375 C 0.671875 -0.1875 1.203125 0.21875 2.046875 0.21875 C 3.34375 0.21875 4.5625 -1.140625 4.5625 -3.28125 C 4.5625 -5.96875 3.40625 -6.640625 2.515625 -6.640625 C 1.96875 -6.640625 1.484375 -6.453125 1.0625 -6.015625 C 0.640625 -5.5625 0.421875 -5.140625 0.421875 -4.390625 C 0.421875 -3.15625 1.296875 -2.171875 2.40625 -2.171875 C 3.015625 -2.171875 3.421875 -2.59375 3.65625 -3.171875 Z M 2.421875 -2.40625 C 2.265625 -2.40625 1.796875 -2.40625 1.5 -3.03125 C 1.3125 -3.40625 1.3125 -3.890625 1.3125 -4.390625 C 1.3125 -4.921875 1.3125 -5.390625 1.53125 -5.765625 C 1.796875 -6.265625 2.171875 -6.390625 2.515625 -6.390625 C 2.984375 -6.390625 3.3125 -6.046875 3.484375 -5.609375 C 3.59375 -5.28125 3.640625 -4.65625 3.640625 -4.203125 C 3.640625 -3.375 3.296875 -2.40625 2.421875 -2.40625 Z M 2.421875 -2.40625 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 0 0 L 337.769531 0 L 337.769531 97.296875 L 0 97.296875 Z M 0 0 "/>
</clipPath>
</defs>
<g id="surface1">
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="10.5094" y="31.73313"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10 -0.0005075 C 10 2.651836 8.945312 5.194805 7.070312 7.069805 C 5.195312 8.944805 2.652344 9.999493 0 9.999493 C -2.652344 9.999493 -5.195312 8.944805 -7.070312 7.069805 C -8.945312 5.194805 -10 2.651836 -10 -0.0005075 C -10 -2.652851 -8.945312 -5.19582 -7.070312 -7.07082 C -5.195312 -8.94582 -2.652344 -10.000507 0 -10.000507 C 2.652344 -10.000507 5.195312 -8.94582 7.070312 -7.07082 C 8.945312 -5.19582 10 -2.652851 10 -0.0005075 Z M 10 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="62.471" y="31.73313"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 61.960938 -0.0005075 C 61.960938 2.651836 60.90625 5.194805 59.03125 7.069805 C 57.15625 8.944805 54.613281 9.999493 51.960938 9.999493 C 49.308594 9.999493 46.765625 8.944805 44.890625 7.069805 C 43.015625 5.194805 41.960938 2.651836 41.960938 -0.0005075 C 41.960938 -2.652851 43.015625 -5.19582 44.890625 -7.07082 C 46.765625 -8.94582 49.308594 -10.000507 51.960938 -10.000507 C 54.613281 -10.000507 57.15625 -8.94582 59.03125 -7.07082 C 60.90625 -5.19582 61.960938 -2.652851 61.960938 -0.0005075 Z M 61.960938 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-3" x="114.4327" y="31.73313"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 113.921875 -0.0005075 C 113.921875 2.651836 112.871094 5.194805 110.996094 7.069805 C 109.117188 8.944805 106.574219 9.999493 103.921875 9.999493 C 101.269531 9.999493 98.726562 8.944805 96.851562 7.069805 C 94.976562 5.194805 93.921875 2.651836 93.921875 -0.0005075 C 93.921875 -2.652851 94.976562 -5.19582 96.851562 -7.07082 C 98.726562 -8.94582 101.269531 -10.000507 103.921875 -10.000507 C 106.574219 -10.000507 109.117188 -8.94582 110.996094 -7.07082 C 112.871094 -5.19582 113.921875 -2.652851 113.921875 -0.0005075 Z M 113.921875 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="166.3944" y="31.73313"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 165.886719 -0.0005075 C 165.886719 2.651836 164.832031 5.194805 162.957031 7.069805 C 161.082031 8.944805 158.539062 9.999493 155.886719 9.999493 C 153.234375 9.999493 150.6875 8.944805 148.8125 7.069805 C 146.9375 5.194805 145.886719 2.651836 145.886719 -0.0005075 C 145.886719 -2.652851 146.9375 -5.19582 148.8125 -7.07082 C 150.6875 -8.94582 153.234375 -10.000507 155.886719 -10.000507 C 158.539062 -10.000507 161.082031 -8.94582 162.957031 -7.07082 C 164.832031 -5.19582 165.886719 -2.652851 165.886719 -0.0005075 Z M 165.886719 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="218.356" y="31.73313"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 217.847656 -0.0005075 C 217.847656 2.651836 216.792969 5.194805 214.917969 7.069805 C 213.042969 8.944805 210.5 9.999493 207.847656 9.999493 C 205.195312 9.999493 202.652344 8.944805 200.777344 7.069805 C 198.902344 5.194805 197.847656 2.651836 197.847656 -0.0005075 C 197.847656 -2.652851 198.902344 -5.19582 200.777344 -7.07082 C 202.652344 -8.94582 205.195312 -10.000507 207.847656 -10.000507 C 210.5 -10.000507 213.042969 -8.94582 214.917969 -7.07082 C 216.792969 -5.19582 217.847656 -2.652851 217.847656 -0.0005075 Z M 217.847656 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-6" x="270.3177" y="31.73313"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 269.808594 -0.0005075 C 269.808594 2.651836 268.753906 5.194805 266.878906 7.069805 C 265.003906 8.944805 262.460938 9.999493 259.808594 9.999493 C 257.15625 9.999493 254.613281 8.944805 252.738281 7.069805 C 250.863281 5.194805 249.808594 2.651836 249.808594 -0.0005075 C 249.808594 -2.652851 250.863281 -5.19582 252.738281 -7.07082 C 254.613281 -8.94582 257.15625 -10.000507 259.808594 -10.000507 C 262.460938 -10.000507 265.003906 -8.94582 266.878906 -7.07082 C 268.753906 -5.19582 269.808594 -2.652851 269.808594 -0.0005075 Z M 269.808594 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-7" x="322.2794" y="31.73313"/>
</g>
<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 321.769531 -0.0005075 C 321.769531 2.651836 320.714844 5.194805 318.839844 7.069805 C 316.964844 8.944805 314.421875 9.999493 311.769531 9.999493 C 309.117188 9.999493 306.574219 8.944805 304.699219 7.069805 C 302.824219 5.194805 301.769531 2.651836 301.769531 -0.0005075 C 301.769531 -2.652851 302.824219 -5.19582 304.699219 -7.07082 C 306.574219 -8.94582 309.117188 -10.000507 311.769531 -10.000507 C 314.421875 -10.000507 316.964844 -8.94582 318.839844 -7.07082 C 320.714844 -5.19582 321.769531 -2.652851 321.769531 -0.0005075 Z M 321.769531 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10 -0.0005075 L 41.960938 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 38.265625 -1.531757 L 41.960938 -0.0005075 L 38.265625 1.530743 Z M 38.265625 -1.531757 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 61.960938 -0.0005075 L 93.921875 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 90.226562 -1.531757 L 93.921875 -0.0005075 L 90.226562 1.530743 Z M 90.226562 -1.531757 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 113.921875 -0.0005075 L 145.886719 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 142.1875 -1.531757 L 145.886719 -0.0005075 L 142.1875 1.530743 Z M 142.1875 -1.531757 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 165.886719 -0.0005075 L 197.847656 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 194.152344 -1.531757 L 197.847656 -0.0005075 L 194.152344 1.530743 Z M 194.152344 -1.531757 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 217.847656 -0.0005075 L 249.808594 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 246.113281 -1.531757 L 249.808594 -0.0005075 L 246.113281 1.530743 Z M 246.113281 -1.531757 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 269.808594 -0.0005075 L 301.769531 -0.0005075 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 298.074219 -1.531757 L 301.769531 -0.0005075 L 298.074219 1.530743 Z M 298.074219 -1.531757 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 4.999493 C 35.457031 20.468243 68.46875 20.468243 95.261719 4.999493 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 91.285156 5.42918 C 92.609375 5.319805 93.9375 5.175274 95.261719 4.999493 C 94.449219 6.061993 93.613281 7.101055 92.757812 8.11668 Z M 91.285156 5.42918 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.621094 4.999493 C 87.417969 20.468243 120.429688 20.468243 147.226562 4.999493 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 143.25 5.42918 C 144.574219 5.319805 145.898438 5.175274 147.226562 4.999493 C 146.410156 6.061993 145.574219 7.101055 144.71875 8.11668 Z M 143.25 5.42918 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 112.582031 4.999493 C 139.378906 20.468243 172.390625 20.468243 199.1875 4.999493 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 195.210938 5.42918 C 196.535156 5.319805 197.859375 5.175274 199.1875 4.999493 C 198.371094 6.061993 197.535156 7.101055 196.679688 8.11668 Z M 195.210938 5.42918 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 164.546875 4.999493 C 191.339844 20.468243 224.351562 20.468243 251.148438 4.999493 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 247.171875 5.42918 C 248.496094 5.319805 249.820312 5.175274 251.148438 4.999493 C 250.332031 6.061993 249.496094 7.101055 248.640625 8.11668 Z M 247.171875 5.42918 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.660156 -5.000507 C 51.53125 -29.750507 104.351562 -29.750507 147.226562 -5.000507 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 144.742188 -8.137226 C 145.585938 -7.105976 146.410156 -6.059101 147.226562 -5.000507 C 145.898438 -5.176289 144.574219 -5.328632 143.25 -5.465351 Z M 144.742188 -8.137226 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.621094 -5.000507 C 103.492188 -29.750507 156.3125 -29.750507 199.1875 -5.000507 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 196.707031 -8.137226 C 197.546875 -7.105976 198.371094 -6.059101 199.1875 -5.000507 C 197.863281 -5.176289 196.535156 -5.328632 195.210938 -5.465351 Z M 196.707031 -8.137226 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5 -8.660664 C 48.964844 -84.813007 158.878906 -84.813007 202.847656 -8.660664 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 202.257812 -12.613789 C 202.476562 -11.309101 202.671875 -9.988789 202.847656 -8.660664 C 201.785156 -9.47707 200.710938 -10.270039 199.632812 -11.043476 Z M 202.257812 -12.613789 " transform="matrix(1,0,0,-1,13,28.52293)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="33.9995" y="37.94333"/>
<use xlink:href="#glyph0-7" x="38.9808" y="37.94333"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="85.964422" y="37.94333"/>
<use xlink:href="#glyph0-7" x="90.945722" y="37.94333"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="137.919381" y="37.94333"/>
<use xlink:href="#glyph0-7" x="142.900681" y="37.94333"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="189.884302" y="37.94333"/>
<use xlink:href="#glyph0-7" x="194.865602" y="37.94333"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-8" x="244.339874" y="37.94333"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-8" x="296.294833" y="37.94333"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="59.9803" y="8.92043"/>
<use xlink:href="#glyph0-7" x="64.9616" y="8.92043"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="111.945222" y="8.92043"/>
<use xlink:href="#glyph0-7" x="116.926522" y="8.92043"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="163.900181" y="8.92043"/>
<use xlink:href="#glyph0-7" x="168.881481" y="8.92043"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="218.355752" y="8.92043"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="88.4519" y="61.50743"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="140.416822" y="61.50743"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="114.4327" y="91.29673"/>
</g>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -12.5 -68.273945 L 324.269531 -68.273945 L 324.269531 28.02293 L -12.5 28.02293 Z M -12.5 -68.273945 " transform="matrix(1,0,0,-1,13,28.52293)"/>
</g>
</g>
</svg>
/* eslint-disable no-magic-numbers */
import { wrap } from './solver.js';
import wrappingImage from './images/wrapping.svg';
import styles from './solution.module.css';
function formatSolution(solution) {
return solution.map((count) => `after ${count} word${count !== 1 ? 's' : ''}`).join(', ');
}
const WORD_LENGTHS = [1, 1, 1, 1, 4, 4];
const LINE_LENGTH = 7;
export function Solution() {
const solution = wrap(WORD_LENGTHS, LINE_LENGTH);
return (
<div>
<figure className={styles.diagram} >
<img src={wrappingImage} alt="A weighted directed graph corresponding to the line-wrapping problem." />
</figure>
<label>
Line Break Locations: <output>{formatSolution(solution)}</output>
</label>
</div>
);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment