pxt-calliope/sim/visuals/microbit.ts

1874 lines
106 KiB
TypeScript
Raw Normal View History

namespace pxsim.visuals {
const MB_STYLE = `
svg.sim {
margin-bottom:1em;
}
svg.sim.grayscale {
-moz-filter: grayscale(1);
-webkit-filter: grayscale(1);
filter: grayscale(1);
}
.sim-button {
pointer-events: none;
}
.sim-button-outer:hover {
stroke:grey;
stroke-width: 3px;
}
.sim-button-nut {
fill:#704A4A;
pointer-events:none;
}
.sim-button-nut:hover {
stroke:1px solid #704A4A;
}
.sim-pin:hover {
stroke:#D4AF37;
stroke-width:2px;
}
.sim-pin-touch.touched:hover {
stroke:darkorange;
}
.sim-led-back:hover {
2016-10-13 08:40:33 +02:00
stroke:#fff;
stroke-width:3px;
}
.sim-led:hover {
stroke:#ff7f7f;
stroke-width:3px;
}
.sim-systemled {
fill:#333;
stroke:#555;
stroke-width: 1px;
}
.sim-light-level-button {
stroke:#ccc;
stroke-width: 2px;
}
.sim-antenna {
stroke:#555;
stroke-width: 2px;
}
.sim-text {
font-family:"Lucida Console", Monaco, monospace;
2016-10-13 07:44:05 +02:00
font-size:10px;
fill:#fff;
2016-10-13 07:44:05 +02:00
pointer-events: none; user-select: none;
}
2016-09-27 20:00:21 +02:00
.sim-text.inverted {
fill:#000;
}
.sim-text-pin {
font-family:"Lucida Console", Monaco, monospace;
font-size:20px;
fill:#fff;
pointer-events: none;
}
.sim-thermometer {
stroke:#aaa;
stroke-width: 2px;
}
2016-10-13 07:44:05 +02:00
#rgbledcircle:hover {
r:8px;
}
/* animations */
.sim-theme-glow {
animation-name: sim-theme-glow-animation;
animation-timing-function: ease-in-out;
animation-direction: alternate;
animation-iteration-count: infinite;
animation-duration: 1.25s;
}
@keyframes sim-theme-glow-animation {
from { opacity: 1; }
to { opacity: 0.75; }
}
.sim-flash {
animation-name: sim-flash-animation;
animation-duration: 0.1s;
}
@keyframes sim-flash-animation {
from { fill: yellow; }
to { fill: default; }
}
.sim-flash-stroke {
animation-name: sim-flash-stroke-animation;
animation-duration: 0.4s;
animation-timing-function: ease-in;
}
@keyframes sim-flash-stroke-animation {
from { stroke: yellow; }
to { stroke: default; }
}
/* wireframe */
.sim-wireframe * {
fill: none;
stroke: black;
}
2016-08-31 22:39:47 +02:00
.sim-wireframe .sim-display,
.sim-wireframe .sim-led,
.sim-wireframe .sim-led-back,
.sim-wireframe .sim-head,
.sim-wireframe .sim-theme,
.sim-wireframe .sim-button-group,
.sim-wireframe .sim-button-label,
.sim-wireframe .sim-button,
.sim-wireframe .sim-text-pin
{
visibility: hidden;
}
.sim-wireframe .sim-label
{
stroke: none;
fill: #777;
}
2016-08-31 22:39:47 +02:00
.sim-wireframe .sim-board {
stroke-width: 2px;
}
`;
2016-10-17 05:09:13 +02:00
const BOARD_SVG = `<?xml version="1.0" encoding="utf-8"?>
2016-10-13 07:44:05 +02:00
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 251.8 222.2" enable-background="new 0 0 251.8 222.2" xml:space="preserve">
<symbol id="Mini_front" viewBox="-121.4 -112.4 242.4 214.1">
<g>
<use xlink:href="#calliope_mini_backside" width="296.7" height="262.1" id="XMLID_2_" x="-149.4" y="-131" transform="matrix(0.8169 0 0 0.8169 0.6672 -5.3582)" overflow="visible"/>
</g>
<g>
<g>
<polygon id="LED_0_0" fill="#FFFFFF" points="-20.9,36.6 -23,36.6 -23,42 -20.9,42 "/>
<polygon id="LED_1_0" fill="#FFFFFF" points="-9.9,36.6 -12.1,36.6 -12.1,42 -9.9,42 "/>
<polygon id="LED_2_0" fill="#FFFFFF" points="1,36.6 -1.1,36.6 -1.1,42 1,42 "/>
<polygon id="LED_3_0" fill="#FFFFFF" points="12,36.6 9.8,36.6 9.8,42 12,42 "/>
<polygon id="LED_4_0" fill="#FFFFFF" points="22.9,36.6 20.8,36.6 20.8,42 22.9,42 "/>
</g>
<g>
<polygon id="LED_0_1" fill="#FFFFFF" points="-20.9,25.9 -23,25.9 -23,31.3 -20.9,31.3 "/>
<polygon id="LED_1_1" fill="#FFFFFF" points="-9.9,25.9 -12.1,25.9 -12.1,31.3 -9.9,31.3 "/>
<polygon id="LED_2_1" fill="#FFFFFF" points="1,25.9 -1.1,25.9 -1.1,31.3 1,31.3 "/>
<polygon id="LED_3_1" fill="#FFFFFF" points="12,25.9 9.8,25.9 9.8,31.3 12,31.3 "/>
<polygon id="LED_4_1" fill="#FFFFFF" points="22.9,25.9 20.8,25.9 20.8,31.3 22.9,31.3 "/>
</g>
<g>
<polygon id="LED_0_2" fill="#FFFFFF" points="-20.9,15.2 -23,15.2 -23,20.6 -20.9,20.6 "/>
<polygon id="LED_1_2" fill="#FFFFFF" points="-9.9,15.2 -12.1,15.2 -12.1,20.6 -9.9,20.6 "/>
<polygon id="LED_2_2" fill="#FFFFFF" points="1,15.2 -1.1,15.2 -1.1,20.6 1,20.6 "/>
<polygon id="LED_3_2" fill="#FFFFFF" points="12,15.2 9.8,15.2 9.8,20.6 12,20.6 "/>
<polygon id="LED_4_2" fill="#FFFFFF" points="22.9,15.2 20.8,15.2 20.8,20.6 22.9,20.6 "/>
</g>
<g>
<polygon id="LED_0_3" fill="#FFFFFF" points="-20.9,4.4 -23,4.4 -23,9.9 -20.9,9.9 "/>
<polygon id="LED_1_3" fill="#FFFFFF" points="-9.9,4.4 -12.1,4.4 -12.1,9.9 -9.9,9.9 "/>
<polygon id="LED_2_3" fill="#FFFFFF" points="1,4.4 -1.1,4.4 -1.1,9.9 1,9.9 "/>
<polygon id="LED_3_3" fill="#FFFFFF" points="12,4.4 9.8,4.4 9.8,9.9 12,9.9 "/>
<polygon id="LED_4_3" fill="#FFFFFF" points="22.9,4.4 20.8,4.4 20.8,9.9 22.9,9.9 "/>
</g>
<g>
<polygon id="LED_0_4" fill="#FFFFFF" points="-20.9,-6.3 -23,-6.3 -23,-0.8 -20.9,-0.8 "/>
<polygon id="LED_1_4" fill="#FFFFFF" points="-9.9,-6.3 -12.1,-6.3 -12.1,-0.8 -9.9,-0.8 "/>
<polygon id="LED_2_4" fill="#FFFFFF" points="1,-6.3 -1.1,-6.3 -1.1,-0.8 1,-0.8 "/>
<polygon id="LED_3_4" fill="#FFFFFF" points="12,-6.3 9.8,-6.3 9.8,-0.8 12,-0.8 "/>
<polygon id="LED_4_4" fill="#FFFFFF" points="22.9,-6.3 20.8,-6.3 20.8,-0.8 22.9,-0.8 "/>
</g>
</g>
<path fill="#BDD1CF" d="M8.8,66.6H-8.8c-0.7,0-1.2,0.5-1.2,1.2v13.5c0,0.7,0.5,1.2,1.2,1.2H8.8c0.7,0,1.2-0.5,1.2-1.2V67.9
C10,67.2,9.4,66.6,8.8,66.6z"/>
<g id="EXT_PWR">
<path fill="#FFFFFF" d="M65.5-65.6L49.9-59c-0.8,0.3-1.1,1.2-0.8,2l8.1,19.3c0.3,0.8,1.2,1.1,2,0.8l15.6-6.6
c0.8-0.3,1.1-1.2,0.8-2l-8.1-19.3C67.2-65.6,66.3-65.9,65.5-65.6z"/>
<polygon fill="#FFFFFF" points="60.3,-41.1 50.8,-37.1 52.1,-34 61.6,-38 "/>
<polygon fill="#FFFFFF" points="52.3,-60 42.8,-56 44.1,-52.9 53.6,-56.9 "/>
</g>
<path id="SPKR" fill="#1D1D1B" d="M75.8-1.1c-9.9,0-17.9-8-17.9-17.9S65.9-37,75.8-37s17.9,8,17.9,17.9S85.7-1.1,75.8-1.1z"/>
<path fill="#333333" d="M75.8-15.6c-1.9,0-3.4-1.5-3.4-3.4s1.5-3.4,3.4-3.4c1.9,0,3.4,1.5,3.4,3.4S77.7-15.6,75.8-15.6z"/>
<polygon fill="#F8B133" points="37.1,-46 25.4,-46 25.4,-25 37.1,-25 "/>
<polygon fill="#1D1D1B" points="-31.8,-47.4 -43.7,-35.5 -31.8,-23.6 -19.9,-35.5 "/>
<polygon fill="#BDD1CF" points="-36.8,-54.6 -43.6,-59 -47.5,-52.9 -40.7,-48.5 "/>
</symbol>
<symbol id="calliope_mini_backside" viewBox="-149.4 -131 296.7 262.1">
<g>
<g>
<path fill="#034854" d="M-78.2,127.5L-78.2,127.5c6.2,4.6,14.6,4.8,20.9,0.5c12.5-8.4,34.7-21,56-21c23.2,0,45.7,13.5,56.4,21
c4.3,3,9.8,3.8,14.7,2l0.6-0.2c7.3-2.6,11.8-9.8,11-17.4c-1.7-15.4-3-41.9,13-62.9c16.8-21.9,31.7-31.2,42.3-34.8
c5.9-2,9.9-7.4,10.4-13.6v0c0.5-8-5.1-13.6-12.3-17c-12-5.7-30.8-15.7-42.8-36.2C77.6-77,79-103.4,80.6-114.8
c0.7-5.1-1.6-10.1-5.9-12.8c-4.8-3-11.9-4.6-21.4,1.5c-5.5,3.6-12,8.6-20.8,12c-10.8,4.1-16.9,5.5-20.3,5.8
c-2.4,0.2-4.4,1.8-5.2,4c-1.1,2.9-3.4,6.2-8.2,6.2c-5,0-7.2-3.6-8.2-6.6c-0.8-2.5-3.3-3.4-5.9-3.7c-4.9-0.4-12.5-2.4-20.5-6.1
c-7.1-3.3-14-7.9-20.4-12.7c-5.5-4.1-15-5.5-20.4-1.3l0,0c-5.7,4.4-7.4,11.7-6.5,18.8c1.9,15.3,1.1,43.3-16.7,64.2
C-117.4-24.6-128-19.2-137-16.3c-3.9,1.3-11.4,5.4-12.3,14.1s3,14.5,10.9,18.4c12.3,6.1,30.5,17.2,42.1,34.1
c15.1,22,15.1,48.1,13.1,61.7C-83.9,117.7-82.8,124.1-78.2,127.5z"/>
<g id="holes_5_">
<g display="none">
<g display="inline">
<path fill="#EFDA48" d="M-54.6-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-53.1-89.3-54.6-89.3z
M-54.6-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S-53.9-93.1-54.6-93.1z"/>
<path fill="#1D1D1B" d="M-54.6-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S-53.9-93.1-54.6-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-45.8-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-44.3-89.3-45.8-89.3z
M-45.8-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S-45.1-93.1-45.8-93.1z"/>
<path fill="#1D1D1B" d="M-45.8-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S-45.1-93.1-45.8-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-37-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S-35.5-89.3-37-89.3z
M-37-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S-36.3-93.1-37-93.1z"/>
<path fill="#1D1D1B" d="M-37-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S-36.3-93.1-37-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-28.2-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S-26.7-89.3-28.2-89.3z
M-28.2-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S-27.5-93.1-28.2-93.1z"/>
<path fill="#1D1D1B" d="M-28.2-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S-27.5-93.1-28.2-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-19.3-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S-17.9-89.3-19.3-89.3z
M-19.3-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S-18.7-93.1-19.3-93.1z"/>
<path fill="#1D1D1B" d="M-19.3-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S-18.7-93.1-19.3-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-10.5-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-9.1-89.3-10.5-89.3z
M-10.5-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S-9.8-93.1-10.5-93.1z"/>
<path fill="#1D1D1B" d="M-10.5-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S-9.8-93.1-10.5-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-1.7-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-0.3-89.3-1.7-89.3z M-1.7-93.1
c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S-1-93.1-1.7-93.1z"/>
<path fill="#1D1D1B" d="M-1.7-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S-1-93.1-1.7-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M7.1-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S8.5-89.3,7.1-89.3z M7.1-93.1
c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S7.8-93.1,7.1-93.1z"/>
<path fill="#1D1D1B" d="M7.1-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2S7.8-93.1,7.1-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M15.9-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S17.3-89.3,15.9-89.3z M15.9-93.1
c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S16.6-93.1,15.9-93.1z"/>
<path fill="#1D1D1B" d="M15.9-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S16.6-93.1,15.9-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M24.7-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S26.1-89.3,24.7-89.3z
M24.7-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S25.4-93.1,24.7-93.1z"/>
<path fill="#1D1D1B" d="M24.7-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S25.4-93.1,24.7-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M33.5-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S35-89.3,33.5-89.3z M33.5-93.1
c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S34.2-93.1,33.5-93.1z"/>
<path fill="#1D1D1B" d="M33.5-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S34.2-93.1,33.5-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M42.3-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S43.8-89.3,42.3-89.3z M42.3-93.1
c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S43-93.1,42.3-93.1z"/>
<path fill="#1D1D1B" d="M42.3-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S43-93.1,42.3-93.1z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M51.1-89.3c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S52.6-89.3,51.1-89.3z M51.1-93.1
c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S51.8-93.1,51.1-93.1z"/>
<path fill="#1D1D1B" d="M51.1-93.1c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2S51.8-93.1,51.1-93.1z"/>
</g>
</g>
<g display="none">
<g display="inline">
<path fill="#EFDA48" d="M-54.6-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-53.1-80.4-54.6-80.4z
M-54.6-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C-53.3-83.7-53.9-84.3-54.6-84.3z"/>
<path fill="#1D1D1B" d="M-54.6-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C-53.3-83.7-53.9-84.3-54.6-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-45.8-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-44.3-80.4-45.8-80.4z
M-45.8-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C-44.5-83.7-45.1-84.3-45.8-84.3z"/>
<path fill="#1D1D1B" d="M-45.8-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C-44.5-83.7-45.1-84.3-45.8-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-37-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S-35.5-80.4-37-80.4z
M-37-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C-35.7-83.7-36.3-84.3-37-84.3z"/>
<path fill="#1D1D1B" d="M-37-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C-35.7-83.7-36.3-84.3-37-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-28.2-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S-26.7-80.4-28.2-80.4z
M-28.2-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-26.9-83.7-27.5-84.3-28.2-84.3z"/>
<path fill="#1D1D1B" d="M-28.2-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2
C-26.9-83.7-27.5-84.3-28.2-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-19.3-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S-17.9-80.4-19.3-80.4z
M-19.3-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-18.1-83.7-18.7-84.3-19.3-84.3z"/>
<path fill="#1D1D1B" d="M-19.3-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2
C-18.1-83.7-18.7-84.3-19.3-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-10.5-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-9.1-80.4-10.5-80.4z
M-10.5-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-9.3-83.7-9.8-84.3-10.5-84.3z"/>
<path fill="#1D1D1B" d="M-10.5-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2
C-9.3-83.7-9.8-84.3-10.5-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-1.7-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-0.3-80.4-1.7-80.4z M-1.7-84.3
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-0.5-83.7-1-84.3-1.7-84.3z"/>
<path fill="#1D1D1B" d="M-1.7-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-0.5-83.7-1-84.3-1.7-84.3z
"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M7.1-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S8.5-80.4,7.1-80.4z M7.1-84.3
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C8.3-83.7,7.8-84.3,7.1-84.3z"/>
<path fill="#1D1D1B" d="M7.1-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C8.3-83.7,7.8-84.3,7.1-84.3z
"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M15.9-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S17.3-80.4,15.9-80.4z M15.9-84.3
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C17.1-83.7,16.6-84.3,15.9-84.3z"/>
<path fill="#1D1D1B" d="M15.9-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C17.1-83.7,16.6-84.3,15.9-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M24.7-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S26.1-80.4,24.7-80.4z
M24.7-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C25.9-83.7,25.4-84.3,24.7-84.3z"/>
<path fill="#1D1D1B" d="M24.7-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C25.9-83.7,25.4-84.3,24.7-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M33.5-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S35-80.4,33.5-80.4z M33.5-84.3
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C34.8-83.7,34.2-84.3,33.5-84.3z"/>
<path fill="#1D1D1B" d="M33.5-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C34.8-83.7,34.2-84.3,33.5-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M42.3-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S43.8-80.4,42.3-80.4z M42.3-84.3
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C43.6-83.7,43-84.3,42.3-84.3z"/>
<path fill="#1D1D1B" d="M42.3-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C43.6-83.7,43-84.3,42.3-84.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M51.1-80.4c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S52.6-80.4,51.1-80.4z M51.1-84.3
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C52.4-83.7,51.8-84.3,51.1-84.3z"/>
<path fill="#1D1D1B" d="M51.1-84.3c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C52.4-83.7,51.8-84.3,51.1-84.3z"/>
</g>
</g>
<g display="none">
<g display="inline">
<path fill="#EFDA48" d="M-19.3-63.5c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S-17.9-63.5-19.3-63.5z
M-19.3-67.4c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-18.1-66.8-18.7-67.4-19.3-67.4z"/>
<path fill="#1D1D1B" d="M-19.3-67.4c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2
C-18.1-66.8-18.7-67.4-19.3-67.4z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-10.5-63.5c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-9.1-63.5-10.5-63.5z
M-10.5-67.4c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-9.3-66.8-9.8-67.4-10.5-67.4z"/>
<path fill="#1D1D1B" d="M-10.5-67.4c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2
C-9.3-66.8-9.8-67.4-10.5-67.4z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-1.7-63.5c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S-0.3-63.5-1.7-63.5z M-1.7-67.4
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-0.5-66.8-1-67.4-1.7-67.4z"/>
<path fill="#1D1D1B" d="M-1.7-67.4c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C-0.5-66.8-1-67.4-1.7-67.4z
"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M7.1-63.5c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S8.5-63.5,7.1-63.5z M7.1-67.4
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C8.3-66.8,7.8-67.4,7.1-67.4z"/>
<path fill="#1D1D1B" d="M7.1-67.4c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2s1.2-0.6,1.2-1.2C8.3-66.8,7.8-67.4,7.1-67.4z
"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M15.9-63.5c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S17.3-63.5,15.9-63.5z M15.9-67.4
c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2C17.1-66.8,16.6-67.4,15.9-67.4z"/>
<path fill="#1D1D1B" d="M15.9-67.4c-0.7,0-1.2,0.6-1.2,1.2c0,0.7,0.6,1.2,1.2,1.2c0.7,0,1.2-0.6,1.2-1.2
C17.1-66.8,16.6-67.4,15.9-67.4z"/>
</g>
</g>
<g display="none">
<g display="inline">
<polygon fill="#EFDA48" points="96,28 92.4,31.6 96,35.2 99.6,31.6 "/>
<path fill="#1D1D1B" d="M95.1,30.8c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0c0.5-0.5,0.5-1.3,0-1.8
C96.4,30.3,95.6,30.3,95.1,30.8z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M103,28.6c-1,1-2.7,1-3.7,0s-1-2.7,0-3.7s2.7-1,3.7,0S104,27.5,103,28.6z M100.3,25.8
c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0c0.5-0.5,0.5-1.3,0-1.8C101.6,25.3,100.8,25.3,100.3,25.8z"/>
<path fill="#1D1D1B" d="M100.3,25.8c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0c0.5-0.5,0.5-1.3,0-1.8
C101.6,25.3,100.8,25.3,100.3,25.8z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M107.7,24c-1,1-2.7,1-3.7,0c-1-1-1-2.7,0-3.7s2.7-1,3.7,0S108.7,23,107.7,24z M104.9,21.3
c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0c0.5-0.5,0.5-1.3,0-1.8C106.2,20.8,105.4,20.8,104.9,21.3z"/>
<path fill="#1D1D1B" d="M104.9,21.3c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0c0.5-0.5,0.5-1.3,0-1.8
C106.2,20.8,105.4,20.8,104.9,21.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M113,18.7c-1,1-2.7,1-3.7,0s-1-2.7,0-3.7c1-1,2.7-1,3.7,0S114,17.7,113,18.7z M110.2,16
c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0c0.5-0.5,0.5-1.3,0-1.8C111.5,15.5,110.7,15.5,110.2,16z"/>
<path fill="#1D1D1B" d="M110.2,16c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0c0.5-0.5,0.5-1.3,0-1.8
C111.5,15.5,110.7,15.5,110.2,16z"/>
</g>
</g>
<g display="none">
<g display="inline">
<polygon fill="#EFDA48" points="-110.4,17 -114,13.4 -117.7,17 -114,20.7 "/>
<path fill="#1D1D1B" d="M-113.2,16.2c-0.5-0.5-1.3-0.5-1.8,0c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0
C-112.7,17.5-112.7,16.7-113.2,16.2z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-111,24.1c-1-1-1-2.7,0-3.7s2.7-1,3.7,0c1,1,1,2.7,0,3.7S-110,25.1-111,24.1z M-108.3,21.3
c-0.5-0.5-1.3-0.5-1.8,0c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0C-107.8,22.6-107.8,21.8-108.3,21.3z"/>
<path fill="#1D1D1B" d="M-108.3,21.3c-0.5-0.5-1.3-0.5-1.8,0c-0.5,0.5-0.5,1.3,0,1.8c0.5,0.5,1.3,0.5,1.8,0
C-107.8,22.6-107.8,21.8-108.3,21.3z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-106.4,28.7c-1-1-1-2.7,0-3.7c1-1,2.7-1,3.7,0c1,1,1,2.7,0,3.7C-103.7,29.8-105.4,29.8-106.4,28.7z
M-103.7,26c-0.5-0.5-1.3-0.5-1.8,0c-0.5,0.5-0.5,1.3,0,1.8s1.3,0.5,1.8,0C-103.2,27.3-103.2,26.5-103.7,26z"/>
<path fill="#1D1D1B" d="M-103.7,26c-0.5-0.5-1.3-0.5-1.8,0c-0.5,0.5-0.5,1.3,0,1.8s1.3,0.5,1.8,0
C-103.2,27.3-103.2,26.5-103.7,26z"/>
</g>
<g display="inline">
<path fill="#EFDA48" d="M-101.2,34c-1-1-1-2.7,0-3.7c1-1,2.7-1,3.7,0c1,1,1,2.7,0,3.7C-98.5,35-100.1,35-101.2,34z
M-98.4,31.3c-0.5-0.5-1.3-0.5-1.8,0c-0.5,0.5-0.5,1.3,0,1.8s1.3,0.5,1.8,0C-97.9,32.6-97.9,31.8-98.4,31.3z"/>
<path fill="#1D1D1B" d="M-98.4,31.3c-0.5-0.5-1.3-0.5-1.8,0c-0.5,0.5-0.5,1.3,0,1.8s1.3,0.5,1.8,0
C-97.9,32.6-97.9,31.8-98.4,31.3z"/>
</g>
</g>
</g>
<path fill="#FFFFFF" d="M130.1-10.2c-5,0-10.1,5.1-10.1,10.1S125.1,10,130.1,10c5,0,10.1-5.1,10.1-10.1S135-10.2,130.1-10.2z"/>
<path fill="#FFFFFF" d="M64.4,104.8c-5.4,0-9.9,4.4-9.9,9.9c0,5.4,4.4,9.9,9.9,9.9s9.9-4.4,9.9-9.9
C74.3,109.2,69.8,104.8,64.4,104.8z"/>
<path fill="#FFFFFF" d="M-67.6,104.3c-5.7,0-10.4,4.6-10.4,10.4s4.6,10.4,10.4,10.4s10.4-4.6,10.4-10.4S-61.9,104.3-67.6,104.3z"
/>
<path fill="#FFFFFF" d="M-134.6-10.2c-5.6,0-10.1,4.5-10.1,10.1s4.5,11.4,10.1,11.4s10.1-5.8,10.1-11.4S-129-10.2-134.6-10.2z"/>
<path fill="#FFFFFF" d="M-67.6-124.7c-5.6,0-10.1,4.5-10.1,10.1s4.5,10.1,10.1,10.1c5.6,0,10.1-4.5,10.1-10.1
S-62-124.7-67.6-124.7z"/>
<path fill="#FFFFFF" d="M64.4-124c-5.7,0-10.4,4.6-10.4,10.4s4.6,10.4,10.4,10.4s10.4-4.6,10.4-10.4S70.1-124,64.4-124z"/>
</g>
</g>
</symbol>
<g id="Ebene_1">
<use xlink:href="#Mini_front" width="242.4" height="214.1" id="XMLID_11_" x="-121.4" y="-112.4" transform="matrix(1 0 0 -1 126.0595 105.6499)" overflow="visible"/>
<rect x="69.7" y="101.1" fill="#1D1D1B" width="10.1" height="6.1"/>
<path fill="#FFFFFF" d="M30.1,125.2c0,0.3,0,0.5-0.1,0.7c-0.1,0.2-0.1,0.4-0.2,0.5c-0.1,0.1-0.2,0.2-0.4,0.3
c-0.2,0.1-0.3,0.1-0.5,0.1c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.7v-0.9
c0-0.3,0-0.5,0.1-0.7c0.1-0.2,0.1-0.4,0.2-0.5c0.1-0.1,0.2-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.5c0.1,0.2,0.1,0.4,0.1,0.7V125.2z M28,125.1l1.5-1.2c0-0.3-0.1-0.5-0.2-0.6
c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.6,0.3c-0.1,0.2-0.2,0.4-0.2,0.8V125.1z M29.6,124.4l-1.5,1.2c0,0.3,0.1,0.4,0.2,0.6
c0.1,0.1,0.3,0.2,0.5,0.2c0.3,0,0.5-0.1,0.6-0.3c0.1-0.2,0.2-0.4,0.2-0.8V124.4z"/>
<path fill="#FFFFFF" d="M92.7,18h-4v-0.8h4V18z"/>
<path fill="#FFFFFF" d="M162.3,17.3h1.7v0.8h-1.7v1.9h-0.8v-1.9h-1.7v-0.8h1.7v-1.8h0.8V17.3z"/>
<path fill="#FFFFFF" d="M222.1,124.5h0.4c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.1c0.1-0.1,0.1-0.1,0.2-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.2,0.1
c-0.1,0.1-0.1,0.1-0.1,0.2s-0.1,0.2-0.1,0.3h-0.5c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3c0.1-0.1,0.2-0.2,0.4-0.2
c0.1-0.1,0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.1,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.2,0.3c0.1,0.1,0.1,0.3,0.1,0.5
c0,0.1,0,0.2,0,0.2s-0.1,0.2-0.1,0.2c0,0.1-0.1,0.1-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2c0.1,0,0.2,0.1,0.3,0.2
c0.1,0.1,0.2,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3s0,0.2,0,0.3c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.3-0.3,0.4
c-0.1,0.1-0.2,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.3
c-0.1-0.1-0.1-0.3-0.1-0.5h0.5c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.2s0.1,0.1,0.2,0.1c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0
c0.1,0,0.2-0.1,0.2-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2
c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0h-0.4V124.5z"/>
<path fill="#FFFFFF" d="M90.2,203.7h-0.5v-3.3l-1,0.4v-0.5l1.5-0.6h0V203.7z"/>
<path fill="#FFFFFF" d="M163.8,203.7h-2.6v-0.4l1.3-1.4c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0.1-0.2,0.1-0.2
c0-0.1,0-0.2,0-0.2c0-0.1,0-0.2,0-0.3c0-0.1-0.1-0.2-0.1-0.2c-0.1-0.1-0.1-0.1-0.2-0.1c-0.1,0-0.2-0.1-0.3-0.1
c-0.1,0-0.2,0-0.3,0.1c-0.1,0-0.2,0.1-0.2,0.2c-0.1,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0,0.3h-0.5c0-0.2,0-0.3,0.1-0.5
c0.1-0.1,0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1c0.1,0.1,0.3,0.1,0.4,0.2
c0.1,0.1,0.2,0.2,0.2,0.3c0.1,0.1,0.1,0.3,0.1,0.4c0,0.1,0,0.2-0.1,0.3c0,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.1,0.2-0.2,0.3
c-0.1,0.1-0.2,0.2-0.3,0.3l-1.1,1.1h2V203.7z"/>
<path fill="#FFFFFF" d="M131.7,128.3v-3.9h1.2c0.2,0,0.3,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2s0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.5
c0,0.1,0,0.2-0.1,0.3c0,0.1-0.1,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.2c-0.1,0.1-0.2,0.1-0.2,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0.1,0.2,0.1,0.2,0.2s0.1,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.3-0.3,0.4
c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1H131.7z M132.2,126h0.7c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.2-0.1
c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.2-0.1
c-0.1,0-0.2,0-0.3,0h-0.7V126z M132.2,126.4v1.4h0.8c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.1c0.1-0.1,0.1-0.1,0.2-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.1-0.1-0.2-0.1c-0.1,0-0.2-0.1-0.3-0.1H132.2z"/>
<path fill="#FFFFFF" d="M136.9,127.3h-1.3l-0.3,1h-0.5l1.3-3.9h0.4l1.2,3.9h-0.5L136.9,127.3z M135.7,126.8h1l-0.5-1.7L135.7,126.8
z"/>
<path fill="#FFFFFF" d="M141,124.8h-1.2v3.5h-0.5v-3.5H138v-0.4h2.9V124.8z"/>
<path fill="#FFFFFF" d="M144.3,124.8h-1.2v3.5h-0.5v-3.5h-1.2v-0.4h2.9V124.8z"/>
<path fill="#FFFFFF" d="M147.1,126.5h-1.6v1.4h1.9v0.4H145v-3.9h2.4v0.4h-1.9v1.3h1.6V126.5z"/>
<path fill="#FFFFFF" d="M149.6,126.7h-0.8v1.6h-0.5v-3.9h1.2c0.2,0,0.4,0,0.5,0.1s0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.4c0,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2l0.8,1.7
l0,0h-0.5L149.6,126.7z M148.8,126.3h0.7c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1s-0.2,0-0.3-0.1h-0.7V126.3z"/>
<path fill="#FFFFFF" d="M151.6,124.3h2.4v0.4H153v3.1h0.9v0.4h-2.4v-0.4h0.9v-3.1h-0.9V124.3z"/>
<path fill="#FFFFFF" d="M157.1,126.5h-1.6v1.4h1.9v0.4h-2.4v-3.9h2.4v0.4h-1.9v1.3h1.6V126.5z"/>
<path fill="#FFFFFF" d="M132.2,121.5h1.9v0.4h-2.4V118h0.5V121.5z"/>
<path fill="#FFFFFF" d="M136.8,120.9h-1.3l-0.3,1h-0.5l1.3-3.9h0.4l1.2,3.9h-0.5L136.8,120.9z M135.6,120.4h1l-0.5-1.7L135.6,120.4
z"/>
<path fill="#FFFFFF" d="M140.7,118l0,2.7c0,0.2,0,0.4-0.1,0.5c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3
c-0.2,0.1-0.3,0.1-0.5,0.1c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.2-0.1-0.3-0.1-0.5
l0-2.7h0.5l0,2.7c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.2,0.3s0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1s0.2,0,0.3-0.1
c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0.1-0.2,0.1-0.3l0-2.7H140.7z"/>
<path fill="#FFFFFF" d="M144.2,118.4H143v3.5h-0.5v-3.5h-1.2V118h2.9V118.4z"/>
<path fill="#FFFFFF" d="M147,120.9c0-0.1,0-0.2-0.1-0.3s-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2-0.1-0.3-0.1
c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.1-0.4-0.2s-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.2,0-0.3,0.1-0.5
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.2,0,0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2
s0.2,0.2,0.3,0.4s0.1,0.3,0.1,0.5H147c0-0.1,0-0.2-0.1-0.3s-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.3-0.1
c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2s-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0.1,0.3
c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0.1,0.2,0.1,0.3,0.2s0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0,0.2,0,0.3c0,0.2,0,0.3-0.1,0.5
c-0.1,0.1-0.2,0.2-0.3,0.3s-0.3,0.2-0.4,0.2c-0.2,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1c-0.2-0.1-0.3-0.1-0.4-0.2
c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5h0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1
c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2C146.9,121.1,147,121,147,120.9z"/>
<path fill="#FFFFFF" d="M148.8,120.3v1.6h-0.5V118h1.3c0.2,0,0.3,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2s0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5s0,0.4-0.1,0.5c-0.1,0.1-0.2,0.3-0.3,0.4s-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1H148.8z M148.8,119.9
h0.8c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3
c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2-0.1-0.3-0.1h-0.8V119.9z"/>
<path fill="#FFFFFF" d="M152.9,120.3h-0.8v1.6h-0.5V118h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.4s-0.1,0.2-0.2,0.3c-0.1,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2l0.8,1.7l0,0
h-0.5L152.9,120.3z M152.1,119.9h0.7c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2s-0.2-0.1-0.3-0.1s-0.2,0-0.3-0.1h-0.7V119.9z"/>
<path fill="#FFFFFF" d="M157,120.1h-1.6v1.4h1.9v0.4h-2.4V118h2.4v0.4h-1.9v1.3h1.6V120.1z"/>
<path fill="#FFFFFF" d="M160.7,120.7c0,0.2-0.1,0.3-0.1,0.5c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3
c-0.2,0.1-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.4-0.1c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.2-0.2-0.4
c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0-0.4v-0.5c0-0.1,0-0.3,0-0.4c0-0.1,0.1-0.3,0.1-0.4c0-0.1,0.1-0.3,0.2-0.4
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.1,0.4-0.2c0.1,0,0.3-0.1,0.4-0.1c0.2,0,0.4,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.3
c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.2,0.1,0.3,0.1,0.5h-0.5c0-0.1,0-0.2-0.1-0.3s-0.1-0.2-0.2-0.3c-0.1-0.1-0.1-0.1-0.2-0.2
c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1c-0.1,0-0.2,0.1-0.2,0.2c-0.1,0.1-0.1,0.1-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3
c0,0.1,0,0.2-0.1,0.3c0,0.1,0,0.2,0,0.3v0.6c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3c0,0.1,0.1,0.2,0.2,0.2
c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.2-0.3
s0.1-0.2,0.1-0.3H160.7z"/>
<path fill="#FFFFFF" d="M164,121.9h-0.5v-1.8h-1.6v1.8h-0.5V118h0.5v1.7h1.6V118h0.5V121.9z"/>
<path fill="#FFFFFF" d="M167,120.1h-1.6v1.4h1.9v0.4h-2.4V118h2.4v0.4h-1.9v1.3h1.6V120.1z"/>
<path fill="#FFFFFF" d="M169.5,120.3h-0.8v1.6h-0.5V118h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.4c0,0.1-0.1,0.2-0.2,0.3s-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2l0.8,1.7l0,0h-0.5
L169.5,120.3z M168.7,119.9h0.7c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1s-0.2,0-0.3-0.1h-0.7V119.9z"/>
<path fill="#FFFFFF" d="M38.6,121.8h-0.8v1.6h-0.5v-3.9h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.4s-0.1,0.2-0.2,0.3c-0.1,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2l0.8,1.7l0,0
h-0.5L38.6,121.8z M37.8,121.4h0.7c0.1,0,0.2,0,0.3-0.1s0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3-0.1h-0.7V121.4z"/>
<path fill="#FFFFFF" d="M43.2,122.9c-0.2,0.2-0.4,0.3-0.6,0.4s-0.4,0.1-0.7,0.1c-0.2,0-0.3,0-0.4-0.1c-0.1,0-0.3-0.1-0.4-0.2
c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.2-0.2-0.4c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0-0.4v-0.5c0-0.1,0-0.3,0-0.4
c0-0.1,0.1-0.3,0.1-0.4c0.1-0.1,0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.2,0.4-0.2c0.1,0,0.3-0.1,0.4-0.1
c0.2,0,0.4,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5h-0.5c0-0.1-0.1-0.2-0.1-0.3
s-0.1-0.2-0.2-0.2c-0.1-0.1-0.1-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1c-0.1,0-0.2,0.1-0.2,0.2
c-0.1,0.1-0.1,0.1-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2-0.1,0.3c0,0.1,0,0.2,0,0.3v0.5c0,0.1,0,0.2,0,0.3
c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.2,0.2c0.1,0,0.2,0.1,0.3,0.1
c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0.1,0,0.1-0.1,0.2-0.1c0.1,0,0.1-0.1,0.2-0.1l0-0.9h-0.8v-0.4h1.3L43.2,122.9z"/>
<path fill="#FFFFFF" d="M43.9,123.4v-3.9h1.2c0.2,0,0.3,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2s0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.5
c0,0.1,0,0.2-0.1,0.3c0,0.1-0.1,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.2c-0.1,0.1-0.2,0.1-0.2,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0.1,0.2,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.3-0.3,0.4
c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1H43.9z M44.4,121.1h0.7c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.2-0.1
c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.2-0.1
c-0.1,0-0.2,0-0.3,0h-0.7V121.1z M44.4,121.6v1.4h0.8c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.1c0.1-0.1,0.1-0.1,0.2-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2s-0.1-0.1-0.2-0.1c-0.1,0-0.2-0.1-0.3-0.1H44.4z"/>
<path fill="#FFFFFF" d="M49.3,123h1.9v0.4h-2.4v-3.9h0.5V123z"/>
<path fill="#FFFFFF" d="M54.2,121.6h-1.6v1.4h1.9v0.4H52v-3.9h2.4v0.4h-1.9v1.3h1.6V121.6z"/>
<path fill="#FFFFFF" d="M55.3,123.4v-3.9h0.9c0.3,0,0.5,0.1,0.7,0.1c0.2,0.1,0.4,0.2,0.5,0.4c0.1,0.2,0.3,0.4,0.3,0.6
c0.1,0.2,0.1,0.5,0.1,0.7v0.3c0,0.3,0,0.5-0.1,0.7c-0.1,0.2-0.2,0.4-0.3,0.6c-0.1,0.2-0.3,0.3-0.5,0.4c-0.2,0.1-0.5,0.1-0.7,0.1
H55.3z M55.8,119.9v3.1h0.4c0.2,0,0.4,0,0.6-0.1c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.2-0.4c0-0.2,0.1-0.4,0.1-0.6v-0.3
c0-0.2,0-0.4-0.1-0.6c-0.1-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.2-0.4-0.3s-0.3-0.1-0.6-0.1H55.8z"/>
<path fill="#FFFFFF" d="M37.8,117h1.9v0.4h-2.4v-3.9h0.5V117z"/>
<path fill="#FFFFFF" d="M42.4,116.4h-1.3l-0.3,1h-0.5l1.3-3.9H42l1.2,3.9h-0.5L42.4,116.4z M41.3,116h1l-0.5-1.7L41.3,116z"/>
<path fill="#FFFFFF" d="M46.4,116.9c-0.2,0.2-0.4,0.3-0.6,0.4s-0.4,0.1-0.7,0.1c-0.2,0-0.3,0-0.4-0.1c-0.1,0-0.3-0.1-0.4-0.2
c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.2-0.2-0.4c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0-0.4v-0.5c0-0.1,0-0.3,0-0.4
c0-0.1,0.1-0.3,0.1-0.4s0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.2,0.4-0.2s0.3-0.1,0.4-0.1c0.2,0,0.4,0,0.5,0.1
c0.2,0.1,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5h-0.5c0-0.1-0.1-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2
c-0.1-0.1-0.1-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1c-0.1,0-0.2,0.1-0.2,0.2s-0.1,0.1-0.2,0.2
c0,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2-0.1,0.3c0,0.1,0,0.2,0,0.3v0.5c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3
c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.2,0.2c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0
c0.1,0,0.1-0.1,0.2-0.1c0.1,0,0.1-0.1,0.2-0.1l0-0.9h-0.8v-0.4h1.3L46.4,116.9z"/>
<path fill="#FFFFFF" d="M49.4,115.6h-1.6v1.4h1.9v0.4h-2.4v-3.9h2.4v0.4h-1.9v1.3h1.6V115.6z"/>
<path fill="#FFFFFF" d="M52.6,116.5c0-0.1,0-0.2-0.1-0.3s-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1s-0.2-0.1-0.3-0.1
c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.1-0.4-0.2s-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.2,0-0.3,0.1-0.5
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2s0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2
c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5h-0.5c0-0.1,0-0.2-0.1-0.3s-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.2-0.2
c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3
c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0,0.2,0.1,0.3,0.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0,0.2,0,0.3
c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1
c-0.2-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5h0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2
c0.1,0.1,0.2,0.1,0.3,0.1s0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2
C52.6,116.7,52.6,116.6,52.6,116.5z"/>
<path fill="#FFFFFF" d="M56,115.6h-1.6v1.4h1.9v0.4h-2.4v-3.9h2.4v0.4h-1.9v1.3H56V115.6z"/>
<path fill="#FFFFFF" d="M59.6,117.4h-0.5l-1.5-2.9l0,2.9h-0.5v-3.9h0.5l1.5,2.9l0-2.9h0.5V117.4z"/>
<path fill="#FFFFFF" d="M62.6,116.5c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1s-0.2-0.1-0.3-0.1
c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.2,0-0.3,0.1-0.5
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.2,0,0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2
s0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5h-0.5c0-0.1,0-0.2-0.1-0.3s-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.2-0.2
c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3
c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0,0.2,0.1,0.3,0.1s0.2,0.1,0.3,0.2c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0,0.2,0,0.3c0,0.2,0,0.3-0.1,0.5
c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1c-0.2-0.1-0.3-0.1-0.4-0.2
c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5h0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1
s0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2C62.5,116.7,62.6,116.6,62.6,116.5z"/>
<path fill="#FFFFFF" d="M66.4,115.7c0,0.1,0,0.3,0,0.4c0,0.1-0.1,0.3-0.1,0.4c0,0.1-0.1,0.3-0.2,0.4c-0.1,0.1-0.2,0.2-0.3,0.3
c-0.1,0.1-0.2,0.2-0.3,0.2c-0.1,0-0.3,0.1-0.4,0.1s-0.3,0-0.4-0.1c-0.1,0-0.2-0.1-0.3-0.2c-0.1-0.1-0.2-0.2-0.3-0.3
c-0.1-0.1-0.1-0.2-0.2-0.4s-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0-0.4v-0.4c0-0.1,0-0.3,0-0.4c0-0.1,0.1-0.3,0.1-0.4
c0-0.1,0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.2,0.3-0.2c0.1,0,0.3-0.1,0.4-0.1c0.2,0,0.3,0,0.4,0.1
c0.1,0.1,0.2,0.1,0.3,0.2s0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.2,0.2,0.4c0,0.1,0.1,0.3,0.1,0.4c0,0.1,0,0.3,0,0.4V115.7z M65.9,115.3
c0-0.1,0-0.2,0-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.1-0.1-0.2-0.2
c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1s-0.2,0.1-0.2,0.2c-0.1,0.1-0.1,0.2-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3
c0,0.1,0,0.2-0.1,0.3c0,0.1,0,0.2,0,0.3v0.5c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3c0,0.1,0.1,0.2,0.2,0.2
s0.1,0.1,0.2,0.2c0.1,0,0.2,0.1,0.3,0.1s0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2,0.1-0.3s0-0.2,0-0.3V115.3z"/>
<path fill="#FFFFFF" d="M68.4,115.8h-0.8v1.6h-0.5v-3.9h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.4c0,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2l0.8,1.7
l0,0h-0.5L68.4,115.8z M67.7,115.4h0.7c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2s-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3-0.1h-0.7V115.4z"/>
<path fill="#FFFFFF" d="M184.1,49.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7c-0.2-0.2-0.5-0.2-0.9-0.2h-1v1.8h1.1
C183.6,49.7,183.9,49.6,184.1,49.5z"/>
<path fill="#FFFFFF" d="M183.6,50.7h-1.5v2.1h1.3c0.4,0,0.7-0.1,0.9-0.3c0.2-0.2,0.3-0.4,0.3-0.7c0-0.4-0.1-0.6-0.3-0.8
C184.3,50.8,184,50.7,183.6,50.7z"/>
<path fill="#FFFFFF" d="M188.5,47.4c-1.3-2.9-4.8-4.2-7.7-2.9l-1.5,0.7c-2.9,1.3-4.2,4.8-2.9,7.7l6.2,13.9l12.1-5.5L188.5,47.4z
M185.5,53.6c-0.5,0.4-1.1,0.5-2,0.5H180v-0.9l0.8-0.2v-5.2l-0.8-0.2v-0.9h0.8h2.5c0.9,0,1.5,0.2,2,0.5c0.5,0.3,0.7,0.8,0.7,1.5
c0,0.3-0.1,0.6-0.3,0.9c-0.2,0.3-0.4,0.5-0.8,0.6c0.4,0.1,0.8,0.3,1,0.6c0.2,0.3,0.3,0.7,0.3,1.1C186.2,52.7,186,53.2,185.5,53.6z"
/>
<path fill="#FFFFFF" d="M157.7,98.3h-0.6l-0.1-0.5c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3-0.1-0.4-0.1c-0.3,0-0.6,0.1-0.8,0.4
c-0.2,0.2-0.3,0.6-0.3,1V99c0,0.4,0.1,0.7,0.3,1c0.2,0.2,0.4,0.4,0.8,0.4c0.2,0,0.3,0,0.4-0.1c0.1,0,0.2-0.1,0.3-0.2l0.1-0.5h0.6
v0.8c-0.2,0.2-0.4,0.3-0.6,0.4c-0.2,0.1-0.5,0.2-0.8,0.2c-0.5,0-1-0.2-1.3-0.5c-0.3-0.4-0.5-0.8-0.5-1.4v-0.1c0-0.6,0.2-1,0.5-1.4
c0.3-0.4,0.8-0.5,1.3-0.5c0.3,0,0.6,0.1,0.8,0.2c0.2,0.1,0.4,0.3,0.6,0.4V98.3z"/>
<path fill="#FFFFFF" d="M158.4,100.4l0.3,0l1.2-3.4h0.8l1.2,3.4l0.3,0v0.5h-1.3v-0.5l0.3,0l-0.2-0.5h-1.3l-0.2,0.5l0.3,0v0.5h-1.3
V100.4z M159.8,99.3h0.9l-0.4-1.4h0L159.8,99.3z"/>
<path fill="#FFFFFF" d="M162.7,100.9v-0.5l0.4-0.1v-2.8l-0.4-0.1V97h0.4h0.8h0.4v0.5l-0.4,0.1v2.7h1.1l0-0.5h0.6v1.1H162.7z"/>
<path fill="#FFFFFF" d="M166.2,100.9v-0.5l0.4-0.1v-2.8l-0.4-0.1V97h0.4h0.8h0.4v0.5l-0.4,0.1v2.7h1.1l0-0.5h0.6v1.1H166.2z"/>
<path fill="#FFFFFF" d="M169.8,97.5V97h1.6v0.5l-0.4,0.1v2.8l0.4,0.1v0.5h-1.6v-0.5l0.4-0.1v-2.8L169.8,97.5z"/>
<path fill="#FFFFFF" d="M175.6,99c0,0.6-0.2,1-0.5,1.4c-0.3,0.4-0.8,0.6-1.3,0.6c-0.5,0-1-0.2-1.3-0.6c-0.3-0.4-0.5-0.8-0.5-1.4
v-0.1c0-0.6,0.2-1,0.5-1.4c0.3-0.4,0.7-0.6,1.3-0.6c0.5,0,1,0.2,1.3,0.6C175.4,97.9,175.6,98.4,175.6,99L175.6,99z M174.8,98.9
c0-0.4-0.1-0.7-0.3-1c-0.2-0.3-0.4-0.4-0.7-0.4s-0.6,0.1-0.7,0.4c-0.2,0.2-0.2,0.6-0.2,1V99c0,0.4,0.1,0.7,0.2,1
c0.2,0.3,0.4,0.4,0.7,0.4c0.3,0,0.6-0.1,0.7-0.4C174.7,99.7,174.8,99.4,174.8,98.9L174.8,98.9z"/>
<path fill="#FFFFFF" d="M178.1,97c0.4,0,0.8,0.1,1.1,0.3c0.3,0.2,0.4,0.5,0.4,0.9c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.6,0.3-1.1,0.3
h-0.7v0.9l0.4,0.1v0.5h-1.6v-0.5l0.4-0.1v-2.8l-0.4-0.1V97h0.4H178.1z M177.4,98.9h0.7c0.2,0,0.4-0.1,0.5-0.2
c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.3-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2h-0.7V98.9z"/>
<path fill="#FFFFFF" d="M182.6,99.2h-1.3v1.1h1.3l0-0.5h0.6v1.1h-3.1v-0.5l0.4-0.1v-2.8l-0.4-0.1V97h0.4h2.7v1.1h-0.6l0-0.5h-1.2v1
h1.3V99.2z"/>
<path fill="#FFFFFF" d="M155.8,105.7l0,0.7c0.1-0.2,0.3-0.4,0.5-0.6c0.2-0.1,0.5-0.2,0.8-0.2c0.3,0,0.5,0.1,0.7,0.2
s0.3,0.3,0.4,0.5c0.1-0.2,0.3-0.4,0.5-0.5c0.2-0.1,0.4-0.2,0.7-0.2c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.2,0.4,0.3
c0.1,0.1,0.2,0.3,0.3,0.6c0.1,0.2,0.1,0.5,0.1,0.8v4.6h-1.3v-4.6c0-0.3-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.1-0.4-0.1
c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.2,0.2-0.2,0.3v4.8H157v-4.6c0-0.2,0-0.4-0.1-0.5c-0.1-0.1-0.2-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0.1
c-0.1,0.1-0.2,0.2-0.2,0.3v4.8h-1.3v-6.3H155.8z"/>
<path fill="#FFFFFF" d="M162.8,105.7h3.3v5.1h1.9v1.1h-5.2v-1.1h1.9v-4h-1.9V105.7z M164.7,104.1c0-0.2,0.1-0.4,0.2-0.5
c0.1-0.1,0.3-0.2,0.6-0.2c0.3,0,0.5,0.1,0.6,0.2c0.1,0.1,0.2,0.3,0.2,0.5c0,0.2-0.1,0.4-0.2,0.5c-0.1,0.1-0.3,0.2-0.6,0.2
c-0.3,0-0.4-0.1-0.6-0.2C164.7,104.5,164.7,104.3,164.7,104.1z"/>
<path fill="#FFFFFF" d="M171.4,105.7l0.1,0.9c0.2-0.3,0.5-0.6,0.8-0.7c0.3-0.2,0.7-0.3,1.1-0.3c0.3,0,0.6,0,0.9,0.1
c0.3,0.1,0.5,0.2,0.7,0.4c0.2,0.2,0.3,0.5,0.4,0.8c0.1,0.3,0.2,0.7,0.2,1.1v3.9h-1.4v-3.9c0-0.3,0-0.5-0.1-0.6
c-0.1-0.2-0.1-0.3-0.3-0.4c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3-0.1-0.5-0.1c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.5,0.5v4.5
h-1.4v-6.3H171.4z"/>
<path fill="#FFFFFF" d="M178,105.7h3.3v5.1h1.9v1.1H178v-1.1h1.9v-4H178V105.7z M179.8,104.1c0-0.2,0.1-0.4,0.2-0.5
c0.1-0.1,0.3-0.2,0.6-0.2c0.3,0,0.5,0.1,0.6,0.2c0.1,0.1,0.2,0.3,0.2,0.5c0,0.2-0.1,0.4-0.2,0.5c-0.1,0.1-0.3,0.2-0.6,0.2
c-0.3,0-0.4-0.1-0.6-0.2C179.9,104.5,179.8,104.3,179.8,104.1z"/>
2016-10-13 08:30:19 +02:00
<path class="sim-theme-glow" fill="#FFFFFF" d="M165.9,82.8h-2.1c-0.3,0-0.6,0.3-0.6,0.6c0,0,0,1.8,0,1.6c0-1.3-1.1-2.4-2.4-2.4c-1.3,0-2.4,1.1-2.4,2.4
2016-10-13 07:44:05 +02:00
c0,0.2,0,1.6,0,2.6l-2.8,2.1c-1.9,1.5-0.9,4.5,1.5,4.5h0.6c0.2-1.8,0.8-3.9,1.9-5.3h0.1h2.5c1.1,1.3,1.6,3.5,1.9,5.3l0.8,0
c0.9,0,1.6-0.7,1.6-1.6v-6.1v-3.1C166.5,83.1,166.2,82.8,165.9,82.8z M159.9,84.1h2v1.3c0,0.4-0.3,0.8-0.8,0.8h-0.4
c-0.4,0-0.8-0.3-0.8-0.8V84.1z M159.4,88l0.9-1.7l0.5,1.7H159.4z M160.9,88l0.5-1.7l0.9,1.7H160.9z M163.6,86.5v-2.9h2.4v2.9H163.6
z"/>
2016-10-13 08:30:19 +02:00
<path class="sim-theme-glow" fill="#FFFFFF" d="M162.8,94.3c-1.3-0.9-2.3-3.3-3.2-5.3v5.3L162.8,94.3z"/>
2016-10-13 07:44:05 +02:00
<polygon fill="#FFFFFF" points="120.5,134.9 106,134.9 93.1,121.7 59.6,121.6 59.6,120.9 93.4,120.9 106.3,134.2 120.5,134.2 "/>
<polygon fill="#FFFFFF" points="110.5,146.8 103.5,146.8 102.1,145.3 102.6,144.7 103.8,146 110.5,146 "/>
<path fill="#FFFFFF" d="M112.7,146.9v1.6h-0.5v-3.9h1.3c0.2,0,0.3,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5s0,0.4-0.1,0.5c-0.1,0.1-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1H112.7z
M112.7,146.5h0.8c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1s0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3
c0-0.1-0.1-0.2-0.2-0.2s-0.2-0.1-0.3-0.2c-0.1,0-0.2-0.1-0.3-0.1h-0.8V146.5z"/>
<path fill="#FFFFFF" d="M116.7,146.9H116v1.6h-0.5v-3.9h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.4c0,0.1-0.1,0.2-0.2,0.3s-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2l0.8,1.7l0,0h-0.5
L116.7,146.9z M116,146.5h0.7c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2s-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3-0.1H116V146.5z"/>
<path fill="#FFFFFF" d="M121.3,146.8c0,0.1,0,0.3,0,0.4c0,0.1-0.1,0.3-0.1,0.4c0,0.1-0.1,0.3-0.2,0.4c-0.1,0.1-0.2,0.2-0.3,0.3
s-0.2,0.2-0.3,0.2c-0.1,0-0.3,0.1-0.4,0.1s-0.3,0-0.4-0.1c-0.1,0-0.2-0.1-0.3-0.2s-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.2-0.2-0.4
c0-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0-0.4v-0.4c0-0.1,0-0.3,0-0.4c0-0.1,0.1-0.3,0.1-0.4c0-0.1,0.1-0.3,0.2-0.4
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.2,0.3-0.2c0.1,0,0.3-0.1,0.4-0.1c0.2,0,0.3,0,0.4,0.1c0.1,0.1,0.2,0.1,0.3,0.2
s0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.2,0.2,0.4c0,0.1,0.1,0.3,0.1,0.4c0,0.1,0,0.3,0,0.4V146.8z M120.8,146.3c0-0.1,0-0.2,0-0.3
c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.1-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.3-0.1
c-0.1,0-0.2,0-0.3,0.1c-0.1,0-0.2,0.1-0.2,0.2c-0.1,0.1-0.1,0.2-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2-0.1,0.3
c0,0.1,0,0.2,0,0.3v0.5c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3c0,0.1,0.1,0.2,0.2,0.2
c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0,0.2,0.1,0.3,0.1s0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.1,0.2-0.2
c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2,0.1-0.3s0-0.2,0-0.3V146.3z"/>
<path fill="#FFFFFF" d="M122.5,148.1h2v0.4h-2.6l0-0.4l2-3.1H122v-0.4h2.5l0,0.4L122.5,148.1z"/>
<path fill="#FFFFFF" d="M127.6,146.7h-1.6v1.4h1.9v0.4h-2.4v-3.9h2.4v0.4h-1.9v1.3h1.6V146.7z"/>
<path fill="#FFFFFF" d="M130.8,147.5c0-0.1,0-0.2-0.1-0.3s-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1s-0.2-0.1-0.3-0.1
c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.3-0.1-0.4s0-0.3,0.1-0.5
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.2,0,0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2
s0.2,0.2,0.3,0.4s0.1,0.3,0.1,0.5h-0.5c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.2-0.2
c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3
c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0,0.2,0.1,0.3,0.1c0.1,0.1,0.2,0.1,0.3,0.2s0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0,0.2,0,0.3c0,0.2,0,0.3-0.1,0.5
c-0.1,0.1-0.2,0.2-0.3,0.3s-0.3,0.2-0.4,0.2c-0.2,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1c-0.2-0.1-0.3-0.1-0.4-0.2
c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5h0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1
c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2C130.8,147.7,130.8,147.6,130.8,147.5z"/>
<path fill="#FFFFFF" d="M134.1,147.5c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1s-0.2-0.1-0.3-0.1
c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.3-0.1-0.4s0-0.3,0.1-0.5
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.2,0,0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2
s0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5h-0.5c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.2-0.2
c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3
c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0,0.2,0.1,0.3,0.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0,0.2,0,0.3
c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3s-0.3,0.2-0.4,0.2c-0.2,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1
c-0.2-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5h0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2
c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2
C134.1,147.7,134.1,147.6,134.1,147.5z"/>
<path fill="#FFFFFF" d="M137.9,146.8c0,0.1,0,0.3,0,0.4c0,0.1-0.1,0.3-0.1,0.4c0,0.1-0.1,0.3-0.2,0.4c-0.1,0.1-0.2,0.2-0.3,0.3
s-0.2,0.2-0.3,0.2c-0.1,0-0.3,0.1-0.4,0.1s-0.3,0-0.4-0.1c-0.1,0-0.2-0.1-0.3-0.2s-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.2-0.2-0.4
c0-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0-0.4v-0.4c0-0.1,0-0.3,0-0.4c0-0.1,0.1-0.3,0.1-0.4c0-0.1,0.1-0.3,0.2-0.4
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.2,0.3-0.2c0.1,0,0.3-0.1,0.4-0.1s0.3,0,0.4,0.1c0.1,0.1,0.2,0.1,0.3,0.2s0.2,0.2,0.3,0.3
c0.1,0.1,0.1,0.2,0.2,0.4c0,0.1,0.1,0.3,0.1,0.4s0,0.3,0,0.4V146.8z M137.4,146.3c0-0.1,0-0.2,0-0.3c0-0.1,0-0.2-0.1-0.3
c0-0.1-0.1-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.1-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1
s-0.2,0.1-0.2,0.2c-0.1,0.1-0.1,0.2-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2-0.1,0.3c0,0.1,0,0.2,0,0.3v0.5c0,0.1,0,0.2,0,0.3
c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3c0,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.1,0.1,0.2,0.2s0.2,0.1,0.3,0.1s0.2,0,0.3-0.1
c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2,0.1-0.3c0-0.1,0-0.2,0-0.3V146.3z"/>
<path fill="#FFFFFF" d="M140,146.9h-0.8v1.6h-0.5v-3.9h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.4c0,0.1-0.1,0.2-0.2,0.3s-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2l0.8,1.7l0,0h-0.5
L140,146.9z M139.2,146.5h0.7c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3-0.1h-0.7V146.5z"/>
<polygon fill="#FFFFFF" points="74.3,115.9 71.3,115.9 71.3,115.2 74,115.2 74.5,114.6 74.5,107.2 75.2,107.2 75.2,115 "/>
<path fill="#FFFFFF" d="M116.3,54l0,2.7c0,0.2,0,0.4-0.1,0.5s-0.2,0.3-0.3,0.4s-0.2,0.2-0.4,0.3c-0.2,0.1-0.3,0.1-0.5,0.1
c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.2-0.1-0.3-0.1-0.5l0-2.7h0.5l0,2.7
c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.2,0.3c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.3-0.1
c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.2-0.3s0.1-0.2,0.1-0.3l0-2.7H116.3z"/>
<path fill="#FFFFFF" d="M119.2,56.9c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1s-0.2-0.1-0.3-0.1
c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.3-0.1-0.4c0-0.2,0-0.3,0.1-0.5
c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2s0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1c0.2,0.1,0.3,0.1,0.4,0.2s0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5h-0.5c0-0.1,0-0.2-0.1-0.3s-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.3-0.1
c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0.1,0.3
c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0,0.2,0,0.3c0,0.2,0,0.3-0.1,0.5
c-0.1,0.1-0.2,0.2-0.3,0.3s-0.3,0.2-0.4,0.2c-0.2,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1c-0.2-0.1-0.3-0.1-0.4-0.2
c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5h0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1
s0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2C119.1,57.1,119.2,57.1,119.2,56.9z"/>
<path fill="#FFFFFF" d="M120.4,57.9V54h1.2c0.2,0,0.3,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.3
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.3c0,0.1-0.1,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.2s-0.2,0.1-0.2,0.1
c0.1,0,0.2,0.1,0.3,0.1c0.1,0.1,0.2,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.3c0,0.2,0,0.3-0.1,0.5
s-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1H120.4z M120.9,55.7h0.7c0.1,0,0.2,0,0.3,0
c0.1,0,0.2-0.1,0.2-0.1c0.1-0.1,0.1-0.1,0.2-0.2s0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.1-0.2-0.2
c-0.1,0-0.2-0.1-0.2-0.1c-0.1,0-0.2,0-0.3,0h-0.7V55.7z M120.9,56.1v1.4h0.8c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.2-0.1
c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.1-0.1-0.2-0.1
s-0.2-0.1-0.3-0.1H120.9z"/>
<polygon fill="#FFFFFF" points="126.6,56 124.6,56 124.6,55.2 126.2,55.2 126.7,54.7 126.7,39 127.5,39 127.5,55.1 "/>
<polygon fill="#FFFFFF" points="153.8,33.2 151,33.2 151,34 153.5,34 154,34.5 154,45.7 153.5,46.2 152.9,46.2 152.9,47 153.8,47
154.8,46 154.8,34.2 "/>
<polygon fill="#FFFFFF" points="169.8,125.6 159,125.6 159,126.4 169.5,126.4 180.4,137.3 186.4,137.3 190.8,141.8 190.8,147.2
191.6,147.2 191.6,141.4 186.7,136.5 180.7,136.5 "/>
<polygon fill="#FFFFFF" points="184.5,120.1 172.4,120.1 172.4,119.3 184.8,119.3 "/>
<polygon fill="#FFFFFF" points="183.3,17.6 180.8,17.6 180.8,15.1 180.5,15.1 180.5,17.6 178,17.6 178,17.8 180.5,17.8 180.5,20.6
180.8,20.6 180.8,17.8 183.3,17.8 "/>
<path fill="#FFFFFF" d="M138.1,47.1h-0.8v1.6h-0.5v-3.9h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.4
c0.1,0.1,0.1,0.3,0.1,0.5c0,0.1,0,0.2-0.1,0.4c0,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0.2l0.8,1.7
l0,0h-0.5L138.1,47.1z M137.3,46.6h0.7c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3-0.1h-0.7V46.6z"/>
<path fill="#FFFFFF" d="M142.3,46.8h-1.6v1.4h1.9v0.4h-2.4v-3.9h2.4v0.4h-1.9v1.3h1.6V46.8z"/>
<path fill="#FFFFFF" d="M145.5,47.7c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1
c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.1-0.3-0.1-0.4
s0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.2,0,0.3-0.1,0.5-0.1c0.2,0,0.3,0,0.5,0.1
c0.2,0.1,0.3,0.1,0.4,0.2s0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5h-0.5c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2
c-0.1-0.1-0.2-0.1-0.2-0.2c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2
c0,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1
c0.1,0,0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.3,0.1c0.1,0.1,0.2,0.1,0.3,0.2s0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.1,0.3c0,0.1,0,0.2,0,0.3
c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0-0.5-0.1
c-0.2-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5h0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2
c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.1-0.1,0.2-0.2
C145.5,47.9,145.5,47.8,145.5,47.7z"/>
<path fill="#FFFFFF" d="M148.9,46.8h-1.6v1.4h1.9v0.4h-2.4v-3.9h2.4v0.4h-1.9v1.3h1.6V46.8z"/>
<path fill="#FFFFFF" d="M152.8,45.2h-1.2v3.5H151v-3.5h-1.2v-0.4h2.9V45.2z"/>
<polygon fill="#FFFFFF" points="70.8,77.8 70,80.3 71.6,80.3 70.8,77.8 "/>
<path fill="#FFFFFF" d="M76.5,77.7l-8.6-14.3l-11.4,6.8L65,84.5c1.6,2.8,5.2,3.7,8,2l1.4-0.8C77.2,84,78.1,80.5,76.5,77.7z
M74.3,83.4h-2.5v-0.9l0.5-0.1l-0.3-1h-2.4l-0.3,1l0.5,0.1v0.9h-2.5v-0.9l0.5-0.1l2.2-6.3h1.5l2.2,6.3l0.5,0.1V83.4z"/>
<path fill="#FFFFFF" d="M46.6,100h-1.3l-0.3,1h-0.5l1.3-3.9h0.4l1.2,3.9h-0.5L46.6,100z M45.4,99.5h1L46,97.9L45.4,99.5z"/>
<path fill="#FFFFFF" d="M51.7,99.5c0,0.2,0,0.5-0.1,0.7c-0.1,0.2-0.1,0.4-0.2,0.5c-0.1,0.1-0.2,0.2-0.4,0.3s-0.3,0.1-0.5,0.1
c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c-0.1-0.2-0.1-0.4-0.1-0.7v-0.9c0-0.2,0-0.5,0.1-0.7
c0.1-0.2,0.1-0.4,0.2-0.5c0.1-0.1,0.2-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1c0.2,0.1,0.3,0.2,0.4,0.3
c0.1,0.1,0.2,0.3,0.2,0.5c0.1,0.2,0.1,0.4,0.1,0.7V99.5z M49.7,99.4l1.5-1.2c0-0.3-0.1-0.5-0.2-0.6c-0.1-0.1-0.3-0.2-0.5-0.2
c-0.3,0-0.5,0.1-0.6,0.3c-0.1,0.2-0.2,0.4-0.2,0.8V99.4z M51.2,98.7l-1.5,1.2c0,0.3,0.1,0.4,0.2,0.6c0.1,0.1,0.3,0.2,0.5,0.2
c0.3,0,0.5-0.1,0.6-0.3c0.1-0.2,0.2-0.4,0.2-0.8V98.7z"/>
<path fill="#FFFFFF" d="M203.5,100h-1.3l-0.3,1h-0.5l1.3-3.9h0.4l1.2,3.9h-0.5L203.5,100z M202.3,99.5h1l-0.5-1.7L202.3,99.5z"/>
<path fill="#FFFFFF" d="M207.7,101h-0.5v-3.3l-1,0.4v-0.5l1.5-0.6h0V101z"/>
<rect x="59.4" y="51.6" transform="matrix(0.8923 0.4514 -0.4514 0.8923 31.0258 -21.4341)" fill="#F9EBA7" width="2.1" height="5.4"/>
<rect x="69.8" y="56.9" transform="matrix(0.8923 0.4514 -0.4514 0.8923 34.5226 -25.5642)" fill="#F9EBA7" width="2.1" height="5.4"/>
<rect x="50.1" y="69.9" transform="matrix(0.8923 0.4514 -0.4514 0.8923 38.3019 -15.2737)" fill="#F9EBA7" width="2.1" height="5.4"/>
<rect x="60.5" y="75.2" transform="matrix(0.8923 0.4514 -0.4514 0.8923 41.7987 -19.4037)" fill="#F9EBA7" width="2.1" height="5.4"/>
<path id="BTN_A_BOX" fill="#BDD1CF" d="M63.6,76l-12.2-6.1c-0.5-0.3-0.7-0.9-0.5-1.5l6.2-12.3c0.3-0.5,0.9-0.7,1.5-0.5l12.2,6.1
c0.5,0.3,0.7,0.9,0.5,1.5l-6.2,12.3C64.8,76.1,64.1,76.3,63.6,76z"/>
<circle id="BTN_A" fill="#186A8C" cx="61.1" cy="65.9" r="4.9"/>
<circle fill="#1D1D1B" cx="58.6" cy="58" r="1.6"/>
<circle fill="#1D1D1B" cx="69" cy="63.3" r="1.6"/>
<circle fill="#1D1D1B" cx="53.3" cy="68.3" r="1.6"/>
<circle fill="#1D1D1B" cx="63.7" cy="73.6" r="1.6"/>
<rect x="179.7" y="56.7" transform="matrix(0.8998 -0.4362 0.4362 0.8998 -7.8105 84.8091)" fill="#F9EBA7" width="2.1" height="5.4"/>
<rect x="190.2" y="51.6" transform="matrix(0.8998 -0.4362 0.4362 0.8998 -4.5406 88.8767)" fill="#F9EBA7" width="2.1" height="5.4"/>
<rect x="188.7" y="75.2" transform="matrix(0.8998 -0.4362 0.4362 0.8998 -14.9765 90.5698)" fill="#F9EBA7" width="2.1" height="5.4"/>
<rect x="199.2" y="70.1" transform="matrix(0.8998 -0.4362 0.4362 0.8998 -11.7066 94.6374)" fill="#F9EBA7" width="2.1" height="5.4"/>
<path id="BTN_B_BOX" fill="#BDD1CF" d="M200,70L187.7,76c-0.5,0.3-1.2,0-1.4-0.5l-6-12.4c-0.3-0.5,0-1.2,0.5-1.4l12.3-5.9c0.5-0.3,1.2,0,1.4,0.5
l6,12.4C200.7,69.1,200.5,69.8,200,70z"/>
<circle id="BTN_B" fill="#D82E50" cx="190.4" cy="65.9" r="4.9"/>
<circle fill="#1D1D1B" cx="182.6" cy="63.1" r="1.6"/>
<circle fill="#1D1D1B" cx="193.1" cy="58" r="1.6"/>
<circle fill="#1D1D1B" cx="187.6" cy="73.6" r="1.6"/>
<circle fill="#1D1D1B" cx="198.1" cy="68.5" r="1.6"/>
<path fill="#BDD1CF" d="M151.7,39h-13.6c-0.6,0-1.1-0.5-1.1-1.1V24.1c0-0.6,0.5-1.1,1.1-1.1h13.6c0.6,0,1.1,0.5,1.1,1.1v13.7
C152.8,38.5,152.3,39,151.7,39z"/>
<circle fill="#53787C" cx="144.9" cy="31" r="4.9"/>
<rect x="156.9" y="33.6" fill="#1D1D1B" width="10.7" height="13.1"/>
</g>
<g id="EDGE_P0">
<path fill="#EFDA48" d="M17.1,97.1c-7.7,0-13.9,6.2-13.9,13.9S9.4,125,17.1,125S31,118.8,31,111.1S24.8,97.1,17.1,97.1z
M17.1,117.7c-3.7,0-6.6-3-6.6-6.6s3-6.6,6.6-6.6s6.6,3,6.6,6.6S20.7,117.7,17.1,117.7z"/>
</g>
<g id="EDGE_GND">
<path fill="#EFDA48" d="M71.8,3.4c-7.7,0-13.9,6.2-13.9,13.9s6.2,13.9,13.9,13.9s13.9-6.2,13.9-13.9S79.5,3.4,71.8,3.4z M71.8,24
c-3.7,0-6.6-3-6.6-6.6s3-6.6,6.6-6.6c3.7,0,6.6,3,6.6,6.6S75.5,24,71.8,24z"/>
</g>
<g id="EDGE_VCC">
<path fill="#EFDA48" d="M179.6,3.4c-7.7,0-13.9,6.2-13.9,13.9s6.2,13.9,13.9,13.9s13.9-6.2,13.9-13.9S187.3,3.4,179.6,3.4z
M179.6,24c-3.7,0-6.6-3-6.6-6.6s3-6.6,6.6-6.6c3.7,0,6.6,3,6.6,6.6S183.3,24,179.6,24z"/>
</g>
<g id="EDGE_P3">
<path fill="#EFDA48" d="M233.3,97.1c-7.7,0-13.9,6.2-13.9,13.9s6.2,13.9,13.9,13.9s13.9-6.2,13.9-13.9S241,97.1,233.3,97.1z
M233.3,117.7c-3.7,0-6.6-3-6.6-6.6c0-3.7,3-6.6,6.6-6.6c3.7,0,6.6,3,6.6,6.6C239.9,114.7,236.9,117.7,233.3,117.7z"/>
</g>
<g id="EDGE_P2">
<path fill="#EFDA48" d="M179.9,190.1c-7.7,0-13.9,6.2-13.9,13.9s6.2,13.9,13.9,13.9s13.9-6.2,13.9-13.9S187.6,190.1,179.9,190.1z
M179.9,210.7c-3.7,0-6.6-3-6.6-6.6s3-6.6,6.6-6.6c3.7,0,6.6,3,6.6,6.6S183.5,210.7,179.9,210.7z"/>
</g>
<g id="EDGE_P1">
<path fill="#EFDA48" d="M71.8,190.7c-7.7,0-13.9,6.2-13.9,13.9c0,7.7,6.2,13.9,13.9,13.9s13.9-6.2,13.9-13.9
C85.7,196.9,79.5,190.7,71.8,190.7z M71.8,211.2c-3.7,0-6.6-3-6.6-6.6c0-3.7,3-6.6,6.6-6.6s6.6,3,6.6,6.6
C78.4,208.3,75.5,211.2,71.8,211.2z"/>
</g>
<g id="motor">
<path id="C_GND1" fill="#EFDA48" d="M83.6,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S84.8,183.9,83.6,183.9z M83.6,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S84.2,187,83.6,187z"/>
<circle fill="#1D1D1B" cx="83.6" cy="186" r="1"/>
<path id="C_P0" fill="#EFDA48" d="M90.8,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S92,183.9,90.8,183.9z M90.8,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S91.4,187,90.8,187z"/>
<circle fill="#1D1D1B" cx="90.8" cy="186" r="1"/>
<path id="C_P2" fill="#EFDA48" d="M98,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S99.2,183.9,98,183.9z M98,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S98.6,187,98,187z"/>
<circle fill="#1D1D1B" cx="98" cy="186" r="1"/>
<path id="C_P4" fill="#EFDA48" d="M105.2,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S106.4,183.9,105.2,183.9z M105.2,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S105.8,187,105.2,187z"/>
<circle fill="#1D1D1B" cx="105.2" cy="186" r="1"/>
<path id="C_P6" fill="#EFDA48" d="M112.4,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S113.6,183.9,112.4,183.9z M112.4,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S113,187,112.4,187z"/>
<circle fill="#1D1D1B" cx="112.4" cy="186" r="1"/>
<path id="C_P8" fill="#EFDA48" d="M119.6,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1S120.8,183.9,119.6,183.9z M119.6,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S120.2,187,119.6,187z"/>
<circle fill="#1D1D1B" cx="119.6" cy="186" r="1"/>
<path id="C_GND2" fill="#EFDA48" d="M126.8,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1S128,183.9,126.8,183.9z M126.8,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S127.4,187,126.8,187z"/>
<circle fill="#1D1D1B" cx="126.8" cy="186" r="1"/>
<path id="C_P10" fill="#EFDA48" d="M134,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S135.2,183.9,134,183.9z M134,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S134.5,187,134,187z"/>
<circle fill="#1D1D1B" cx="134" cy="186" r="1"/>
<path id="C_P12" fill="#EFDA48" d="M141.2,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S142.4,183.9,141.2,183.9z M141.2,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S141.7,187,141.2,187z"/>
<circle fill="#1D1D1B" cx="141.2" cy="186" r="1"/>
<path id="C_P14" fill="#EFDA48" d="M148.4,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S149.6,183.9,148.4,183.9z M148.4,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S148.9,187,148.4,187z"/>
<circle fill="#1D1D1B" cx="148.4" cy="186" r="1"/>
<path id="C_P16" fill="#EFDA48" d="M155.6,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S156.8,183.9,155.6,183.9z M155.6,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S156.1,187,155.6,187z"/>
<circle fill="#1D1D1B" cx="155.6" cy="186" r="1"/>
<path id="C_P20" fill="#EFDA48" d="M162.8,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S163.9,183.9,162.8,183.9z M162.8,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S163.3,187,162.8,187z"/>
<circle fill="#1D1D1B" cx="162.8" cy="186" r="1"/>
<path id="C_VCC1" fill="#EFDA48" d="M170,183.9c-1.2,0-2.1,1-2.1,2.1s1,2.1,2.1,2.1s2.1-1,2.1-2.1S171.1,183.9,170,183.9z M170,187
c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S170.5,187,170,187z"/>
<circle fill="#1D1D1B" cx="170" cy="186" r="1"/>
<path id="C_VCC2" fill="#EFDA48" d="M83.6,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C85.8,177.6,84.8,176.6,83.6,176.6z
M83.6,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S84.2,179.8,83.6,179.8z"/>
<circle fill="#1D1D1B" cx="83.6" cy="178.8" r="1"/>
<path id="C_P1" fill="#EFDA48" d="M90.8,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C93,177.6,92,176.6,90.8,176.6z
M90.8,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S91.4,179.8,90.8,179.8z"/>
<circle fill="#1D1D1B" cx="90.8" cy="178.8" r="1"/>
<path id="C_P22" fill="#EFDA48" d="M98,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C100.2,177.6,99.2,176.6,98,176.6z
M98,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S98.6,179.8,98,179.8z"/>
<circle fill="#1D1D1B" cx="98" cy="178.8" r="1"/>
<path id="C_P5" fill="#EFDA48" d="M105.2,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C107.3,177.6,106.4,176.6,105.2,176.6
z M105.2,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S105.8,179.8,105.2,179.8z"/>
<circle fill="#1D1D1B" cx="105.2" cy="178.8" r="1"/>
<path id="C_P7" fill="#EFDA48" d="M112.4,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C114.5,177.6,113.6,176.6,112.4,176.6
z M112.4,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S113,179.8,112.4,179.8z"/>
<circle fill="#1D1D1B" cx="112.4" cy="178.8" r="1"/>
<path id="C_P9" fill="#EFDA48" d="M119.6,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1
C121.7,177.6,120.8,176.6,119.6,176.6z M119.6,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S120.2,179.8,119.6,179.8z"/>
<circle fill="#1D1D1B" cx="119.6" cy="178.8" r="1"/>
<path id="C_GND3" fill="#EFDA48" d="M126.8,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1
C128.9,177.6,128,176.6,126.8,176.6z M126.8,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S127.4,179.8,126.8,179.8z"/>
<circle fill="#1D1D1B" cx="126.8" cy="178.8" r="1"/>
<path id="C_P11" fill="#EFDA48" d="M134,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C136.1,177.6,135.2,176.6,134,176.6z
M134,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S134.5,179.8,134,179.8z"/>
<circle fill="#1D1D1B" cx="134" cy="178.8" r="1"/>
<path id="C_P13" fill="#EFDA48" d="M141.2,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C143.3,177.6,142.4,176.6,141.2,176.6
z M141.2,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S141.7,179.8,141.2,179.8z"/>
<circle fill="#1D1D1B" cx="141.2" cy="178.8" r="1"/>
<path id="C_P15" fill="#EFDA48" d="M148.4,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C150.5,177.6,149.6,176.6,148.4,176.6
z M148.4,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S148.9,179.8,148.4,179.8z"/>
<circle fill="#1D1D1B" cx="148.4" cy="178.8" r="1"/>
<path id="C_P21" fill="#EFDA48" d="M155.6,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C157.7,177.6,156.8,176.6,155.6,176.6
z M155.6,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S156.1,179.8,155.6,179.8z"/>
<circle fill="#1D1D1B" cx="155.6" cy="178.8" r="1"/>
<path id="C_P19" fill="#EFDA48" d="M162.8,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C164.9,177.6,163.9,176.6,162.8,176.6
z M162.8,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1c0.6,0,1,0.5,1,1S163.3,179.8,162.8,179.8z"/>
<circle fill="#1D1D1B" cx="162.8" cy="178.8" r="1"/>
<path id="C_GND4" fill="#EFDA48" d="M170,176.6c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C172.1,177.6,171.1,176.6,170,176.6z
M170,179.8c-0.6,0-1-0.5-1-1s0.5-1,1-1s1,0.5,1,1S170.5,179.8,170,179.8z"/>
<circle fill="#1D1D1B" cx="170" cy="178.8" r="1"/>
<path id="M_GND1" fill="#EFDA48" d="M112.4,162.8c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C114.5,163.8,113.6,162.8,112.4,162.8
z M112.4,166c-0.6,0-1-0.5-1-1c0-0.6,0.5-1,1-1c0.6,0,1,0.5,1,1C113.4,165.5,113,166,112.4,166z"/>
<circle fill="#1D1D1B" cx="112.4" cy="165" r="1"/>
<path id="M_OUT1" fill="#EFDA48" d="M119.6,162.8c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1
C121.7,163.8,120.8,162.8,119.6,162.8z M119.6,166c-0.6,0-1-0.5-1-1c0-0.6,0.5-1,1-1c0.6,0,1,0.5,1,1
C120.6,165.5,120.2,166,119.6,166z"/>
<circle fill="#1D1D1B" cx="119.6" cy="165" r="1"/>
<path id="M_OUT2" fill="#EFDA48" d="M126.8,162.8c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1c1.2,0,2.1-1,2.1-2.1
C128.9,163.8,128,162.8,126.8,162.8z M126.8,166c-0.6,0-1-0.5-1-1c0-0.6,0.5-1,1-1c0.6,0,1,0.5,1,1
C127.8,165.5,127.4,166,126.8,166z"/>
<circle fill="#1D1D1B" cx="126.8" cy="165" r="1"/>
<path id="M_GND2" fill="#EFDA48" d="M134,162.8c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C136.1,163.8,135.2,162.8,134,162.8z
M134,166c-0.6,0-1-0.5-1-1c0-0.6,0.5-1,1-1c0.6,0,1,0.5,1,1C135,165.5,134.5,166,134,166z"/>
<circle fill="#1D1D1B" cx="134" cy="165" r="1"/>
<path id="M_VM" fill="#EFDA48" d="M141.2,162.8c-1.2,0-2.1,1-2.1,2.1c0,1.2,1,2.1,2.1,2.1s2.1-1,2.1-2.1C143.3,163.8,142.4,162.8,141.2,162.8
z M141.2,166c-0.6,0-1-0.5-1-1c0-0.6,0.5-1,1-1c0.6,0,1,0.5,1,1C142.2,165.5,141.7,166,141.2,166z"/>
<circle fill="#1D1D1B" cx="141.2" cy="165" r="1"/>
</g>
<g id="rgbled">
<g>
<rect x="120.6" y="130.6" fill="#FFFFFF" width="10.8" height="10.5"/>
<circle id="rgbledcircle" fill="#BDD1CF" cx="126" cy="135.9" r="4.1"/>
</g>
</g>
<g id="a0">
<rect x="36.6" y="78" transform="matrix(-0.7113 -0.7029 0.7029 -0.7113 5.9446 184.6141)" fill="#FFFFFF" width="8.6" height="26.1"/>
<circle id="G_A0_GND" fill="#BDD1CF" cx="47.9" cy="84.2" r="1.2"/>
<circle id="G_A0_VCC" fill="#BDD1CF" cx="43.1" cy="88.8" r="1.2"/>
<circle id="G_A0_SDA" fill="#BDD1CF" cx="38.8" cy="93.1" r="1.2"/>
<circle id="G_A0_SCL" fill="#BDD1CF" cx="33.9" cy="98" r="1.2"/>
</g>
<g id="a1">
<rect x="206.6" y="77.1" transform="matrix(0.7113 -0.7029 0.7029 0.7113 -2.4835 174.2752)" fill="#FFFFFF" width="8.6" height="26.1"/>
<circle id="G_A1_RX" fill="#BDD1CF" cx="203.9" cy="83.2" r="1.2"/>
<circle id="G_A1_TX" fill="#BDD1CF" cx="208.7" cy="87.9" r="1.2"/>
<circle id="G_A1_VCC" fill="#BDD1CF" cx="213" cy="92.2" r="1.2"/>
<circle id="G_A1_GND" fill="#BDD1CF" cx="217.9" cy="97.1" r="1.2"/>
</g>
</svg>
`
const pinNames = [
2016-10-13 11:16:10 +02:00
"EXT_PWR", "SPKR", "BTN_A", "BTN_B",
"EDGE_P0", "EDGE_P1", "EDGE_P2", "EDGE_P3", "EDGE_GND", "EDGE_VCC",
"C_GND1", "C_GND2", "C_GND3", "C_GND4", "C_VCC1", "C_VCC2",
"C_P0", "C_P2", "C_P4", "C_P6", "C_P8", "C_P10", "C_P12", "C_P14", "C_P16", "C_P20",
"C_P1", "C_P22", "C_P5", "C_P7", "C_P9", "C_P11", "C_P13", "C_P15", "C_P21", "C_P19",
"M_GND1", "M_GND2", "M_OUT1", "M_OUT2", "M_VM",
"G_A0_GND", "G_A0_VCC", "G_A0_SDA", "G_A0_SCL",
"G_A1_RX", "G_A1_TX", "G_A1_VCC", "G_A1_GND"
];
const pinTitles = [
2016-10-13 11:16:10 +02:00
"External Power", "Speaker", "Button A", "Button B",
"0, ANALOG IN", "1, ANALOG IN", "2, ANALOG IN", "3, ANALOG IN", "GND", "+3v3",
"GND", "GND", "GND", "GND", "+3v3", "+3v3",
"C0, ANALOG IN", "C2, ANALOG IN", "C4", "C6", "C8", "C10", "C12", "C14", "C16", "C18",
"C1, ANALOG IN", "C3, ANALOG IN", "C5", "C7", "C9", "C11", "C13", "C15", "C17", "C19",
"GND", "GND", "MOTOR1", "MOTOR2", "MOTOR VM",
"GND", "+3v3", "C18, I2C - SDA", "C19, I2C - SCL",
"C16, Serial - RX", "C17, Serial - TX", "+3v3", "GND"
];
2016-10-13 07:44:05 +02:00
const MB_WIDTH = 251.8;
2016-10-17 05:25:55 +02:00
const MB_HEIGHT = 222.2;
2016-03-11 01:24:11 +01:00
export interface IBoardTheme {
accent?: string;
display?: string;
pin?: string;
pinTouched?: string;
pinActive?: string;
ledOn?: string;
ledOff?: string;
buttonOuter?: string;
2016-10-13 07:44:05 +02:00
buttonUps: string[];
2016-03-11 01:24:11 +01:00
buttonDown?: string;
2016-03-18 21:55:07 +01:00
virtualButtonOuter?: string;
virtualButtonUp?: string;
virtualButtonDown?: string;
2016-05-05 08:31:55 +02:00
lightLevelOn?: string;
2016-03-11 22:17:49 +01:00
lightLevelOff?: string;
2016-03-11 01:24:11 +01:00
}
2016-09-27 00:05:06 +02:00
export var themes: IBoardTheme[] = ["#3ADCFE"].map(accent => {
2016-03-11 01:24:11 +01:00
return {
accent: accent,
pin: "#D4AF37",
pinTouched: "#FFA500",
2016-05-05 08:31:55 +02:00
pinActive: "#FF5500",
2016-09-27 00:10:37 +02:00
ledOn: "#ff7777",
2016-10-13 08:40:33 +02:00
ledOff: "#fff",
2016-03-11 01:24:11 +01:00
buttonOuter: "#979797",
2016-10-13 07:44:05 +02:00
buttonUps: ["#186A8C", "#D82E50"],
2016-03-11 01:24:11 +01:00
buttonDown: "#FFA500",
2016-09-27 20:00:21 +02:00
virtualButtonDown: "#FFA500",
2016-03-18 21:55:07 +01:00
virtualButtonOuter: "#333",
virtualButtonUp: "#fff",
2016-03-11 22:17:49 +01:00
lightLevelOn: "yellow",
lightLevelOff: "#555"
2016-05-05 08:31:55 +02:00
}
});
2016-03-11 01:24:11 +01:00
2016-05-05 08:31:55 +02:00
export function randomTheme(): IBoardTheme {
2016-03-11 01:24:11 +01:00
return themes[Math.floor(Math.random() * themes.length)];
}
export interface IBoardProps {
runtime?: pxsim.Runtime;
2016-03-11 01:24:11 +01:00
theme?: IBoardTheme;
2016-05-05 08:31:55 +02:00
disableTilt?: boolean;
wireframe?: boolean;
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
export class MicrobitBoardSvg implements BoardView {
2016-05-05 08:31:55 +02:00
public element: SVGSVGElement;
2016-03-24 21:56:51 +01:00
private style: SVGStyleElement;
2016-05-05 08:31:55 +02:00
private defs: SVGDefsElement;
private g: SVGGElement;
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private buttons: SVGElement[];
private buttonsOuter: SVGElement[];
private pins: SVGElement[];
private pinGradients: SVGLinearGradientElement[];
private pinTexts: SVGTextElement[];
private ledsOuter: SVGElement[];
private leds: SVGElement[];
private systemLed: SVGCircleElement;
private antenna: SVGPolylineElement;
2016-03-11 22:17:49 +01:00
private lightLevelButton: SVGCircleElement;
2016-05-05 08:31:55 +02:00
private lightLevelGradient: SVGLinearGradientElement;
2016-03-12 00:10:36 +01:00
private lightLevelText: SVGTextElement;
2016-05-05 08:31:55 +02:00
private thermometerGradient: SVGLinearGradientElement;
2016-03-14 22:03:31 +01:00
private thermometer: SVGRectElement;
private thermometerText: SVGTextElement;
2016-09-27 20:00:21 +02:00
private shakeButton: SVGElement;
2016-08-30 21:42:30 +02:00
public board: pxsim.DalBoard;
2016-09-27 22:35:48 +02:00
private rgbLed: SVGElement;
2016-10-17 05:25:55 +02:00
private pinNmToCoord: Map<Coord> = {
"EXT_PWR": [
92.30997467041016,
-42.92474937438965
],
"SPKR": [
106.44635391235352,
-16.370698928833008
],
"BTN_A": [
93.8138427734375,
56.631452560424805
],
"BTN_B": [
204.92835235595703,
56.631452560424805
],
2016-10-25 08:17:16 +02:00
// rings
2016-10-17 05:25:55 +02:00
"EDGE_P0": [
56.002254486083984,
95.43130111694336
],
"EDGE_P1": [
103.00893783569336,
175.82388305664062
],
"EDGE_P2": [
195.90512084960938,
175.3082733154297
],
"EDGE_P3": [
241.79466247558594,
95.3883285522461
],
"EDGE_GND": [
103.00893783569336,
14.86682915687561
],
"EDGE_VCC": [
195.64733123779297,
14.86682915687561
],
"C_GND1": [
113.1493148803711,
159.83989715576172
],
"C_GND2": [
150.27342987060547,
159.83989715576172
],
"C_GND3": [
150.27342987060547,
153.5666275024414
],
"C_GND4": [
187.39752960205078,
153.5666275024414
],
"C_VCC1": [
187.39752960205078,
159.83989715576172
],
"C_VCC2": [
113.1922836303711,
153.5666275024414
],
"C_P0": [
119.33667373657227,
159.83989715576172
2016-10-25 08:17:16 +02:00
],
2016-10-17 05:25:55 +02:00
"C_P2": [
125.52401733398438,
159.83989715576172
],
"C_P4": [
131.71136474609375,
159.83989715576172
],
"C_P6": [
137.89871978759766,
159.83989715576172
],
"C_P8": [
144.08607482910156,
159.83989715576172
],
"C_P10": [
156.46077728271484,
159.83989715576172
],
"C_P12": [
162.64812469482422,
159.83989715576172
],
"C_P14": [
168.83545684814453,
159.83989715576172
],
"C_P16": [
175.02281951904297,
159.83989715576172
],
"C_P20": [
181.2101821899414,
159.83989715576172
],
"C_P1": [
119.379638671875,
153.5666275024414
],
"C_P22": [
125.56698226928711,
153.5666275024414
],
"C_P5": [
131.71136474609375,
153.5666275024414
],
"C_P7": [
137.89871978759766,
153.5666275024414
],
"C_P9": [
144.08607482910156,
153.5666275024414
],
"C_P11": [
156.46077728271484,
153.5666275024414
],
"C_P13": [
162.64812469482422,
153.5666275024414
],
"C_P15": [
168.83545684814453,
153.5666275024414
],
"C_P21": [
175.02281951904297,
153.5666275024414
],
"C_P19": [
181.2101821899414,
153.5666275024414
],
"M_GND1": [
137.89871978759766,
141.70752716064453
],
"M_GND2": [
156.46077728271484,
141.70752716064453
],
"M_OUT1": [
144.08607482910156,
141.70752716064453
],
"M_OUT2": [
150.27342987060547,
141.70752716064453
],
"M_VM": [
162.64812469482422,
141.70752716064453
],
"G_A0_GND": [
82.47036743164062,
72.35763549804688
],
"G_A0_VCC": [
78.34546279907227,
76.3106689453125
],
"G_A0_SDA": [
74.65023803710938,
80.00588989257812
],
"G_A0_SCL": [
70.43940734863281,
84.21672821044922
],
"G_A1_RX": [
216.52963256835938,
71.4982795715332
],
"G_A1_TX": [
220.65453338623047,
75.53724670410156
],
"G_A1_VCC": [
224.34976959228516,
79.23247528076172
],
"G_A1_GND": [
228.56060028076172,
83.44330978393555
]
};
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
constructor(public props: IBoardProps) {
this.buildDom();
if (props && props.wireframe)
svg.addClass(this.element, "sim-wireframe");
if (props && props.theme)
this.updateTheme();
if (props && props.runtime) {
this.board = this.props.runtime.board as pxsim.DalBoard;
this.board.updateSubscribers.push(() => this.updateState());
this.updateState();
this.attachEvents();
}
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
public getView(): SVGAndSize<SVGSVGElement> {
return {
el: this.element,
y: 0,
x: 0,
w: MB_WIDTH,
h: MB_HEIGHT
};
}
public getCoord(pinNm: string): Coord {
return this.pinNmToCoord[pinNm];
}
public highlightPin(pinNm: string): void {
//TODO: for instructions
}
public getPinDist(): number {
2016-10-14 08:53:24 +02:00
return 10;
}
2016-10-17 05:25:55 +02:00
private recordPinCoords() {
pinNames.forEach((nm, i) => {
2016-10-14 15:46:56 +02:00
const p = this.pins[i];
const r = p.getBoundingClientRect();
this.pinNmToCoord[nm] = [r.left + r.width / 2, r.top + r.height / 2];
});
2016-10-17 05:25:55 +02:00
console.log(JSON.stringify(this.pinNmToCoord, null, 2))
}
2016-03-11 01:24:11 +01:00
private updateTheme() {
let theme = this.props.theme;
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
svg.fills(this.leds, theme.ledOn);
svg.fills(this.ledsOuter, theme.ledOff);
svg.fills(this.buttonsOuter.slice(0, 2), theme.buttonOuter);
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[0], theme.buttonUps[0]);
svg.fill(this.buttons[1], theme.buttonUps[1]);
2016-05-05 17:57:44 +02:00
svg.fill(this.buttonsOuter[2], theme.virtualButtonOuter);
svg.fill(this.buttons[2], theme.virtualButtonUp);
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
this.pinGradients.forEach(lg => svg.setGradientColors(lg, theme.pin, theme.pinActive));
svg.setGradientColors(this.lightLevelGradient, theme.lightLevelOn, theme.lightLevelOff);
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
svg.setGradientColors(this.thermometerGradient, theme.ledOff, theme.ledOn);
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
public updateState() {
2016-08-30 21:42:30 +02:00
let state = this.board;
2016-03-11 01:24:11 +01:00
if (!state) return;
let theme = this.props.theme;
2016-05-05 08:31:55 +02:00
let bpState = state.buttonPairState;
let buttons = [bpState.aBtn, bpState.bBtn, bpState.abBtn];
buttons.forEach((btn, index) => {
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[index], btn.pressed ? (btn.virtual ? theme.virtualButtonDown : theme.buttonDown) : (btn.virtual ? theme.virtualButtonUp : theme.buttonUps[index]));
2016-03-11 01:24:11 +01:00
});
2016-05-05 08:31:55 +02:00
if (state.ledMatrixState.disabled) {
this.leds.forEach((led, i) => {
const sel = (<SVGStylable><any>led)
sel.style.opacity = "0";
})
} else {
const bw = state.ledMatrixState.displayMode == pxsim.DisplayMode.bw
const img = state.ledMatrixState.image;
this.leds.forEach((led, i) => {
const sel = (<SVGStylable><any>led)
sel.style.opacity = ((bw ? img.data[i] > 0 ? 255 : 0 : img.data[i]) / 255.0) + "";
})
}
2016-03-11 01:24:11 +01:00
this.updatePins();
this.updateTilt();
2016-05-05 08:31:55 +02:00
this.updateHeading();
2016-03-14 22:03:31 +01:00
this.updateLightLevel();
2016-05-05 08:31:55 +02:00
this.updateTemperature();
this.updateButtonAB();
this.updateGestures();
2016-09-27 22:35:48 +02:00
this.updateRgbLed();
2016-10-27 22:47:39 +02:00
this.updateSpeaker();
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
if (!runtime || runtime.dead) svg.addClass(this.element, "grayscale");
else svg.removeClass(this.element, "grayscale");
2016-03-18 22:54:27 +01:00
}
2016-05-05 08:31:55 +02:00
2016-09-27 22:35:48 +02:00
private updateRgbLed() {
let state = this.board;
if (state.rgbLedState) {
if (!this.rgbLed)
2016-10-13 07:44:05 +02:00
this.rgbLed = this.element.getElementById("rgbledcircle") as SVGCircleElement;
2016-10-11 20:41:51 +02:00
const c = state.rgbLedState;
const b = c & 0xFF;
const g = (c >> 8) & 0xFF;
const r = (c >> 16) & 0xFF;
const w = (c >> 24) & 0xFF;
2016-10-17 05:25:55 +02:00
const ch = `rgba(${r}, ${g}, ${b}, 1)`;
2016-10-11 20:41:51 +02:00
svg.fill(this.rgbLed, ch);
} else if (this.rgbLed) {
svg.fill(this.rgbLed, 'white');
2016-09-27 22:35:48 +02:00
}
}
2016-10-27 22:47:39 +02:00
private updateSpeaker() {
let state = this.board;
if (state.speakerState.frequency) {
} else {
}
}
2016-03-18 22:54:27 +01:00
private updateGestures() {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (state.accelerometerState.useShake && !this.shakeButton) {
2016-10-13 07:44:05 +02:00
let shake = this.mkBtn(26, MB_HEIGHT - 67);
2016-09-27 20:00:21 +02:00
this.shakeButton = shake.inner;
2016-05-05 17:57:44 +02:00
svg.fill(this.shakeButton, this.props.theme.virtualButtonUp)
2016-09-27 20:00:21 +02:00
svg.buttonEvents(shake.outer,
2016-09-27 22:35:48 +02:00
ev => { },
2016-09-27 20:00:21 +02:00
(ev) => {
svg.fill(this.shakeButton, this.props.theme.virtualButtonDown)
},
(ev) => {
svg.fill(this.shakeButton, this.props.theme.virtualButtonUp);
this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE
}
)
2016-10-13 07:44:05 +02:00
let shakeText = svg.child(shake.outer, "text", { x: 20, y: MB_HEIGHT - 40, class: "sim-text inverted" }) as SVGTextElement;
2016-09-27 20:00:21 +02:00
shakeText.textContent = "SHAKE"
2016-05-05 08:31:55 +02:00
}
2016-03-18 21:55:07 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-18 21:55:07 +01:00
private updateButtonAB() {
2016-08-30 21:42:30 +02:00
let state = this.board;
2016-09-27 20:00:21 +02:00
if (state.buttonPairState.usesButtonAB && (<any>this.buttons[2]).style.visibility != "visible") {
2016-05-05 08:31:55 +02:00
(<any>this.buttonsOuter[2]).style.visibility = "visible";
(<any>this.buttons[2]).style.visibility = "visible";
2016-03-18 21:55:07 +01:00
this.updateTheme();
2016-05-05 08:31:55 +02:00
}
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
private updatePin(pin: Pin, index: number) {
2016-03-11 01:24:11 +01:00
if (!pin) return;
let text = this.pinTexts[index];
2016-05-05 08:31:55 +02:00
let v = "";
2016-06-04 08:15:51 +02:00
if (pin.mode & PinFlags.Analog) {
2016-05-05 08:31:55 +02:00
v = Math.floor(100 - (pin.value || 0) / 1023 * 100) + "%";
if (text) text.textContent = (pin.period ? "~" : "") + (pin.value || 0) + "";
2016-03-11 01:24:11 +01:00
}
2016-06-04 08:15:51 +02:00
else if (pin.mode & PinFlags.Digital) {
2016-06-09 23:08:15 +02:00
v = pin.value > 0 ? "0%" : "100%";
2016-03-11 01:24:11 +01:00
if (text) text.textContent = pin.value > 0 ? "1" : "0";
}
2016-06-04 08:15:51 +02:00
else if (pin.mode & PinFlags.Touch) {
v = pin.touched ? "0%" : "100%";
2016-03-11 01:24:11 +01:00
if (text) text.textContent = "";
} else {
2016-06-04 08:15:51 +02:00
v = "100%";
if (text) text.textContent = "";
2016-03-11 01:24:11 +01:00
}
2016-05-05 17:57:44 +02:00
if (v) svg.setGradientValue(this.pinGradients[index], v);
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-14 22:03:31 +01:00
private updateTemperature() {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state || !state.thermometerState.usesTemperature) return;
2016-05-05 08:31:55 +02:00
2016-03-14 22:03:31 +01:00
let tmin = -5;
let tmax = 50;
2016-05-05 08:31:55 +02:00
if (!this.thermometer) {
2016-03-14 22:03:31 +01:00
let gid = "gradient-thermometer";
2016-05-05 17:57:44 +02:00
this.thermometerGradient = svg.linearGradient(this.defs, gid);
2016-10-13 08:30:19 +02:00
const ty = MB_HEIGHT - 192;
2016-05-05 17:57:44 +02:00
this.thermometer = <SVGRectElement>svg.child(this.g, "rect", {
2016-05-05 08:31:55 +02:00
class: "sim-thermometer",
x: 85,
2016-10-13 08:30:19 +02:00
y: ty,
width: 10,
height: 80,
2016-05-05 08:31:55 +02:00
rx: 5, ry: 5,
fill: `url(#${gid})`
2016-03-14 22:03:31 +01:00
});
2016-10-17 05:25:55 +02:00
this.thermometerText = svg.child(this.g, "text", {
class: 'sim-text',
x: 100, y: MB_HEIGHT - 174
}) as SVGTextElement;
2016-03-14 22:03:31 +01:00
this.updateTheme();
2016-05-05 08:31:55 +02:00
2016-03-14 22:03:31 +01:00
let pt = this.element.createSVGPoint();
2016-05-05 17:57:44 +02:00
svg.buttonEvents(this.thermometer,
2016-03-14 22:03:31 +01:00
(ev) => {
2016-05-05 17:57:44 +02:00
let cur = svg.cursorPoint(pt, this.element, ev);
2016-10-13 08:30:19 +02:00
let t = Math.max(0, Math.min(1, (cur.y - ty - 5) / 70))
state.thermometerState.temperature = Math.floor(tmax - t * (tmax - tmin));
2016-03-14 22:03:31 +01:00
this.updateTemperature();
2016-05-05 08:31:55 +02:00
}, ev => { }, ev => { })
2016-03-14 22:03:31 +01:00
}
2016-05-05 08:31:55 +02:00
let t = Math.max(tmin, Math.min(tmax, state.thermometerState.temperature))
let per = Math.floor((state.thermometerState.temperature - tmin) / (tmax - tmin) * 100)
svg.setGradientValue(this.thermometerGradient, 100 - per + "%");
this.thermometerText.textContent = t + "°C";
2016-03-14 22:03:31 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private updateHeading() {
let xc = 258;
let yc = 75;
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state || !state.compassState.usesHeading) return;
2016-09-27 00:05:06 +02:00
/*
2016-03-11 01:24:11 +01:00
if (!this.headInitialized) {
let p = this.head.firstChild.nextSibling as SVGPathElement;
p.setAttribute("d", "m269.9,50.134647l0,0l-39.5,0l0,0c-14.1,0.1 -24.6,10.7 -24.6,24.8c0,13.9 10.4,24.4 24.3,24.7l0,0l39.6,0c14.2,0 40.36034,-22.97069 40.36034,-24.85394c0,-1.88326 -26.06034,-24.54606 -40.16034,-24.64606m-0.2,39l0,0l-39.3,0c-7.7,-0.1 -14,-6.4 -14,-14.2c0,-7.8 6.4,-14.2 14.2,-14.2l39.1,0c7.8,0 14.2,6.4 14.2,14.2c0,7.9 -6.4,14.2 -14.2,14.2l0,0l0,0z");
2016-05-13 07:23:23 +02:00
this.updateTheme();
2016-03-11 01:24:11 +01:00
let pt = this.element.createSVGPoint();
2016-05-05 17:57:44 +02:00
svg.buttonEvents(
2016-03-11 01:24:11 +01:00
this.head,
2016-05-05 08:31:55 +02:00
(ev: MouseEvent) => {
2016-05-05 17:57:44 +02:00
let cur = svg.cursorPoint(pt, this.element, ev);
state.compassState.heading = Math.floor(Math.atan2(cur.y - yc, cur.x - xc) * 180 / Math.PI + 90);
if (state.compassState.heading < 0) state.compassState.heading += 360;
2016-05-05 08:31:55 +02:00
this.updateHeading();
2016-03-11 01:24:11 +01:00
});
this.headInitialized = true;
}
2016-05-05 08:31:55 +02:00
let txt = state.compassState.heading.toString() + "°";
2016-05-05 08:31:55 +02:00
if (txt != this.headText.textContent) {
svg.rotateElement(this.head, xc, yc, state.compassState.heading + 180);
2016-03-11 01:24:11 +01:00
this.headText.textContent = txt;
2016-09-27 00:05:06 +02:00
} */
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
private lastFlashTime: number = 0;
2016-03-11 01:24:11 +01:00
public flashSystemLed() {
if (!this.systemLed)
2016-10-13 07:44:05 +02:00
this.systemLed = <SVGCircleElement>svg.child(this.g, "circle", { class: "sim-systemled", cx: 75, cy: MB_HEIGHT - 171, r: 2 })
2016-03-11 01:24:11 +01:00
let now = Date.now();
if (now - this.lastFlashTime > 150) {
this.lastFlashTime = now;
2016-05-13 07:23:23 +02:00
svg.animate(this.systemLed, "sim-flash")
2016-03-11 01:24:11 +01:00
}
}
2016-05-05 08:31:55 +02:00
private lastAntennaFlash: number = 0;
2016-03-11 01:24:11 +01:00
public flashAntenna() {
2016-05-05 08:31:55 +02:00
if (!this.antenna) {
2016-03-11 01:24:11 +01:00
let ax = 380;
let dax = 18;
let ayt = 10;
let ayb = 40;
2016-05-05 17:57:44 +02:00
this.antenna = <SVGPolylineElement>svg.child(this.g, "polyline", { class: "sim-antenna", points: `${ax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt} ${ax},${ayb} ${ax += dax},${ayb} ${ax},${ayt} ${ax += dax},${ayt}` })
2016-03-11 01:24:11 +01:00
}
let now = Date.now();
if (now - this.lastAntennaFlash > 200) {
this.lastAntennaFlash = now;
2016-05-05 17:57:44 +02:00
svg.animate(this.antenna, 'sim-flash-stroke')
2016-03-11 01:24:11 +01:00
}
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private updatePins() {
2016-08-30 21:42:30 +02:00
let state = this.board;
2016-03-11 01:24:11 +01:00
if (!state) return;
2016-05-05 08:31:55 +02:00
state.edgeConnectorState.pins.forEach((pin, i) => this.updatePin(pin, i));
2016-05-05 08:31:55 +02:00
}
2016-03-11 22:17:49 +01:00
private updateLightLevel() {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state || !state.lightSensorState.usesLightLevel) return;
2016-05-05 08:31:55 +02:00
2016-03-11 22:17:49 +01:00
if (!this.lightLevelButton) {
2016-05-05 08:31:55 +02:00
let gid = "gradient-light-level";
2016-05-05 17:57:44 +02:00
this.lightLevelGradient = svg.linearGradient(this.defs, gid)
const cx = 30;
const cy = 45;
const r = 20;
2016-05-05 17:57:44 +02:00
this.lightLevelButton = svg.child(this.g, "circle", {
cx: `${cx}px`, cy: `${cy}px`, r: `${r}px`,
2016-05-05 08:31:55 +02:00
class: 'sim-light-level-button',
fill: `url(#${gid})`
}) as SVGCircleElement;
2016-03-11 22:17:49 +01:00
let pt = this.element.createSVGPoint();
2016-05-05 17:57:44 +02:00
svg.buttonEvents(this.lightLevelButton,
2016-03-11 22:17:49 +01:00
(ev) => {
2016-05-05 17:57:44 +02:00
let pos = svg.cursorPoint(pt, this.element, ev);
2016-05-05 08:31:55 +02:00
let rs = r / 2;
let level = Math.max(0, Math.min(255, Math.floor((pos.y - (cy - rs)) / (2 * rs) * 255)));
2016-08-30 21:42:30 +02:00
if (level != this.board.lightSensorState.lightLevel) {
this.board.lightSensorState.lightLevel = level;
2016-03-12 00:10:36 +01:00
this.applyLightLevel();
2016-03-11 22:17:49 +01:00
}
2016-05-05 08:31:55 +02:00
}, ev => { },
ev => { })
2016-10-17 05:25:55 +02:00
this.lightLevelText = svg.child(this.g, "text", { x: cx - r - 7, y: cy + r + 8, text: '', class: 'sim-text inverted' }) as SVGTextElement;
2016-03-11 22:17:49 +01:00
this.updateTheme();
2016-05-05 08:31:55 +02:00
}
svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(state.lightSensorState.lightLevel * 100 / 255))) + '%')
this.lightLevelText.textContent = state.lightSensorState.lightLevel.toString();
2016-05-05 08:31:55 +02:00
}
2016-03-12 00:10:36 +01:00
private applyLightLevel() {
2016-08-30 21:42:30 +02:00
let lv = this.board.lightSensorState.lightLevel;
2016-05-05 17:57:44 +02:00
svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(lv * 100 / 255))) + '%')
2016-05-05 08:31:55 +02:00
this.lightLevelText.textContent = lv.toString();
2016-03-12 00:10:36 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private updateTilt() {
if (this.props.disableTilt) return;
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state || !state.accelerometerState.accelerometer.isActive) return;
2016-03-11 01:24:11 +01:00
let x = state.accelerometerState.accelerometer.getX();
let y = state.accelerometerState.accelerometer.getY();
2016-03-20 03:15:20 +01:00
let af = 8 / 1023;
2016-05-05 08:31:55 +02:00
this.element.style.transform = "perspective(30em) rotateX(" + y * af + "deg) rotateY(" + x * af + "deg)"
2016-03-20 03:15:20 +01:00
this.element.style.perspectiveOrigin = "50% 50% 50%";
2016-05-05 08:31:55 +02:00
this.element.style.perspective = "30em";
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
private buildDom() {
2016-10-17 05:09:13 +02:00
this.element = new DOMParser().parseFromString(BOARD_SVG, "image/svg+xml").querySelector("svg") as SVGSVGElement;
2016-05-05 17:57:44 +02:00
svg.hydrate(this.element, {
2016-05-05 08:31:55 +02:00
"version": "1.0",
"viewBox": `0 0 ${MB_WIDTH} ${MB_HEIGHT}`,
2016-05-05 08:31:55 +02:00
"class": "sim",
2016-03-11 01:24:11 +01:00
"x": "0px",
"y": "0px",
"width": MB_WIDTH + "px",
"height": MB_HEIGHT + "px",
2016-05-05 08:31:55 +02:00
});
2016-05-05 17:57:44 +02:00
this.style = <SVGStyleElement>svg.child(this.element, "style", {});
this.style.textContent = MB_STYLE;
2016-05-05 08:31:55 +02:00
2016-05-05 17:57:44 +02:00
this.defs = <SVGDefsElement>svg.child(this.element, "defs", {});
this.g = <SVGGElement>svg.elt("g");
2016-03-11 01:24:11 +01:00
this.element.appendChild(this.g);
2016-05-05 08:31:55 +02:00
2016-03-20 08:44:30 +01:00
// filters
2016-05-05 17:57:44 +02:00
let glow = svg.child(this.defs, "filter", { id: "filterglow", x: "-5%", y: "-5%", width: "120%", height: "120%" });
svg.child(glow, "feGaussianBlur", { stdDeviation: "5", result: "glow" });
let merge = svg.child(glow, "feMerge", {});
for (let i = 0; i < 3; ++i) svg.child(merge, "feMergeNode", { in: "glow" })
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
// leds
this.leds = [];
this.ledsOuter = [];
2016-10-13 07:44:05 +02:00
const left = 103.04, top = MB_HEIGHT - 158.59;
const ledoffw = 10.91, ledoffh = 10.68;
const ledw = 2.7;
const ledh = 5.47;
2016-05-05 08:31:55 +02:00
for (let i = 0; i < 5; ++i) {
let ledtop = i * ledoffh + top;
for (let j = 0; j < 5; ++j) {
let ledleft = j * ledoffw + left;
let k = i * 5 + j;
2016-10-13 08:40:33 +02:00
this.ledsOuter.push(svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: ledw, height: ledh }));
2016-09-27 00:05:06 +02:00
this.leds.push(svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 1, y: ledtop - 1, width: ledw + 2, height: ledh + 2, rx: 2, ry: 2, title: `(${j},${i})` }));
2016-03-11 01:24:11 +01:00
}
}
2016-05-05 08:31:55 +02:00
2016-03-21 05:34:16 +01:00
// https://www.microbit.co.uk/device/pins
2016-03-11 01:24:11 +01:00
// P0, P1, P2
2016-10-14 08:53:24 +02:00
this.pins = pinNames.map(n => {
let p = this.element.getElementById(n) as SVGElement;
svg.addClass(p, "sim-pin");
return p;
});
2016-05-05 08:31:55 +02:00
2016-09-27 00:05:06 +02:00
this.pins.forEach((p, i) => svg.hydrate(p, { title: pinTitles[i] }));
2016-05-05 08:31:55 +02:00
this.pinGradients = this.pins.map((pin, i) => {
let gid = "gradient-pin-" + i
2016-05-05 17:57:44 +02:00
let lg = svg.linearGradient(this.defs, gid)
2016-03-11 01:24:11 +01:00
pin.setAttribute("fill", `url(#${gid})`);
return lg;
})
2016-05-05 08:31:55 +02:00
2016-06-09 23:08:15 +02:00
this.pinTexts = [67, 165, 275].map(x => <SVGTextElement>svg.child(this.g, "text", { class: "sim-text-pin", x: x, y: 345 }));
2016-10-13 07:44:05 +02:00
// BTN A, B
const btnids = ["BTN_A", "BTN_B"];
this.buttonsOuter = btnids.map(n => this.element.getElementById(n + "_BOX") as SVGElement);
this.buttonsOuter.forEach(b => svg.addClass(b, "sim-button-outer"));
this.buttons = btnids.map(n => this.element.getElementById(n) as SVGElement);
this.buttons.forEach(b => svg.addClass(b, "sim-button"));
2016-06-09 23:08:15 +02:00
2016-10-13 07:44:05 +02:00
// BTN A+B
2016-06-09 23:08:15 +02:00
const outerBtn = (left: number, top: number) => {
2016-09-27 20:00:21 +02:00
const button = this.mkBtn(left, top);
this.buttonsOuter.push(button.outer);
this.buttons.push(button.inner);
return button;
2016-06-09 23:08:15 +02:00
}
2016-10-13 07:44:05 +02:00
let ab = outerBtn(210, MB_HEIGHT - 168);
let abtext = svg.child(ab.outer, "text", { x: 208, y: MB_HEIGHT - 173, class: "sim-text inverted" }) as SVGTextElement;
2016-09-27 20:00:21 +02:00
abtext.textContent = "A+B";
2016-06-09 23:08:15 +02:00
(<any>this.buttonsOuter[2]).style.visibility = "hidden";
(<any>this.buttons[2]).style.visibility = "hidden";
2016-03-11 01:24:11 +01:00
}
2016-05-05 08:31:55 +02:00
2016-09-27 20:00:21 +02:00
private mkBtn(left: number, top: number): { outer: SVGElement, inner: SVGElement } {
2016-10-13 07:44:05 +02:00
const btnr = 2;
const btnw = 16;
const btnn = 1.6;
const btnnm = 2;
2016-09-27 20:00:21 +02:00
const btnb = 5;
let btng = svg.child(this.g, "g", { class: "sim-button-group" });
svg.child(btng, "rect", { class: "sim-button-outer", x: left, y: top, rx: btnr, ry: btnr, width: btnw, height: btnw });
svg.child(btng, "circle", { class: "sim-button-nut", cx: left + btnnm, cy: top + btnnm, r: btnn });
svg.child(btng, "circle", { class: "sim-button-nut", cx: left + btnnm, cy: top + btnw - btnnm, r: btnn });
svg.child(btng, "circle", { class: "sim-button-nut", cx: left + btnw - btnnm, cy: top + btnw - btnnm, r: btnn });
svg.child(btng, "circle", { class: "sim-button-nut", cx: left + btnw - btnnm, cy: top + btnnm, r: btnn });
const outer = btng;
const inner = svg.child(btng, "circle", {
class: "sim-button",
cx: left + btnw / 2,
cy: top + btnw / 2,
r: btnb
});
return { outer, inner };
}
2016-03-11 01:24:11 +01:00
private attachEvents() {
Runtime.messagePosted = (msg) => {
2016-07-29 22:42:21 +02:00
switch (msg.type || "") {
case "serial": this.flashSystemLed(); break;
case "radiopacket": this.flashAntenna(); break;
2016-03-11 01:24:11 +01:00
}
}
2016-03-30 06:14:27 +02:00
let tiltDecayer = 0;
2016-04-11 19:58:09 +02:00
this.element.addEventListener(pointerEvents.move, (ev: MouseEvent) => {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state.accelerometerState.accelerometer.isActive) return;
2016-05-05 08:31:55 +02:00
2016-03-30 06:14:27 +02:00
if (tiltDecayer) {
clearInterval(tiltDecayer);
tiltDecayer = 0;
}
2016-03-20 03:15:20 +01:00
let bbox = this.element.getBoundingClientRect();
let ax = (ev.clientX - bbox.width / 2) / (bbox.width / 3);
let ay = (ev.clientY - bbox.height / 2) / (bbox.height / 3);
2016-05-05 08:31:55 +02:00
2016-03-20 03:15:20 +01:00
let x = - Math.max(- 1023, Math.min(1023, Math.floor(ax * 1023)));
let y = Math.max(- 1023, Math.min(1023, Math.floor(ay * 1023)));
2016-05-05 08:31:55 +02:00
let z2 = 1023 * 1023 - x * x - y * y;
let z = Math.floor((z2 > 0 ? -1 : 1) * Math.sqrt(Math.abs(z2)));
state.accelerometerState.accelerometer.update(x, y, z);
2016-03-11 01:24:11 +01:00
this.updateTilt();
}, false);
2016-04-11 19:58:09 +02:00
this.element.addEventListener(pointerEvents.leave, (ev: MouseEvent) => {
2016-08-30 21:42:30 +02:00
let state = this.board;
if (!state.accelerometerState.accelerometer.isActive) return;
2016-05-05 08:31:55 +02:00
2016-03-30 06:14:27 +02:00
if (!tiltDecayer) {
tiltDecayer = setInterval(() => {
let accx = state.accelerometerState.accelerometer.getX(MicroBitCoordinateSystem.RAW);
2016-03-30 06:14:27 +02:00
accx = Math.floor(Math.abs(accx) * 0.85) * (accx > 0 ? 1 : -1);
let accy = state.accelerometerState.accelerometer.getY(MicroBitCoordinateSystem.RAW);
2016-03-30 06:14:27 +02:00
accy = Math.floor(Math.abs(accy) * 0.85) * (accy > 0 ? 1 : -1);
2016-05-05 08:31:55 +02:00
let accz = -Math.sqrt(Math.max(0, 1023 * 1023 - accx * accx - accy * accy));
2016-03-30 06:14:27 +02:00
if (Math.abs(accx) <= 24 && Math.abs(accy) <= 24) {
2016-05-05 08:31:55 +02:00
clearInterval(tiltDecayer);
tiltDecayer = 0;
2016-03-30 06:14:27 +02:00
accx = 0;
accy = 0;
2016-05-05 08:31:55 +02:00
accz = -1023;
}
state.accelerometerState.accelerometer.update(accx, accy, accz);
2016-05-05 08:31:55 +02:00
this.updateTilt();
}, 50)
2016-03-30 06:14:27 +02:00
}
2016-03-11 01:24:11 +01:00
}, false);
2016-05-05 08:31:55 +02:00
2016-03-11 01:24:11 +01:00
this.pins.forEach((pin, index) => {
2016-08-30 21:42:30 +02:00
if (!this.board.edgeConnectorState.pins[index]) return;
2016-03-11 01:24:11 +01:00
let pt = this.element.createSVGPoint();
2016-05-05 17:57:44 +02:00
svg.buttonEvents(pin,
2016-03-11 01:24:11 +01:00
// move
ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
2016-03-11 01:24:11 +01:00
let svgpin = this.pins[index];
2016-06-04 08:15:51 +02:00
if (pin.mode & PinFlags.Input) {
2016-05-05 17:57:44 +02:00
let cursor = svg.cursorPoint(pt, this.element, ev);
2016-03-11 01:24:11 +01:00
let v = (400 - cursor.y) / 40 * 1023
pin.value = Math.max(0, Math.min(1023, Math.floor(v)));
}
2016-05-05 08:31:55 +02:00
this.updatePin(pin, index);
2016-03-11 01:24:11 +01:00
},
// start
ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
2016-03-11 01:24:11 +01:00
let svgpin = this.pins[index];
2016-05-05 17:57:44 +02:00
svg.addClass(svgpin, "touched");
2016-06-04 08:15:51 +02:00
if (pin.mode & PinFlags.Input) {
2016-05-05 17:57:44 +02:00
let cursor = svg.cursorPoint(pt, this.element, ev);
2016-03-11 01:24:11 +01:00
let v = (400 - cursor.y) / 40 * 1023
pin.value = Math.max(0, Math.min(1023, Math.floor(v)));
}
2016-05-05 08:31:55 +02:00
this.updatePin(pin, index);
2016-03-11 01:24:11 +01:00
},
// stop
(ev: MouseEvent) => {
2016-08-30 21:42:30 +02:00
let state = this.board;
let pin = state.edgeConnectorState.pins[index];
2016-03-11 01:24:11 +01:00
let svgpin = this.pins[index];
2016-05-05 17:57:44 +02:00
svg.removeClass(svgpin, "touched");
2016-03-11 01:24:11 +01:00
this.updatePin(pin, index);
return false;
2016-05-05 08:31:55 +02:00
});
2016-03-11 01:24:11 +01:00
})
2016-05-05 08:31:55 +02:00
this.pins.slice(0, 3).forEach((btn, index) => {
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.down, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
state.edgeConnectorState.pins[index].touched = true;
this.updatePin(state.edgeConnectorState.pins[index], index);
2016-03-23 23:09:48 +01:00
})
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.leave, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
state.edgeConnectorState.pins[index].touched = false;
this.updatePin(state.edgeConnectorState.pins[index], index);
2016-03-23 23:09:48 +01:00
})
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.up, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
state.edgeConnectorState.pins[index].touched = false;
this.updatePin(state.edgeConnectorState.pins[index], index);
2016-08-30 21:42:30 +02:00
this.board.bus.queue(state.edgeConnectorState.pins[index].id, DAL.MICROBIT_BUTTON_EVT_UP);
this.board.bus.queue(state.edgeConnectorState.pins[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK);
2016-05-05 08:31:55 +02:00
})
2016-03-23 23:09:48 +01:00
})
2016-08-30 21:42:30 +02:00
let bpState = this.board.buttonPairState;
let stateButtons = [bpState.aBtn, bpState.bBtn, bpState.abBtn];
2016-05-05 08:31:55 +02:00
this.buttonsOuter.slice(0, 2).forEach((btn, index) => {
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.down, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[index].pressed = true;
2016-05-05 17:57:44 +02:00
svg.fill(this.buttons[index], this.props.theme.buttonDown);
2016-03-11 01:24:11 +01:00
})
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.leave, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[index].pressed = false;
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[index], this.props.theme.buttonUps[index]);
2016-03-18 21:55:07 +01:00
})
2016-04-11 19:58:09 +02:00
btn.addEventListener(pointerEvents.up, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[index].pressed = false;
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[index], this.props.theme.buttonUps[index]);
2016-08-30 21:42:30 +02:00
this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_UP);
this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK);
2016-03-11 01:24:11 +01:00
})
})
2016-04-11 19:58:09 +02:00
this.buttonsOuter[2].addEventListener(pointerEvents.down, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[0].pressed = true;
stateButtons[1].pressed = true;
stateButtons[2].pressed = true;
2016-05-05 17:57:44 +02:00
svg.fill(this.buttons[0], this.props.theme.buttonDown);
svg.fill(this.buttons[1], this.props.theme.buttonDown);
svg.fill(this.buttons[2], this.props.theme.buttonDown);
2016-05-05 08:31:55 +02:00
})
2016-04-11 19:58:09 +02:00
this.buttonsOuter[2].addEventListener(pointerEvents.leave, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[0].pressed = false;
stateButtons[1].pressed = false;
stateButtons[2].pressed = false;
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[0], this.props.theme.buttonUps[0]);
svg.fill(this.buttons[1], this.props.theme.buttonUps[1]);
2016-05-05 17:57:44 +02:00
svg.fill(this.buttons[2], this.props.theme.virtualButtonUp);
2016-03-18 21:55:07 +01:00
})
2016-04-11 19:58:09 +02:00
this.buttonsOuter[2].addEventListener(pointerEvents.up, ev => {
2016-08-30 21:42:30 +02:00
let state = this.board;
stateButtons[0].pressed = false;
stateButtons[1].pressed = false;
stateButtons[2].pressed = false;
2016-10-13 07:44:05 +02:00
svg.fill(this.buttons[0], this.props.theme.buttonUps[0]);
svg.fill(this.buttons[1], this.props.theme.buttonUps[1]);
2016-05-05 17:57:44 +02:00
svg.fill(this.buttons[2], this.props.theme.virtualButtonUp);
2016-05-05 08:31:55 +02:00
2016-08-30 21:42:30 +02:00
this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_UP);
this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_CLICK);
2016-05-05 08:31:55 +02:00
})
2016-03-11 01:24:11 +01:00
}
}
}