Commit 94765731 authored by Valentin Valls's avatar Valentin Valls
Browse files

Provide a widget to select the duration

parent 36dfab2a
......@@ -647,6 +647,15 @@ class TimeCurvePlot(BasePlot):
"""
self.submit("setXName", name)
def select_x_duration(self, second: int):
"""
Select the x-axis duration in second
Arguments:
second: Amount of seconds displayed in the x-axis
"""
self.submit("setXDuration", second)
def select_curve(self, name, **kwargs):
"""
Append the data displayed in this plot.
......
......@@ -11,6 +11,7 @@ import logging
import numpy
from silx.gui import qt
from silx.gui import icons
from silx.gui.plot import Plot1D
from silx.gui.plot.items import axis as axis_mdl
......@@ -18,6 +19,80 @@ from silx.gui.plot.items import axis as axis_mdl
_logger = logging.getLogger(__name__)
class DurationAction(qt.QAction):
valueChanged = qt.Signal(float)
def __init__(self):
super(DurationAction, self).__init__()
self.__duration = None
self.__durations = {}
self.__menu = qt.QMenu()
self.__menu.aboutToShow.connect(self.__menuAboutToShow)
self.setMenu(self.__menu)
def __menuAboutToShow(self):
menu = self.sender()
menu.clear()
currentDuration = self.__duration
currentWasFound = False
group = qt.QActionGroup(menu)
group.setExclusive(True)
for value, (label, icon) in self.__durations.items():
action = qt.QAction()
action.setText(label)
action.setData(value)
action.setIcon(icon)
action.setCheckable(True)
if currentDuration == value:
action.setChecked(True)
currentWasFound = True
group.addAction(action)
menu.addAction(action)
if currentDuration is not None and not currentWasFound:
menu.addSeparator()
action = qt.QAction()
action.setText(f"{currentDuration}s")
action.setData(currentDuration)
action.setCheckable(True)
action.setChecked(True)
currentWasFound = True
group.addAction(action)
menu.addAction(action)
group.triggered.connect(self.__actionSelected)
def __actionSelected(self, action):
duration = action.data()
self.setDuration(duration)
def setDuration(self, duration):
if self.__duration == duration:
return
self.__duration = duration
self.__updateLookAndFeel()
self.valueChanged.emit(duration)
def addDuration(self, label, value, icon):
if isinstance(icon, str):
icon = icons.getQIcon(icon)
self.__durations[value] = label, icon
def duration(self):
"""Return a duration in second"""
return self.__duration
def __updateLookAndFeel(self):
duration = self.__duration
label, icon = self.__durations.get(duration, (None, None))
if icon is None:
icon = icons.getQIcon("flint:icons/duration-x")
if label is None:
label = f"{duration}s"
self.setToolTip(f"Duration of {label} selected")
self.setIcon(icon)
class TimeCurvePlot(qt.QWidget):
"""Curve plot which handle data following the time
......@@ -35,7 +110,20 @@ class TimeCurvePlot(qt.QWidget):
layout = qt.QVBoxLayout(self)
layout.addWidget(self.__plot)
self.__maxPoints = 100
self.__duration = 60 * 2
self.__durationAction = DurationAction()
self.__durationAction.setCheckable(True)
self.__durationAction.setChecked(True)
self.__durationAction.addDuration("1h", 60 * 60, "flint:icons/duration-1h")
self.__durationAction.addDuration("30m", 30 * 60, "flint:icons/duration-30m")
self.__durationAction.addDuration("10m", 10 * 60, "flint:icons/duration-10m")
self.__durationAction.addDuration("5m", 5 * 60, "flint:icons/duration-5m")
self.__durationAction.addDuration("2m", 2 * 60, "flint:icons/duration-2m")
self.__durationAction.addDuration("1m", 1 * 60, "flint:icons/duration-1m")
self.__durationAction.addDuration("30s", 30, "flint:icons/duration-30s")
self.__durationAction.setDuration(self.__duration)
self.__durationAction.valueChanged.connect(self.__durationChanged)
self.__plot.setGraphXLabel("Time")
xAxis = self.__plot.getXAxis()
......@@ -46,10 +134,49 @@ class TimeCurvePlot(qt.QWidget):
xMinMargin=0.0, xMaxMargin=0.0, yMinMargin=0.1, yMaxMargin=0.1
)
# FIXME: The toolbar have to be recreated, not updated
toolbar = self.__plot.toolBar()
xAutoAction = self.__plot.getXAxisAutoScaleAction()
toolbar.insertAction(xAutoAction, self.__durationAction)
xAutoAction.setVisible(False)
xLogAction = self.__plot.getXAxisLogarithmicAction()
xLogAction.setVisible(False)
self.clear()
def __cutData(self):
pass
def __durationChanged(self, duration):
self.setXDuration(duration)
def setXDuration(self, duration):
self.__durationAction.setDuration(duration)
self.__duration = duration
self.__dropOldData()
self.__safeUpdatePlot()
def __dropOldData(self):
xData = self.__data.get(self.__xAxisName)
if xData is None:
return
if len(xData) == 0:
return
duration = xData[-1] - xData[0]
if duration <= self.__duration:
return
# FIXME: most of the time only last items with be removed
# There is maybe no need to recompute the whole array
distFromLastValueOfView = self.__duration - numpy.abs(
xData[-1] - self.__duration - xData
)
index = numpy.argmax(distFromLastValueOfView)
if index >= 1:
index = index - 1
if index == 0:
# early skip
return
for name, data in self.__data.items():
data = data[index:]
self.__data[name] = data
def setGraphGrid(self, which):
self.__plot.setGraphGrid(which)
......@@ -76,8 +203,6 @@ class TimeCurvePlot(qt.QWidget):
data = numpy.concatenate((data, newData))
else:
data = newData
if len(data) > self.__maxPoints:
data = data[-self.__maxPoints :]
self.__data[name] = data
def selectCurve(self, yName, **kwargs):
......@@ -98,8 +223,19 @@ class TimeCurvePlot(qt.QWidget):
"""Update the current data with extra data"""
for name, data in kwargs.items():
self.__appendData(name, data)
self.__dropOldData()
self.__safeUpdatePlot()
def resetZoom(self):
if self.__durationAction.isChecked():
self.__plot.resetZoom()
xData = self.__data.get(self.__xAxisName)
if xData is not None and len(xData) > 0:
xmax = xData[-1]
xmin = xmax - self.__duration
xAxis = self.__plot.getXAxis()
xAxis.setLimits(xmin, xmax)
def __safeUpdatePlot(self):
try:
self.__updatePlot()
......@@ -119,4 +255,4 @@ class TimeCurvePlot(qt.QWidget):
style["legend"] = name
style["resetzoom"] = False
self.__plot.addCurve(xData, yData, **style)
self.__plot.resetZoom()
self.resetZoom()
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg8295" version="1.1" viewBox="0 0 32 32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata8301"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><g id="text8305" transform="scale(.8179 1.2226)" stroke-width=".39147" aria-label="10m"><path id="path4743" d="m6.7421 12.593h1.965v-5.6885q0-0.35171 0.022938-0.734l-1.3227 1.1392q-0.12998 0.10704-0.25996 0.12998-0.12998 0.022938-0.24467 0-0.11469-0.022938-0.20644-0.076459-0.084105-0.061167-0.12998-0.12233l-0.58109-0.79517 3.0507-2.6455h1.5139v8.7928h1.7356v1.3763h-5.5433z"/><path id="path4745" d="m20.505 8.8852q0 1.3304-0.2829 2.3091-0.27525 0.97867-0.77224 1.6209-0.48934 0.64225-1.1622 0.95574-0.66519 0.30584-1.4451 0.30584t-1.4451-0.30584q-0.65755-0.31348-1.1469-0.95574-0.48934-0.64225-0.76459-1.6209-0.27525-0.97867-0.27525-2.3091 0-1.3304 0.27525-2.3014 0.27525-0.97867 0.76459-1.6133 0.48934-0.64225 1.1469-0.95574 0.66519-0.31348 1.4451-0.31348t1.4451 0.31348q0.67284 0.31348 1.1622 0.95574 0.49698 0.63461 0.77224 1.6133 0.2829 0.97103 0.2829 2.3014zm-1.9038 0q0-1.0857-0.15292-1.7891-0.14527-0.71107-0.38994-1.1239-0.24467-0.42052-0.5658-0.58109-0.31348-0.16821-0.6499-0.16821t-0.6499 0.16821q-0.30584 0.16056-0.5505 0.58109-0.23702 0.41288-0.38229 1.1239-0.14527 0.70342-0.14527 1.7891 0 1.0934 0.14527 1.8044 0.14527 0.70342 0.38229 1.1239 0.24467 0.41288 0.5505 0.58109 0.31348 0.16056 0.6499 0.16056t0.6499-0.16056q0.32113-0.16821 0.5658-0.58109 0.24467-0.42052 0.38994-1.1239 0.15292-0.71107 0.15292-1.8044z"/><path id="path4747" d="m21.82 13.97v-7.5924h1.1928q0.1835 0 0.30584 0.084105 0.12998 0.084105 0.16821 0.25996l0.12998 0.53521q0.20644-0.21408 0.42052-0.39759 0.22173-0.1835 0.47404-0.31348 0.25231-0.13763 0.53521-0.21408 0.29054-0.076459 0.63461-0.076459 0.72636 0 1.1928 0.38994 0.47404 0.38229 0.70342 1.0169 0.1835-0.37465 0.45111-0.64225 0.27525-0.26761 0.60402-0.43582 0.32877-0.16821 0.68813-0.24467 0.367-0.084105 0.734-0.084105 0.64225 0 1.1392 0.19879 0.50463 0.19115 0.84105 0.5658 0.34406 0.367 0.51992 0.90221 0.17586 0.53521 0.17586 1.2157v4.8322h-1.9421v-4.8322q0-1.3686-1.2233-1.3686-0.27525 0-0.51227 0.091751-0.23702 0.084105-0.42052 0.25996-0.17586 0.16821-0.2829 0.42817-0.0994 0.25231-0.0994 0.58873v4.8322h-1.9421v-4.8322q0-0.734-0.30584-1.0475-0.30584-0.32113-0.88692-0.32113-0.38994 0-0.72636 0.17586-0.33642 0.17586-0.62696 0.49698v5.528z"/></g>
<line id="line8287" x1="25.712" x2="6.7701" y1="22.685" y2="22.685" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8289" transform="translate(-.22991)" points="25.47 24.417 25.463 20.953 28.467 22.68" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8291" transform="translate(-.22991)" points="6.988 24.417 3.993 22.676 7 20.953" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2" x1="2.1686" x2="2.1686" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2-1" x1="29.831" x2="29.831" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg8295" version="1.1" viewBox="0 0 32 32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata8301"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><text id="text8305" x="15.536421" y="17.979942" fill="#000000" font-family="sans-serif" font-size="19.145px" letter-spacing="0px" stroke-width=".47863" text-align="center" text-anchor="middle" word-spacing="0px" style="line-height:1.25" xml:space="preserve"><tspan id="tspan8303" x="15.53642" y="17.979942" font-family="Carlito" font-weight="bold" stroke-width=".47863" text-align="center" text-anchor="middle">1h</tspan></text>
<line id="line8287" x1="25.712" x2="6.7701" y1="22.685" y2="22.685" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8289" transform="translate(-.22991)" points="25.47 24.417 25.463 20.953 28.467 22.68" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8291" transform="translate(-.22991)" points="6.988 24.417 3.993 22.676 7 20.953" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2" x1="2.1686" x2="2.1686" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2-1" x1="29.831" x2="29.831" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg8295" version="1.1" viewBox="0 0 32 32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata8301"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><g id="text8305" transform="scale(.89393 1.1187)" stroke-width=".42786" aria-label="1m"><path id="path4738" d="m8.0338 13.688h2.1477v-6.2173q0-0.38441 0.02507-0.80224l-1.4457 1.2451q-0.14206 0.11699-0.28413 0.14206-0.14206 0.02507-0.26741 0-0.12535-0.02507-0.22563-0.083566-0.091923-0.066853-0.14206-0.13371l-0.6351-0.86909 3.3343-2.8914h1.6546v9.6101h1.897v1.5042h-6.0586z"/><path id="path4740" d="m15.822 15.192v-8.2981h1.3036q0.20056 0 0.33427 0.091923 0.14206 0.091923 0.18385 0.28413l0.14206 0.58497q0.22563-0.23399 0.45962-0.43455 0.24234-0.20056 0.51811-0.34262 0.27577-0.15042 0.58496-0.23399 0.31755-0.083566 0.6936-0.083566 0.79388 0 1.3036 0.42619 0.51811 0.41783 0.76881 1.1114 0.20056-0.40948 0.49304-0.70196 0.30084-0.29248 0.66018-0.47633 0.35934-0.18385 0.7521-0.26741 0.40112-0.091923 0.80224-0.091923 0.70196 0 1.2451 0.21727 0.55154 0.20892 0.91923 0.61839 0.37605 0.40112 0.56825 0.98608 0.1922 0.58497 0.1922 1.3287v5.2814h-2.1226v-5.2814q0-1.4958-1.3371-1.4958-0.30084 0-0.5599 0.10028-0.25906 0.091923-0.45962 0.28413-0.1922 0.18385-0.3092 0.46797-0.10864 0.27577-0.10864 0.64346v5.2814h-2.1226v-5.2814q0-0.80224-0.33426-1.1449-0.33427-0.35098-0.96937-0.35098-0.42619 0-0.79388 0.1922-0.36769 0.1922-0.68524 0.54318v6.0419z"/></g>
<line id="line8287" x1="25.712" x2="6.7701" y1="22.685" y2="22.685" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8289" transform="translate(-.22991)" points="25.47 24.417 25.463 20.953 28.467 22.68" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8291" transform="translate(-.22991)" points="6.988 24.417 3.993 22.676 7 20.953" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2" x1="2.1686" x2="2.1686" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2-1" x1="29.831" x2="29.831" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg8295" version="1.1" viewBox="0 0 32 32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata8301"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><g id="text8305" transform="scale(.89393 1.1187)" stroke-width=".42786" aria-label="2m"><path id="path818" d="m7.344 15.192m3.9193-11.223q0.76881 0 1.3956 0.23399 0.6351 0.22563 1.078 0.64346 0.45126 0.41783 0.6936 1.0112 0.2507 0.58497 0.2507 1.2953 0 0.61004-0.17549 1.1365-0.17549 0.51811-0.46797 0.99444-0.29248 0.46797-0.68524 0.91923-0.39276 0.4429-0.82731 0.89416l-2.3566 2.4652q0.37605-0.11699 0.7521-0.17549 0.37605-0.06685 0.70196-0.06685h2.5154q0.31755 0 0.50976 0.18385 0.20056 0.18385 0.20056 0.48469v1.2034h-7.5043v-0.67689q0-0.1922 0.07521-0.40948 0.083566-0.22563 0.28413-0.41783l3.2257-3.3176q0.40948-0.42619 0.71867-0.81059 0.31755-0.38441 0.52647-0.76045 0.21727-0.38441 0.32591-0.76881 0.10864-0.39276 0.10864-0.81895 0-0.76881-0.38441-1.1616-0.3844-0.39276-1.0864-0.39276-0.30084 0-0.55154 0.091923-0.2507 0.09192-0.45126 0.2507-0.20056 0.15878-0.34262 0.37605-0.14206 0.21727-0.21727 0.46797-0.13371 0.38441-0.36769 0.5014-0.22563 0.11699-0.62675 0.05014l-1.0697-0.18385q0.12535-0.81059 0.45126-1.4123 0.32591-0.61004 0.81059-1.0112 0.49304-0.40948 1.1281-0.61004 0.6351-0.20892 1.3621-0.20892z"/><path id="path820" d="m16.528 15.192v-8.2981h1.3036q0.20056 0 0.33427 0.091923 0.14206 0.091923 0.18385 0.28413l0.14206 0.58497q0.22563-0.23399 0.45962-0.43455 0.24234-0.20056 0.51811-0.34262 0.27577-0.15042 0.58496-0.23399 0.31755-0.083566 0.6936-0.083566 0.79388 0 1.3036 0.42619 0.51811 0.41783 0.76881 1.1114 0.20056-0.40948 0.49304-0.70196 0.30084-0.29248 0.66018-0.47633 0.35934-0.18385 0.7521-0.26741 0.40112-0.091923 0.80224-0.091923 0.70196 0 1.2451 0.21727 0.55154 0.20892 0.91923 0.61839 0.37605 0.40112 0.56825 0.98608 0.1922 0.58497 0.1922 1.3287v5.2814h-2.1226v-5.2814q0-1.4958-1.3371-1.4958-0.30084 0-0.5599 0.10028-0.25906 0.091923-0.45962 0.28413-0.1922 0.18385-0.3092 0.46797-0.10864 0.27577-0.10864 0.64346v5.2814h-2.1226v-5.2814q0-0.80224-0.33427-1.1449-0.33427-0.35098-0.96937-0.35098-0.42619 0-0.79388 0.1922t-0.68524 0.54318v6.0419z"/></g>
<line id="line8287" x1="25.712" x2="6.7701" y1="22.685" y2="22.685" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8289" transform="translate(-.22991)" points="25.47 24.417 25.463 20.953 28.467 22.68" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8291" transform="translate(-.22991)" points="6.988 24.417 3.993 22.676 7 20.953" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2" x1="2.1686" x2="2.1686" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2-1" x1="29.831" x2="29.831" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg8295" version="1.1" viewBox="0 0 32 32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata8301"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><g id="text8305" transform="scale(.8179 1.2226)" stroke-width=".39147" aria-label="30m"><path id="path4731" d="m5.5188 13.97m3.7083-10.268q0.70342 0 1.2616 0.20644 0.5658 0.20644 0.95574 0.5658 0.38994 0.35171 0.59638 0.8334 0.21408 0.47404 0.21408 1.0169 0 0.48169-0.10704 0.84869-0.0994 0.367-0.29819 0.64225-0.19879 0.27525-0.48934 0.4664-0.29054 0.19115-0.65755 0.31348 1.7356 0.58873 1.7356 2.3473 0 0.77224-0.2829 1.361-0.27525 0.58109-0.7493 0.97867-0.4664 0.39759-1.0934 0.59638-0.61932 0.19879-1.3074 0.19879-0.72636 0-1.2845-0.16821-0.5505-0.16821-0.97103-0.50463-0.41288-0.34406-0.71871-0.84869-0.29819-0.50463-0.51227-1.1698l0.81046-0.34406q0.32113-0.12998 0.59638-0.06117 0.2829 0.06117 0.39759 0.29819 0.13763 0.25996 0.29054 0.48934 0.15292 0.22173 0.34406 0.39759 0.19879 0.16821 0.45111 0.26761 0.25231 0.0994 0.58109 0.0994 0.40523 0 0.70342-0.12998 0.30584-0.13763 0.50463-0.35171 0.19879-0.22173 0.29819-0.49698 0.0994-0.27525 0.0994-0.5505 0-0.35171-0.06881-0.64225-0.061173-0.29054-0.29055-0.49698-0.22173-0.20644-0.65755-0.32113-0.43582-0.11469-1.1851-0.11469v-1.3074q0.62696-0.00765 1.0245-0.11469 0.40523-0.10704 0.63461-0.29819 0.22938-0.19879 0.31348-0.4664 0.0841-0.26761 0.0841-0.59638 0-0.69578-0.35171-1.0475-0.34406-0.35171-0.97103-0.35171-0.55815 0-0.9328 0.31348-0.37464 0.31348-0.51992 0.77223-0.12233 0.35171-0.32877 0.45875-0.19879 0.10704-0.57344 0.045875l-0.97103-0.16821q0.10704-0.74165 0.40523-1.2922 0.29819-0.55815 0.7493-0.92515 0.45111-0.37465 1.0245-0.55815 0.58109-0.19115 1.2463-0.19115z"/><path id="path4733" d="m20.505 8.8852q0 1.3304-0.2829 2.3091-0.27525 0.97867-0.77224 1.6209-0.48934 0.64225-1.1622 0.95574-0.66519 0.30584-1.4451 0.30584t-1.4451-0.30584q-0.65755-0.31348-1.1469-0.95574-0.48934-0.64225-0.76459-1.6209-0.27525-0.97867-0.27525-2.3091 0-1.3304 0.27525-2.3014 0.27525-0.97867 0.76459-1.6133 0.48934-0.64225 1.1469-0.95574 0.66519-0.31348 1.4451-0.31348t1.4451 0.31348q0.67284 0.31348 1.1622 0.95574 0.49698 0.63461 0.77224 1.6133 0.2829 0.97103 0.2829 2.3014zm-1.9038 0q0-1.0857-0.15292-1.7891-0.14527-0.71107-0.38994-1.1239-0.24467-0.42052-0.5658-0.58109-0.31348-0.16821-0.6499-0.16821t-0.6499 0.16821q-0.30584 0.16056-0.5505 0.58109-0.23702 0.41288-0.38229 1.1239-0.14527 0.70342-0.14527 1.7891 0 1.0934 0.14527 1.8044 0.14527 0.70342 0.38229 1.1239 0.24467 0.41288 0.5505 0.58109 0.31348 0.16056 0.6499 0.16056t0.6499-0.16056q0.32113-0.16821 0.5658-0.58109 0.24467-0.42052 0.38994-1.1239 0.15292-0.71107 0.15292-1.8044z"/><path id="path4735" d="m21.82 13.97v-7.5924h1.1928q0.1835 0 0.30584 0.084105 0.12998 0.084105 0.16821 0.25996l0.12998 0.53521q0.20644-0.21408 0.42052-0.39759 0.22173-0.1835 0.47404-0.31348 0.25231-0.13763 0.53521-0.21408 0.29054-0.076459 0.63461-0.076459 0.72636 0 1.1928 0.38994 0.47404 0.38229 0.70342 1.0169 0.1835-0.37465 0.45111-0.64225 0.27525-0.26761 0.60402-0.43582 0.32877-0.16821 0.68813-0.24467 0.367-0.084105 0.734-0.084105 0.64225 0 1.1392 0.19879 0.50463 0.19115 0.84105 0.5658 0.34406 0.367 0.51992 0.90221 0.17586 0.53521 0.17586 1.2157v4.8322h-1.9421v-4.8322q0-1.3686-1.2233-1.3686-0.27525 0-0.51227 0.091751-0.23702 0.084105-0.42052 0.25996-0.17586 0.16821-0.2829 0.42817-0.0994 0.25231-0.0994 0.58873v4.8322h-1.9421v-4.8322q0-0.734-0.30584-1.0475-0.30584-0.32113-0.88692-0.32113-0.38994 0-0.72636 0.17586-0.33642 0.17586-0.62696 0.49698v5.528z"/></g>
<line id="line8287" x1="25.712" x2="6.7701" y1="22.685" y2="22.685" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8289" transform="translate(-.22991)" points="28.467 22.68 25.47 24.417 25.463 20.953" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8291" transform="translate(-.22991)" points="7 20.953 6.988 24.417 3.993 22.676" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2" x1="2.1686" x2="2.1686" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2-1" x1="29.831" x2="29.831" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg8295" version="1.1" viewBox="0 0 32 32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata8301"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><g id="text8305" transform="scale(.89393 1.1187)" stroke-width=".42786" aria-label="30s"><path id="path11914" d="m6.3287 15.192m4.053-11.223q0.76881 0 1.3788 0.22563 0.61839 0.22563 1.0446 0.61839 0.42619 0.38441 0.65182 0.91087 0.23399 0.51811 0.23399 1.1114 0 0.52647-0.11699 0.92759-0.10864 0.40112-0.32591 0.70196t-0.53482 0.50976q-0.31755 0.20892-0.71867 0.34262 1.897 0.64346 1.897 2.5655 0 0.84402-0.3092 1.4875-0.30084 0.6351-0.81895 1.0696-0.50976 0.43455-1.195 0.65182-0.67689 0.21727-1.429 0.21727-0.79388 0-1.4039-0.18385-0.60168-0.18385-1.0613-0.55154-0.45126-0.37605-0.78552-0.92759-0.32591-0.55154-0.5599-1.2786l0.8858-0.37605q0.35098-0.14206 0.65182-0.06685 0.3092 0.06685 0.43455 0.32591 0.15042 0.28413 0.31755 0.53482 0.16713 0.24234 0.37605 0.43454 0.21727 0.18385 0.49304 0.29248 0.27577 0.10864 0.6351 0.10864 0.4429 0 0.76881-0.14206 0.33427-0.15042 0.55154-0.3844 0.21727-0.24234 0.32591-0.54318t0.10864-0.60168q0-0.3844-0.07521-0.70196-0.06685-0.31755-0.31755-0.54318-0.24234-0.22563-0.71867-0.35098-0.47633-0.12535-1.2953-0.12535v-1.429q0.68525-0.00836 1.1198-0.12535 0.4429-0.11699 0.6936-0.32591 0.2507-0.21727 0.34262-0.50976 0.09192-0.29248 0.09192-0.65182 0-0.76045-0.38441-1.1449-0.37605-0.38441-1.0613-0.38441-0.61004 0-1.0195 0.34262-0.40947 0.34262-0.56825 0.84402-0.13371 0.38441-0.35934 0.5014-0.21727 0.11699-0.62675 0.05014l-1.0613-0.18385q0.11699-0.81059 0.4429-1.4123 0.32591-0.61004 0.81895-1.0112 0.49304-0.40948 1.1198-0.61004 0.6351-0.20892 1.3621-0.20892z"/><path id="path11916" d="m22.708 9.6346q0 1.4541-0.3092 2.5237-0.30084 1.0696-0.84402 1.7716-0.53483 0.70196-1.2702 1.0446-0.72703 0.33426-1.5794 0.33426t-1.5794-0.33426q-0.71867-0.34262-1.2535-1.0446t-0.83566-1.7716q-0.30084-1.0697-0.30084-2.5237 0-1.4541 0.30084-2.5153 0.30084-1.0697 0.83566-1.7633 0.53482-0.70196 1.2535-1.0446 0.72703-0.34262 1.5794-0.34262t1.5794 0.34262q0.73538 0.34262 1.2702 1.0446 0.54318 0.6936 0.84402 1.7633 0.3092 1.0613 0.3092 2.5153zm-2.0808 0q0-1.1866-0.16713-1.9555-0.15878-0.77717-0.42619-1.2284-0.26741-0.45962-0.61839-0.6351-0.34262-0.18385-0.71032-0.18385t-0.71032 0.18385q-0.33426 0.17549-0.60168 0.6351-0.25906 0.45126-0.41783 1.2284-0.15878 0.76881-0.15878 1.9555 0 1.195 0.15878 1.9722 0.15878 0.76881 0.41783 1.2284 0.26741 0.45126 0.60168 0.6351 0.34262 0.17549 0.71032 0.17549t0.71032-0.17549q0.35098-0.18385 0.61839-0.6351 0.26741-0.45962 0.42619-1.2284 0.16713-0.77717 0.16713-1.9722z"/><path id="path11918" d="m28.925 8.5649q-0.08357 0.14206-0.18385 0.20056-0.09192 0.05014-0.23399 0.05014-0.15042 0-0.31755-0.07521-0.15878-0.083566-0.35934-0.17549-0.1922-0.10028-0.4429-0.17549-0.2507-0.083566-0.57661-0.083566-0.5014 0-0.77717 0.23399-0.27577 0.22563-0.27577 0.61004 0 0.25906 0.15878 0.43455 0.15878 0.16713 0.41783 0.30084 0.26741 0.12535 0.59332 0.23399 0.33427 0.10864 0.68524 0.23399 0.35098 0.12535 0.67689 0.30084 0.33427 0.16713 0.59332 0.41783 0.26741 0.2507 0.42619 0.61004t0.15878 0.86073q0 0.60168-0.20892 1.1114t-0.61839 0.87745q-0.40112 0.36769-1.0028 0.57661-0.59332 0.20892-1.3788 0.20892-0.40112 0-0.79388-0.07521t-0.7521-0.20892q-0.35934-0.14206-0.67689-0.32591-0.3092-0.18385-0.53482-0.40112l0.49304-0.80224q0.09192-0.14206 0.21727-0.22563 0.12535-0.08357 0.32591-0.08357 0.18385 0 0.34262 0.10028 0.16713 0.10028 0.35934 0.22563 0.1922 0.11699 0.45962 0.21727 0.26741 0.10028 0.66853 0.10028 0.30084 0 0.50976-0.07521 0.21727-0.07521 0.34262-0.20056 0.13371-0.13371 0.1922-0.30084 0.06685-0.16713 0.06685-0.34262 0-0.36769-0.27577-0.56825-0.27577-0.20892-0.6936-0.35934-0.41783-0.15042-0.90252-0.3092-0.47633-0.15878-0.89416-0.43455-0.41783-0.27577-0.6936-0.72703-0.27577-0.45126-0.27577-1.195 0-0.51811 0.1922-0.97773 0.1922-0.46797 0.56825-0.81895 0.3844-0.35098 0.9443-0.5599 0.56825-0.20892 1.3203-0.20892 0.40948 0 0.79388 0.07521 0.38441 0.07521 0.71867 0.21727 0.34262 0.13371 0.61839 0.32591 0.28413 0.1922 0.5014 0.41783z"/></g>
<line id="line8287" x1="25.712" x2="6.7701" y1="22.685" y2="22.685" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8289" transform="translate(-.22991)" points="28.467 22.68 25.47 24.417 25.463 20.953" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8291" transform="translate(-.22991)" points="7 20.953 6.988 24.417 3.993 22.676" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2" x1="2.1686" x2="2.1686" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2-1" x1="29.831" x2="29.831" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg8295" version="1.1" viewBox="0 0 32 32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata8301"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><g id="text8305" transform="scale(.89393 1.1187)" stroke-width=".42786" aria-label="5m"><path id="path4726" d="m6.5547 15.192m6.936-10.254q0 0.42619-0.27577 0.70196-0.27577 0.26741-0.91087 0.26741h-2.8413l-0.36769 2.1811q0.66017-0.13371 1.2702-0.13371 0.85238 0 1.5042 0.26741 0.66018 0.25906 1.1031 0.71867t0.66853 1.078q0.22563 0.61839 0.22563 1.3287 0 0.8858-0.3092 1.6212-0.30084 0.72703-0.84402 1.2451t-1.2953 0.81059q-0.74374 0.28413-1.6295 0.28413-0.51811 0-0.98608-0.10864-0.45962-0.10864-0.86909-0.29248-0.40948-0.18385-0.76045-0.42619-0.34262-0.24234-0.61839-0.50976l0.61839-0.85238q0.20892-0.27577 0.51811-0.27577 0.20056 0 0.39276 0.12535 0.1922 0.11699 0.43455 0.26741 0.2507 0.15042 0.57661 0.27577 0.33427 0.11699 0.81059 0.11699 0.49304 0 0.85238-0.16713 0.36769-0.16713 0.61004-0.45962 0.24234-0.29248 0.35934-0.68524 0.12535-0.40112 0.12535-0.86909 0-0.8858-0.49304-1.3705-0.49304-0.48469-1.429-0.48469-0.37605 0-0.76045 0.07521-0.38441 0.066853-0.76881 0.20892l-1.2451-0.34262 0.90252-5.4402h5.4318z"/><path id="path4728" d="m15.822 15.192v-8.2981h1.3036q0.20056 0 0.33427 0.091923 0.14206 0.091923 0.18385 0.28413l0.14206 0.58497q0.22563-0.23399 0.45962-0.43455 0.24234-0.20056 0.51811-0.34262 0.27577-0.15042 0.58496-0.23399 0.31755-0.083566 0.6936-0.083566 0.79388 0 1.3036 0.42619 0.51811 0.41783 0.76881 1.1114 0.20056-0.40948 0.49304-0.70196 0.30084-0.29248 0.66018-0.47633 0.35934-0.18385 0.7521-0.26741 0.40112-0.091923 0.80224-0.091923 0.70196 0 1.2451 0.21727 0.55154 0.20892 0.91923 0.61839 0.37605 0.40112 0.56825 0.98608 0.1922 0.58497 0.1922 1.3287v5.2814h-2.1226v-5.2814q0-1.4958-1.3371-1.4958-0.30084 0-0.5599 0.10028-0.25906 0.091923-0.45962 0.28413-0.1922 0.18385-0.3092 0.46797-0.10864 0.27577-0.10864 0.64346v5.2814h-2.1226v-5.2814q0-0.80224-0.33426-1.1449-0.33427-0.35098-0.96937-0.35098-0.42619 0-0.79388 0.1922-0.36769 0.1922-0.68524 0.54318v6.0419z"/></g>
<line id="line8287" x1="25.712" x2="6.7701" y1="22.685" y2="22.685" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8289" transform="translate(-.22991)" points="25.47 24.417 25.463 20.953 28.467 22.68" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8291" transform="translate(-.22991)" points="6.988 24.417 3.993 22.676 7 20.953" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2" x1="2.1686" x2="2.1686" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><line id="line8287-2-1" x1="29.831" x2="29.831" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg8295" version="1.1" viewBox="0 0 32 32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata8301"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><line id="line8287" x1="25.712" x2="6.7701" y1="22.685" y2="22.685" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8289" transform="translate(-.22991)" points="25.463 20.953 28.467 22.68 25.47 24.417" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><polygon id="polygon8291" transform="translate(-.22991)" points="3.993 22.676 7 20.953 6.988 24.417" fill="#00a14b" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/><g id="text8305" transform="scale(1.1483 .87086)" aria-label="x"><path id="path4723" d="m12.146 13.723-2.9627-5.1633h2.6192q0.28983 0 0.41864 0.085875 0.13955 0.075141 0.24689 0.25763l1.6853 3.2633q0.05367-0.12881 0.11808-0.25763 0.06441-0.13955 0.15028-0.2791l1.1593-2.6836q0.23616-0.38644 0.60113-0.38644h2.5011l-2.9734 5.0237 3.1022 5.6356h-2.6192q-0.28983 0-0.47231-0.15028-0.18249-0.16102-0.28983-0.3435l-1.696-3.3813q-0.04294 0.11808-0.09661 0.22542-0.04294 0.10734-0.09661 0.19322l-1.3418 2.9627q-0.11808 0.18248-0.28983 0.3435-0.16102 0.15028-0.42938 0.15028h-2.426z" stroke-width=".5496"/></g>
<line id="line8287-2" x1="2.1686" x2="2.1686" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5" style="font-variant-east_asian:normal"/><line id="line8287-2-1" x1="29.831" x2="29.831" y1="26.413" y2="18.957" fill="none" stroke="#00a14b" stroke-miterlimit="10" stroke-width="1.5"/></svg>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment