Commit e3baf254 authored by Edwin Carlinet's avatar Edwin Carlinet
Browse files

Merge branch 'development/maxtrees-integration' into 'development/ranges'

Port Maxtree and ToS Algorithm

See merge request !86
parents e21324e4 2d509995
Pipeline #15968 failed with stages
in 102 minutes and 2 seconds
...@@ -14,7 +14,6 @@ find_package(Boost 1.58 COMPONENTS program_options REQUIRED) ...@@ -14,7 +14,6 @@ find_package(Boost 1.58 COMPONENTS program_options REQUIRED)
find_package(FreeImage REQUIRED) find_package(FreeImage REQUIRED)
find_package(TBB) find_package(TBB)
find_package(Qt4) find_package(Qt4)
find_package(range-v3 REQUIRED)
# CONFIGURE COMPILER LAUNCHERS # CONFIGURE COMPILER LAUNCHERS
......
...@@ -357,16 +357,17 @@ int accumulate_accu(const mln::experimental::image2d<uint8_t>& ima) ...@@ -357,16 +357,17 @@ int accumulate_accu(const mln::experimental::image2d<uint8_t>& ima)
return mln::accumulate(ima, mln::accu::features::sum<int>()); return mln::accumulate(ima, mln::accu::features::sum<int>());
} }
using point_t = mln::image_point_t<mln::experimental::image2d<uint8_t>>;
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<uint8_t>& ima) std::vector<point_t> sort_points(const mln::experimental::image2d<uint8_t>& ima)
{ {
return mln::experimental::sort_points(ima); return mln::experimental::sort_points(ima);
} }
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<int>& ima) std::vector<point_t> sort_points(const mln::experimental::image2d<int>& ima)
{ {
return mln::experimental::sort_points(ima); return mln::experimental::sort_points(ima);
} }
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<mln::rgb8>& ima) std::vector<point_t> sort_points(const mln::experimental::image2d<mln::rgb8>& ima)
{ {
return mln::experimental::sort_points(ima, mln::lexicographicalorder_less<mln::rgb8>()); return mln::experimental::sort_points(ima, mln::lexicographicalorder_less<mln::rgb8>());
} }
...@@ -54,9 +54,11 @@ int accumulate_baseline(const mln::experimental::image2d<uint8_t>& ima); ...@@ -54,9 +54,11 @@ int accumulate_baseline(const mln::experimental::image2d<uint8_t>& ima);
int accumulate_accu(const mln::experimental::image2d<uint8_t>& ima); int accumulate_accu(const mln::experimental::image2d<uint8_t>& ima);
int accumulate(const mln::experimental::image2d<uint8_t>& ima); int accumulate(const mln::experimental::image2d<uint8_t>& ima);
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<uint8_t>& ima); using point_t = mln::image_point_t<mln::experimental::image2d<uint8_t>>;
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<int>& ima);
std::vector<mln::experimental::point2d> sort_points(const mln::experimental::image2d<mln::rgb8>& ima); std::vector<point_t> sort_points(const mln::experimental::image2d<uint8_t>& ima);
std::vector<point_t> sort_points(const mln::experimental::image2d<int>& ima);
std::vector<point_t> sort_points(const mln::experimental::image2d<mln::rgb8>& ima);
class BMAlgorithms : public benchmark::Fixture class BMAlgorithms : public benchmark::Fixture
{ {
......
#include <mln/core/algorithm/transform.hpp>
#include <mln/core/colors.hpp>
#include <mln/core/image/experimental/ndimage.hpp>
#include <mln/core/neighborhood/c4.hpp>
#include <mln/core/neighb2d.hpp>
#include <mln/io/experimental/imread.hpp>
#include <mln/morpho/experimental/maxtree.hpp>
#include <mln/morpho/maxtree/maxtree.hpp>
#include <benchmark/benchmark.h>
#include <fixtures/ImagePath/image_path.hpp>
class BMMorpho : public benchmark::Fixture
{
public:
using image_t = mln::experimental::image2d<uint8_t>;
using image_ref_t = mln::image2d<uint8_t>;
BMMorpho()
{
if (!g_loaded)
{
const char* filename = "Aerial_view_of_Olbia.jpg";
mln::experimental::image2d<mln::rgb8> input;
mln::io::experimental::imread(filename, input);
g_input = mln::transform(input, [](mln::rgb8 x) -> uint8_t { return x[0]; });
g_loaded = true;
}
m_input = g_input;
int nr = m_input.width();
int nc = m_input.height();
mln::resize(m_output, m_input);
m_size = nr * nc;
m_input.to(m_input_, false);
m_output.to(m_output_, false);
}
void run(benchmark::State& st, std::function<void(const image_t& input)> callback)
{
for (auto _ : st)
callback(m_input);
st.SetBytesProcessed(int64_t(st.iterations()) * int64_t(m_size));
}
void run2(benchmark::State& st, std::function<void(const image_ref_t& input)> callback)
{
for (auto _ : st)
callback(m_input_);
st.SetBytesProcessed(int64_t(st.iterations()) * int64_t(m_size));
}
protected:
static bool g_loaded;
static mln::experimental::image2d<uint8_t> g_input;
mln::experimental::image2d<uint8_t> m_input;
mln::experimental::image2d<uint8_t> m_output;
std::size_t m_size;
mln::image2d<uint8_t> m_input_;
mln::image2d<uint8_t> m_output_;
};
bool BMMorpho::g_loaded = false;
mln::experimental::image2d<uint8_t> BMMorpho::g_input;
BENCHMARK_F(BMMorpho, MaxtreeNew)(benchmark::State& st)
{
auto f = [](const image_t& input) { mln::morpho::experimental::maxtree(input, mln::experimental::c4); };
this->run(st, f);
}
BENCHMARK_F(BMMorpho, MaxtreeRef)(benchmark::State& st)
{
auto f = [](const image_ref_t& input) { mln::morpho::maxtree_indexes(input, mln::c4); };
this->run2(st, f);
}
BENCHMARK_MAIN();
#include <mln/core/algorithm/transform.hpp>
#include <mln/core/colors.hpp>
#include <mln/core/image/experimental/ndimage.hpp>
#include <mln/core/neighborhood/c4.hpp>
#include <mln/core/neighb2d.hpp>
#include <mln/io/experimental/imread.hpp>
#include <mln/morpho/experimental/tos.hpp>
#include <mln/morpho/tos/tos.hpp>
#include <benchmark/benchmark.h>
#include <fixtures/ImagePath/image_path.hpp>
class BMMorpho : public benchmark::Fixture
{
public:
using image_t = mln::experimental::image2d<uint8_t>;
using image_ref_t = mln::image2d<uint8_t>;
BMMorpho()
{
if (!g_loaded)
{
const char* filename = "Aerial_view_of_Olbia.jpg";
mln::experimental::image2d<mln::rgb8> input;
mln::io::experimental::imread(filename, input);
g_input = mln::transform(input, [](mln::rgb8 x) -> uint8_t { return x[0]; });
g_loaded = true;
}
m_input = g_input;
int nr = m_input.width();
int nc = m_input.height();
mln::resize(m_output, m_input);
m_size = nr * nc;
m_input.to(m_input_, false);
m_output.to(m_output_, false);
}
void run(benchmark::State& st, std::function<void(const image_t& input)> callback)
{
for (auto _ : st)
callback(m_input);
st.SetBytesProcessed(int64_t(st.iterations()) * int64_t(m_size));
}
void run2(benchmark::State& st, std::function<void(const image_ref_t& input)> callback)
{
for (auto _ : st)
callback(m_input_);
st.SetBytesProcessed(int64_t(st.iterations()) * int64_t(m_size));
}
protected:
static bool g_loaded;
static mln::experimental::image2d<uint8_t> g_input;
mln::experimental::image2d<uint8_t> m_input;
mln::experimental::image2d<uint8_t> m_output;
std::size_t m_size;
mln::image2d<uint8_t> m_input_;
mln::image2d<uint8_t> m_output_;
};
bool BMMorpho::g_loaded = false;
mln::experimental::image2d<uint8_t> BMMorpho::g_input;
BENCHMARK_F(BMMorpho, ToSNew)(benchmark::State& st)
{
auto f = [](const image_t& input) { mln::morpho::experimental::tos(input, input.domain().tl()); };
this->run(st, f);
}
BENCHMARK_F(BMMorpho, ToSRef)(benchmark::State& st)
{
auto f = [](const image_ref_t& input) { mln::morpho::tos(input); };
this->run2(st, f);
}
BENCHMARK_MAIN();
...@@ -66,6 +66,8 @@ set_source_files_properties(${src_standalone} PROPERTIES COMPILE_FLAGS ${STANDAL ...@@ -66,6 +66,8 @@ set_source_files_properties(${src_standalone} PROPERTIES COMPILE_FLAGS ${STANDAL
add_benchmark(BMAlgorithms BMAlgorithms.cpp BMAlgorithms_main.cpp) add_benchmark(BMAlgorithms BMAlgorithms.cpp BMAlgorithms_main.cpp)
add_benchmark(BMNeighborhood BMNeighborhood.cpp BMNeighborhood_main.cpp) add_benchmark(BMNeighborhood BMNeighborhood.cpp BMNeighborhood_main.cpp)
add_benchmark(BMRotation BMRotation.cpp) add_benchmark(BMRotation BMRotation.cpp)
add_benchmark(BMMorphoMaxtree BMMorphoMaxtree.cpp)
add_benchmark(BMMorphoTos BMMorphoTos.cpp)
add_benchmark(BMMorphoBase BMMorphoBase.cpp) add_benchmark(BMMorphoBase BMMorphoBase.cpp)
add_benchmark(BMMorphoBaseRef BMMorphoBaseRef.cpp) add_benchmark(BMMorphoBaseRef BMMorphoBaseRef.cpp)
add_benchmark(BMMorphers BMMorphers.cpp BMMorphers_main.cpp) add_benchmark(BMMorphers BMMorphers.cpp BMMorphers_main.cpp)
......
...@@ -15,7 +15,7 @@ class Pylene(ConanFile): ...@@ -15,7 +15,7 @@ class Pylene(ConanFile):
default_options = ("gtest=False", "benchmark=False", "freeimage=False", "boost=False", default_options = ("gtest=False", "benchmark=False", "freeimage=False", "boost=False",
# TO REMOVE once docker image is fixed with the buildfarm profile updated # TO REMOVE once docker image is fixed with the buildfarm profile updated
"boost_program_options=False") "boost_program_options=False")
generators = "cmake_paths" generators = [ "cmake_paths", "cmake_find_package" ]
exports_sources = ["pylene/*", "cmake/*", "CMakeLists.txt", "LICENSE"] exports_sources = ["pylene/*", "cmake/*", "CMakeLists.txt", "LICENSE"]
def get_cmake_config(self): def get_cmake_config(self):
...@@ -41,7 +41,7 @@ class Pylene(ConanFile): ...@@ -41,7 +41,7 @@ class Pylene(ConanFile):
def requirements(self): def requirements(self):
self.requires("range-v3/0.5.0@lrde/patched") self.requires("range-v3/0.5.0@lrde/patched")
self.requires("cmcstl2/head@lrde/testing") self.requires("cmcstl2/head@lrde/testing")
self.requires("fmt/5.3.0@bincrafters/stable") self.requires("fmt/[>=6.0 <6.1]")
if self.options.freeimage: if self.options.freeimage:
self.requires("freeimage/3.18.0@dutiona/stable") self.requires("freeimage/3.18.0@dutiona/stable")
......
...@@ -6,26 +6,24 @@ Include :file:`<mln/core/algorithm/sort.hpp>` ...@@ -6,26 +6,24 @@ Include :file:`<mln/core/algorithm/sort.hpp>`
.. cpp:namespace:: mln .. cpp:namespace:: mln
#. .. cpp:function:: void sort_points(InputImage ima, OutputRange&& rng) #. .. cpp:function:: void sort_points(InputImage ima, OutputRange&& rng)
#. .. cpp:function:: void sort_points(InputImage ima, OutputRange&& rng, Compare cmp) void sort_points(InputImage ima, OutputRange&& rng, Compare cmp)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> sort_points(InputImage ima, OutputRange&& rng) #. .. cpp:function:: std::vector<image_point_t<InputImage>> sort_points(InputImage ima, OutputRange&& rng)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> sort_points(InputImage ima, OutputRange&& rng, Compare cmp) std::vector<image_point_t<InputImage>> sort_points(InputImage ima, OutputRange&& rng, Compare cmp)
#. .. cpp:function:: void sort_indexes(InputImage ima, OutputRange&& rng) #. .. cpp:function:: void sort_indexes(InputImage ima, OutputRange&& rng)
#. .. cpp:function:: void sort_indexes(InputImage ima, OutputRange&& rng, Compare cmp) void sort_indexes(InputImage ima, OutputRange&& rng, Compare cmp)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> \ #. .. cpp:function:: std::vector<image_point_t<InputImage>> sort_indexes(InputImage ima, OutputRange&& rng)
sort_indexes(InputImage ima, OutputRange&& rng) std::vector<image_point_t<InputImage>> sort_indexes(InputImage ima, OutputRange&& rng, Compare cmp)
#. .. cpp:function:: std::vector<image_point_t<InputImage>> \
sort_indexes(InputImage ima, OutputRange&& rng, Compare cmp)
Sort the points (versions 1-4) or the indexes (versions 5-8) of an image w.r.t their values. Sort the points (versions 1-2) or the indexes (versions 3-4) of an image w.r.t their values.
:param ima: The source image :param ima: The source image
:param rng: (versions 1,2,5,6) The destination range where points or indexes are going to be stored. :param rng: (versions 1,3) The destination range where points or indexes are going to be stored.
:param cmp: (versions 2,4,6,8) The comparison function between values :param cmp: (optional) The comparison function between values
:tparam InputImage: A model of :cpp:concept:`InputImage` :tparam InputImage: A model of :cpp:concept:`InputImage`
:tparam OutputRange: A model of :cpp:concept:`OutputRange` :tparam OutputRange: A model of :cpp:concept:`OutputRange`
:tparam Compare: A model of :cpp:concept:`Compare` :tparam Compare: A model of :cpp:concept:`Compare`
:return: (versions 3,4,7,8) A `std::vector` with the points or the indexes sorted. :return: (versions 2-4) A `std::vector` with the points or the indexes sorted.
......
This diff is collapsed.
This diff is collapsed.
\tikzset{
class/.style={draw, fill=LightYellow},
template/.style={label={[mTemplateNodeStyle]north east:#1}},
realization/.style={-Latex[open]},
%%
mTemplateNodeStyle/.style={fill=white,draw,dashed,font={\tt\small}, inner sep=2pt, anchor=center}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="95.268pt" height="92.717pt" viewBox="0 0 95.268 92.717" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 2.21875 -3.65625 L 2.21875 -6.09375 C 2.21875 -6.4375 2.234375 -6.5 2.703125 -6.5 L 3.9375 -6.5 C 4.90625 -6.5 5.25 -5.65625 5.25 -5.125 C 5.25 -4.484375 4.765625 -3.65625 3.65625 -3.65625 Z M 4.5625 -3.5625 C 5.53125 -3.75 6.21875 -4.390625 6.21875 -5.125 C 6.21875 -5.984375 5.296875 -6.8125 4 -6.8125 L 0.359375 -6.8125 L 0.359375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.390625 -6.390625 1.390625 -6.03125 L 1.390625 -0.78125 C 1.390625 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.359375 -0.3125 L 0.359375 0 L 4.265625 0 C 5.59375 0 6.484375 -0.890625 6.484375 -1.828125 C 6.484375 -2.6875 5.671875 -3.4375 4.5625 -3.5625 Z M 3.953125 -0.3125 L 2.703125 -0.3125 C 2.234375 -0.3125 2.21875 -0.375 2.21875 -0.703125 L 2.21875 -3.421875 L 4.09375 -3.421875 C 5.078125 -3.421875 5.5 -2.5 5.5 -1.828125 C 5.5 -1.125 4.96875 -0.3125 3.953125 -0.3125 Z M 3.953125 -0.3125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 3.96875 -6.9375 C 3.921875 -7.0625 3.890625 -7.140625 3.734375 -7.140625 C 3.578125 -7.140625 3.546875 -7.078125 3.5 -6.9375 L 1.4375 -0.984375 C 1.25 -0.46875 0.859375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.546875 -0.015625 0.984375 -0.03125 1.328125 -0.03125 C 1.640625 -0.03125 2.15625 -0.015625 2.484375 0 L 2.484375 -0.3125 C 1.984375 -0.3125 1.734375 -0.5625 1.734375 -0.8125 C 1.734375 -0.84375 1.75 -0.953125 1.75 -0.96875 L 2.21875 -2.265625 L 4.671875 -2.265625 L 5.203125 -0.75 C 5.21875 -0.703125 5.234375 -0.640625 5.234375 -0.609375 C 5.234375 -0.3125 4.671875 -0.3125 4.40625 -0.3125 L 4.40625 0 C 4.765625 -0.03125 5.46875 -0.03125 5.84375 -0.03125 C 6.265625 -0.03125 6.734375 -0.015625 7.140625 0 L 7.140625 -0.3125 L 6.96875 -0.3125 C 6.375 -0.3125 6.234375 -0.375 6.125 -0.703125 Z M 3.4375 -5.828125 L 4.5625 -2.578125 L 2.328125 -2.578125 Z M 3.4375 -5.828125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 2.03125 -0.015625 C 2.03125 -0.640625 1.78125 -1.0625 1.390625 -1.0625 C 1.03125 -1.0625 0.859375 -0.78125 0.859375 -0.53125 C 0.859375 -0.265625 1.03125 0 1.390625 0 C 1.546875 0 1.671875 -0.0625 1.765625 -0.140625 L 1.78125 -0.15625 C 1.796875 -0.15625 1.796875 -0.15625 1.796875 -0.015625 C 1.796875 0.625 1.53125 1.234375 1.09375 1.703125 C 1.03125 1.765625 1.015625 1.78125 1.015625 1.8125 C 1.015625 1.890625 1.0625 1.921875 1.109375 1.921875 C 1.234375 1.921875 2.03125 1.140625 2.03125 -0.015625 Z M 2.03125 -0.015625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 5.796875 -6.78125 L 0.328125 -6.78125 L 0.328125 -6.46875 L 0.5625 -6.46875 C 1.328125 -6.46875 1.359375 -6.359375 1.359375 -6 L 1.359375 -0.78125 C 1.359375 -0.421875 1.328125 -0.3125 0.5625 -0.3125 L 0.328125 -0.3125 L 0.328125 0 C 0.671875 -0.03125 1.453125 -0.03125 1.84375 -0.03125 C 2.25 -0.03125 3.15625 -0.03125 3.515625 0 L 3.515625 -0.3125 L 3.1875 -0.3125 C 2.25 -0.3125 2.25 -0.4375 2.25 -0.78125 L 2.25 -3.234375 L 3.09375 -3.234375 C 4.0625 -3.234375 4.15625 -2.921875 4.15625 -2.078125 L 4.40625 -2.078125 L 4.40625 -4.71875 L 4.15625 -4.71875 C 4.15625 -3.875 4.0625 -3.546875 3.09375 -3.546875 L 2.25 -3.546875 L 2.25 -6.078125 C 2.25 -6.40625 2.265625 -6.46875 2.734375 -6.46875 L 3.921875 -6.46875 C 5.421875 -6.46875 5.671875 -5.90625 5.828125 -4.53125 L 6.078125 -4.53125 Z M 5.796875 -6.78125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 7.1875 -3.375 C 7.1875 -5.40625 5.6875 -7.03125 3.875 -7.03125 C 2.078125 -7.03125 0.5625 -5.4375 0.5625 -3.375 C 0.5625 -1.328125 2.09375 0.21875 3.875 0.21875 C 5.6875 0.21875 7.1875 -1.359375 7.1875 -3.375 Z M 3.875 -0.046875 C 2.921875 -0.046875 1.578125 -0.921875 1.578125 -3.515625 C 1.578125 -6.09375 3.046875 -6.78125 3.875 -6.78125 C 4.734375 -6.78125 6.15625 -6.078125 6.15625 -3.515625 C 6.15625 -0.875 4.796875 -0.046875 3.875 -0.046875 Z M 3.875 -0.046875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 0.5625 -3.40625 C 0.5625 -1.34375 2.171875 0.21875 4.03125 0.21875 C 5.65625 0.21875 6.625 -1.171875 6.625 -2.328125 C 6.625 -2.421875 6.625 -2.5 6.5 -2.5 C 6.390625 -2.5 6.390625 -2.4375 6.375 -2.328125 C 6.296875 -0.90625 5.234375 -0.09375 4.140625 -0.09375 C 3.53125 -0.09375 1.578125 -0.421875 1.578125 -3.40625 C 1.578125 -6.375 3.53125 -6.71875 4.140625 -6.71875 C 5.21875 -6.71875 6.109375 -5.8125 6.3125 -4.359375 C 6.328125 -4.21875 6.328125 -4.1875 6.46875 -4.1875 C 6.625 -4.1875 6.625 -4.21875 6.625 -4.421875 L 6.625 -6.78125 C 6.625 -6.953125 6.625 -7.03125 6.515625 -7.03125 C 6.484375 -7.03125 6.4375 -7.03125 6.359375 -6.90625 L 5.859375 -6.171875 C 5.5 -6.53125 4.984375 -7.03125 4.03125 -7.03125 C 2.15625 -7.03125 0.5625 -5.4375 0.5625 -3.40625 Z M 0.5625 -3.40625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-7">
<path style="stroke:none;" d="M 0.34375 -6.8125 L 0.34375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.375 -6.390625 1.375 -6.03125 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 L 4 0 C 5.671875 0 7.046875 -1.46875 7.046875 -3.34375 C 7.046875 -5.25 5.703125 -6.8125 4 -6.8125 Z M 2.71875 -0.3125 C 2.25 -0.3125 2.234375 -0.375 2.234375 -0.703125 L 2.234375 -6.09375 C 2.234375 -6.4375 2.25 -6.5 2.71875 -6.5 L 3.71875 -6.5 C 4.34375 -6.5 5.03125 -6.28125 5.53125 -5.578125 C 5.96875 -4.984375 6.046875 -4.125 6.046875 -3.34375 C 6.046875 -2.25 5.859375 -1.640625 5.5 -1.15625 C 5.296875 -0.890625 4.734375 -0.3125 3.734375 -0.3125 Z M 2.71875 -0.3125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-8">
<path style="stroke:none;" d="M 1.359375 -0.78125 C 1.359375 -0.421875 1.328125 -0.3125 0.5625 -0.3125 L 0.328125 -0.3125 L 0.328125 0 L 6.078125 0 L 6.5 -2.578125 L 6.25 -2.578125 C 6 -1.03125 5.765625 -0.3125 4.0625 -0.3125 L 2.734375 -0.3125 C 2.265625 -0.3125 2.25 -0.375 2.25 -0.703125 L 2.25 -3.375 L 3.140625 -3.375 C 4.109375 -3.375 4.21875 -3.046875 4.21875 -2.203125 L 4.46875 -2.203125 L 4.46875 -4.84375 L 4.21875 -4.84375 C 4.21875 -3.984375 4.109375 -3.671875 3.140625 -3.671875 L 2.25 -3.671875 L 2.25 -6.078125 C 2.25 -6.40625 2.265625 -6.46875 2.734375 -6.46875 L 4.015625 -6.46875 C 5.546875 -6.46875 5.8125 -5.921875 5.96875 -4.53125 L 6.21875 -4.53125 L 5.9375 -6.78125 L 0.328125 -6.78125 L 0.328125 -6.46875 L 0.5625 -6.46875 C 1.328125 -6.46875 1.359375 -6.359375 1.359375 -6 Z M 1.359375 -0.78125 "/>
</symbol>
</g>
</defs>
<g id="surface1">
<path style="fill-rule:nonzero;fill:rgb(19.999695%,19.999695%,19.999695%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -6.848844 -6.725406 L 6.850375 -6.725406 L 6.850375 6.723813 L -6.848844 6.723813 Z M -6.848844 -6.725406 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="44.106" y="11.495"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(59.999084%,59.999084%,59.999084%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -42.051969 -33.205875 L -15.348844 -33.205875 L -15.348844 -17.819156 L -42.051969 -17.819156 Z M -42.051969 -33.205875 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="8.902" y="36.038"/>
<use xlink:href="#glyph0-3" x="16.37395" y="36.038"/>
</g>
<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="22.459106" y="36.038"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -7.048063 -6.264469 L -19.8215 -17.619937 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -45.462125 -83.260562 L -31.0715 -83.260562 L -31.0715 -69.811344 L -45.462125 -69.811344 Z M -45.462125 -83.260562 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="5.492" y="88.03"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -30.180875 -33.405094 L -36.969938 -69.612125 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<path style="fill-rule:nonzero;fill:rgb(89.99939%,89.99939%,89.99939%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -26.051969 -57.748844 L -12.216031 -57.748844 L -12.216031 -44.299625 L -26.051969 -44.299625 Z M -26.051969 -57.748844 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-6" x="24.903" y="62.518"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -25.743375 -33.405094 L -21.731656 -44.100406 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<path style="fill-rule:nonzero;fill:rgb(89.99939%,89.99939%,89.99939%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 2.440219 -57.748844 L 16.694125 -57.748844 L 16.694125 -44.299625 L 2.440219 -44.299625 Z M 2.440219 -57.748844 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-7" x="53.396" y="62.518"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 1.299594 -6.924625 L 8.268344 -44.100406 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<path style="fill-rule:nonzero;fill:rgb(89.99939%,89.99939%,89.99939%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 21.991 -57.748844 L 35.412875 -57.748844 L 35.412875 -44.299625 L 21.991 -44.299625 Z M 21.991 -57.748844 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-8" x="72.945" y="62.518"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.893344 -6.924625 L 24.807406 -44.100406 " transform="matrix(1,0,0,-1,47.634,8.091)"/>
</g>
</svg>
\documentclass[tikz, border=0 3pt 0 3pt]{standalone}
\begin{document}
\begin{tikzpicture}[scale=0.9]
\tikzset{every node/.style={draw=black, rectangle}}
\path[use as bounding box] (-1.75,0.2) rectangle (1.75,-3.2);
% \foreach \x in {0,1,...,3} {
% \draw[gray, dashed] (-1.75,-\x) -- (1.75,-\x);
% }
\node[white, draw=black, fill=black!80] {B}
[level distance=1cm, sibling distance=.75cm]
child { node[white, draw=black, fill=black!40] {A, F} [sibling distance=.75cm]
child[level distance=2cm] { node[fill=white] {O} }
child { node[fill=black!10] {C} }
}
child[missing]
child[level distance=2cm] { node[fill=black!10] {D} }
child[level distance=2cm] { node[fill=black!10] {E} }
;
\end{tikzpicture}
\end{document}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="82.512pt" height="92.717pt" viewBox="0 0 82.512 92.717" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 7.1875 -3.375 C 7.1875 -5.40625 5.6875 -7.03125 3.875 -7.03125 C 2.078125 -7.03125 0.5625 -5.4375 0.5625 -3.375 C 0.5625 -1.328125 2.09375 0.21875 3.875 0.21875 C 5.6875 0.21875 7.1875 -1.359375 7.1875 -3.375 Z M 3.875 -0.046875 C 2.921875 -0.046875 1.578125 -0.921875 1.578125 -3.515625 C 1.578125 -6.09375 3.046875 -6.78125 3.875 -6.78125 C 4.734375 -6.78125 6.15625 -6.078125 6.15625 -3.515625 C 6.15625 -0.875 4.796875 -0.046875 3.875 -0.046875 Z M 3.875 -0.046875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 0.5625 -3.40625 C 0.5625 -1.34375 2.171875 0.21875 4.03125 0.21875 C 5.65625 0.21875 6.625 -1.171875 6.625 -2.328125 C 6.625 -2.421875 6.625 -2.5 6.5 -2.5 C 6.390625 -2.5 6.390625 -2.4375 6.375 -2.328125 C 6.296875 -0.90625 5.234375 -0.09375 4.140625 -0.09375 C 3.53125 -0.09375 1.578125 -0.421875 1.578125 -3.40625 C 1.578125 -6.375 3.53125 -6.71875 4.140625 -6.71875 C 5.21875 -6.71875 6.109375 -5.8125 6.3125 -4.359375 C 6.328125 -4.21875 6.328125 -4.1875 6.46875 -4.1875 C 6.625 -4.1875 6.625 -4.21875 6.625 -4.421875 L 6.625 -6.78125 C 6.625 -6.953125 6.625 -7.03125 6.515625 -7.03125 C 6.484375 -7.03125 6.4375 -7.03125 6.359375 -6.90625 L 5.859375 -6.171875 C 5.5 -6.53125 4.984375 -7.03125 4.03125 -7.03125 C 2.15625 -7.03125 0.5625 -5.4375 0.5625 -3.40625 Z M 0.5625 -3.40625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 2.03125 -0.015625 C 2.03125 -0.640625 1.78125 -1.0625 1.390625 -1.0625 C 1.03125 -1.0625 0.859375 -0.78125 0.859375 -0.53125 C 0.859375 -0.265625 1.03125 0 1.390625 0 C 1.546875 0 1.671875 -0.0625 1.765625 -0.140625 L 1.78125 -0.15625 C 1.796875 -0.15625 1.796875 -0.15625 1.796875 -0.015625 C 1.796875 0.625 1.53125 1.234375 1.09375 1.703125 C 1.03125 1.765625 1.015625 1.78125 1.015625 1.8125 C 1.015625 1.890625 1.0625 1.921875 1.109375 1.921875 C 1.234375 1.921875 2.03125 1.140625 2.03125 -0.015625 Z M 2.03125 -0.015625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 0.34375 -6.8125 L 0.34375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.375 -6.390625 1.375 -6.03125 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 L 4 0 C 5.671875 0 7.046875 -1.46875 7.046875 -3.34375 C 7.046875 -5.25 5.703125 -6.8125 4 -6.8125 Z M 2.71875 -0.3125 C 2.25 -0.3125 2.234375 -0.375 2.234375 -0.703125 L 2.234375 -6.09375 C 2.234375 -6.4375 2.25 -6.5 2.71875 -6.5 L 3.71875 -6.5 C 4.34375 -6.5 5.03125 -6.28125 5.53125 -5.578125 C 5.96875 -4.984375 6.046875 -4.125 6.046875 -3.34375 C 6.046875 -2.25 5.859375 -1.640625 5.5 -1.15625 C 5.296875 -0.890625 4.734375 -0.3125 3.734375 -0.3125 Z M 2.71875 -0.3125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 1.359375 -0.78125 C 1.359375 -0.421875 1.328125 -0.3125 0.5625 -0.3125 L 0.328125 -0.3125 L 0.328125 0 L 6.078125 0 L 6.5 -2.578125 L 6.25 -2.578125 C 6 -1.03125 5.765625 -0.3125 4.0625 -0.3125 L 2.734375 -0.3125 C 2.265625 -0.3125 2.25 -0.375 2.25 -0.703125 L 2.25 -3.375 L 3.140625 -3.375 C 4.109375 -3.375 4.21875 -3.046875 4.21875 -2.203125 L 4.46875 -2.203125 L 4.46875 -4.84375 L 4.21875 -4.84375 C 4.21875 -3.984375 4.109375 -3.671875 3.140625 -3.671875 L 2.25 -3.671875 L 2.25 -6.078125 C 2.25 -6.40625 2.265625 -6.46875 2.734375 -6.46875 L 4.015625 -6.46875 C 5.546875 -6.46875 5.8125 -5.921875 5.96875 -4.53125 L 6.21875 -4.53125 L 5.9375 -6.78125 L 0.328125 -6.78125 L 0.328125 -6.46875 L 0.5625 -6.46875 C 1.328125 -6.46875 1.359375 -6.359375 1.359375 -6 Z M 1.359375 -0.78125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 3.96875 -6.9375 C 3.921875 -7.0625 3.890625 -7.140625 3.734375 -7.140625 C 3.578125 -7.140625 3.546875 -7.078125 3.5 -6.9375 L 1.4375 -0.984375 C 1.25 -0.46875 0.859375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.546875 -0.015625 0.984375 -0.03125 1.328125 -0.03125 C 1.640625 -0.03125 2.15625 -0.015625 2.484375 0 L 2.484375 -0.3125 C 1.984375 -0.3125 1.734375 -0.5625 1.734375 -0.8125 C 1.734375 -0.84375 1.75 -0.953125 1.75 -0.96875 L 2.21875 -2.265625 L 4.671875 -2.265625 L 5.203125 -0.75 C 5.21875 -0.703125 5.234375 -0.640625 5.234375 -0.609375 C 5.234375 -0.3125 4.671875 -0.3125 4.40625 -0.3125 L 4.40625 0 C 4.765625 -0.03125 5.46875 -0.03125 5.84375 -0.03125 C 6.265625 -0.03125 6.734375 -0.015625 7.140625 0 L 7.140625 -0.3125 L 6.96875 -0.3125 C 6.375 -0.3125 6.234375 -0.375 6.125 -0.703125 Z M 3.4375 -5.828125 L 4.5625 -2.578125 L 2.328125 -2.578125 Z M 3.4375 -5.828125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-7">
<path style="stroke:none;" d="M 2.21875 -3.65625 L 2.21875 -6.09375 C 2.21875 -6.4375 2.234375 -6.5 2.703125 -6.5 L 3.9375 -6.5 C 4.90625 -6.5 5.25 -5.65625 5.25 -5.125 C 5.25 -4.484375 4.765625 -3.65625 3.65625 -3.65625 Z M 4.5625 -3.5625 C 5.53125 -3.75 6.21875 -4.390625 6.21875 -5.125 C 6.21875 -5.984375 5.296875 -6.8125 4 -6.8125 L 0.359375 -6.8125 L 0.359375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.390625 -6.390625 1.390625 -6.03125 L 1.390625 -0.78125 C 1.390625 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.359375 -0.3125 L 0.359375 0 L 4.265625 0 C 5.59375 0 6.484375 -0.890625 6.484375 -1.828125 C 6.484375 -2.6875 5.671875 -3.4375 4.5625 -3.5625 Z M 3.953125 -0.3125 L 2.703125 -0.3125 C 2.234375 -0.3125 2.21875 -0.375 2.21875 -0.703125 L 2.21875 -3.421875 L 4.09375 -3.421875 C 5.078125 -3.421875 5.5 -2.5 5.5 -1.828125 C 5.5 -1.125 4.96875 -0.3125 3.953125 -0.3125 Z M 3.953125 -0.3125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-8">
<path style="stroke:none;" d="M 5.796875 -6.78125 L 0.328125 -6.78125 L 0.328125 -6.46875 L 0.5625 -6.46875 C 1.328125 -6.46875 1.359375 -6.359375 1.359375 -6 L 1.359375 -0.78125 C 1.359375 -0.421875 1.328125 -0.3125 0.5625 -0.3125 L 0.328125 -0.3125 L 0.328125 0 C 0.671875 -0.03125 1.453125 -0.03125 1.84375 -0.03125 C 2.25 -0.03125 3.15625 -0.03125 3.515625 0 L 3.515625 -0.3125 L 3.1875 -0.3125 C 2.25 -0.3125 2.25 -0.4375 2.25 -0.78125 L 2.25 -3.234375 L 3.09375 -3.234375 C 4.0625 -3.234375 4.15625 -2.921875 4.15625 -2.078125 L 4.40625 -2.078125 L 4.40625 -4.71875 L 4.15625 -4.71875 C 4.15625 -3.875 4.0625 -3.546875 3.09375 -3.546875 L 2.25 -3.546875 L 2.25 -6.078125 C 2.25 -6.40625 2.265625 -6.46875 2.734375 -6.46875 L 3.921875 -6.46875 C 5.421875 -6.46875 5.671875 -5.90625 5.828125 -4.53125 L 6.078125 -4.53125 Z M 5.796875 -6.78125 "/>
</symbol>
</g>
</defs>
<g id="surface1">
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -7.1935 -6.725406 L 7.193219 -6.725406 L 7.193219 6.723813 L -7.1935 6.723813 Z M -7.1935 -6.725406 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="37.382" y="11.495"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(89.99939%,89.99939%,89.99939%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -20.201313 -33.205875 L 20.201031 -33.205875 L 20.201031 -17.819156 L -20.201313 -17.819156 Z M -20.201313 -33.205875 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="24.375" y="36.038"/>
<use xlink:href="#glyph0-3" x="31.56999" y="36.038"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-4" x="37.655146" y="36.038"/>
<use xlink:href="#glyph0-3" x="45.265576" y="36.038"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-5" x="51.360695" y="36.038"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.0018125 -6.924625 L 0.0018125 -17.619937 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
<path style="fill-rule:nonzero;fill:rgb(59.999084%,59.999084%,59.999084%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -26.189594 -57.748844 L -12.076313 -57.748844 L -12.076313 -44.299625 L -26.189594 -44.299625 Z M -26.189594 -57.748844 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
<use xlink:href="#glyph0-6" x="18.387" y="62.518"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -5.920063 -33.405094 L -13.9435 -44.100406 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
<path style="fill-rule:nonzero;fill:rgb(19.999695%,19.999695%,19.999695%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -25.982563 -83.260562 L -12.283344 -83.260562 L -12.283344 -69.811344 L -25.982563 -69.811344 Z M -25.982563 -83.260562 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
<use xlink:href="#glyph0-7" x="18.594" y="88.03"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -19.134906 -57.948062 L -19.134906 -69.612125 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
<path style="fill-rule:nonzero;fill:rgb(59.999084%,59.999084%,59.999084%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 12.560406 -57.748844 L 25.704937 -57.748844 L 25.704937 -44.299625 L 12.560406 -44.299625 Z M 12.560406 -57.748844 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
<use xlink:href="#glyph0-8" x="57.138" y="62.518"/>
</g>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.919781 -33.405094 L 13.943219 -44.100406 " transform="matrix(1,0,0,-1,41.256,8.091)"/>
</g>
</svg>
\documentclass[tikz, border=0 3pt 0 3pt]{standalone}
\begin{document}
\begin{tikzpicture}[scale=0.9]
\tikzset{every node/.style={draw=black, rectangle}}
\path[use as bounding box] (-1.5,0.2) rectangle (1.5,-3.2);
% \foreach \x in {0,1,...,3} {
% \draw[gray, dashed] (-1.5,-\x) -- (1.5,-\x);
% }
\node[fill=white] {O} [level distance=1cm]
child { node[fill=black!10] {C, D, E}
child { node[white,draw=black,fill=black!40] (A) {A}
child { node[white,draw=black,fill=black!80] {B} }
}
child { node[white,draw=black,fill=black!40] {F} }
}
;
\end{tikzpicture}
\end{document}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="142.131pt" height="85.438pt" viewBox="0 0 142.131 85.438" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 2.9375 -1.640625 L 2.9375 -0.78125 C 2.9375 -0.421875 2.90625 -0.3125 2.171875 -0.3125 L 1.96875 -0.3125 L 1.96875 0 C 2.375 -0.03125 2.890625 -0.03125 3.3125 -0.03125 C 3.734375 -0.03125 4.25 -0.03125 4.671875 0 L 4.671875 -0.3125 L 4.453125 -0.3125 C 3.71875 -0.3125 3.703125 -0.421875 3.703125 -0.78125 L 3.703125 -1.640625 L 4.6875 -1.640625 L 4.6875 -1.953125 L 3.703125 -1.953125 L 3.703125 -6.484375 C 3.703125 -6.6875 3.703125 -6.75 3.53125 -6.75 C 3.453125 -6.75 3.421875 -6.75 3.34375 -6.625 L 0.28125 -1.953125 L 0.28125 -1.640625 Z M 2.984375 -1.953125 L 0.5625 -1.953125 L 2.984375 -5.671875 Z M 2.984375 -1.953125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 1.265625 -0.765625 L 2.328125 -1.796875 C 3.875 -3.171875 4.46875 -3.703125 4.46875 -4.703125 C 4.46875 -5.84375 3.578125 -6.640625 2.359375 -6.640625 C 1.234375 -6.640625 0.5 -5.71875 0.5 -4.828125 C 0.5 -4.28125 1 -4.28125 1.03125 -4.28125 C 1.203125 -4.28125 1.546875 -4.390625 1.546875 -4.8125 C 1.546875 -5.0625 1.359375 -5.328125 1.015625 -5.328125 C 0.9375 -5.328125 0.921875 -5.328125 0.890625 -5.3125 C 1.109375 -5.96875 1.65625 -6.328125 2.234375 -6.328125 C 3.140625 -6.328125 3.5625 -5.515625 3.5625 -4.703125 C 3.5625 -3.90625 3.078125 -3.125 2.515625 -2.5 L 0.609375 -0.375 C 0.5 -0.265625 0.5 -0.234375 0.5 0 L 4.203125 0 L 4.46875 -1.734375 L 4.234375 -1.734375 C 4.171875 -1.4375 4.109375 -1 4 -0.84375 C 3.9375 -0.765625 3.28125 -0.765625 3.0625 -0.765625 Z M 1.265625 -0.765625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 4.578125 -3.1875 C 4.578125 -3.984375 4.53125 -4.78125 4.1875 -5.515625 C 3.734375 -6.484375 2.90625 -6.640625 2.5 -6.640625 C 1.890625 -6.640625 1.171875 -6.375 0.75 -5.453125 C 0.4375 -4.765625 0.390625 -3.984375 0.390625 -3.1875 C 0.390625 -2.4375 0.421875 -1.546875 0.84375 -0.78125 C 1.265625 0.015625 2 0.21875 2.484375 0.21875 C 3.015625 0.21875 3.78125 0.015625 4.21875 -0.9375 C 4.53125 -1.625 4.578125 -2.40625 4.578125 -3.1875 Z M 2.484375 0 C 2.09375 0 1.5 -0.25 1.328125 -1.203125 C 1.21875 -1.796875 1.21875 -2.71875 1.21875 -3.3125 C 1.21875 -3.953125 1.21875 -4.609375 1.296875 -5.140625 C 1.484375 -6.328125 2.234375 -6.421875 2.484375 -6.421875 C 2.8125 -6.421875 3.46875 -6.234375 3.65625 -5.25 C 3.765625 -4.6875 3.765625 -3.9375 3.765625 -3.3125 C 3.765625 -2.5625 3.765625 -1.890625 3.65625 -1.25 C 3.5 -0.296875 2.9375 0 2.484375 0 Z M 2.484375 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 2.9375 -6.375 C 2.9375 -6.625 2.9375 -6.640625 2.703125 -6.640625 C 2.078125 -6 1.203125 -6 0.890625 -6 L 0.890625 -5.6875 C 1.09375 -5.6875 1.671875 -5.6875 2.1875 -5.953125 L 2.1875 -0.78125 C 2.1875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.953125 -0.3125 L 0.953125 0 C 1.296875 -0.03125 2.15625 -0.03125 2.5625 -0.03125 C 2.953125 -0.03125 3.828125 -0.03125 4.171875 0 L 4.171875 -0.3125 L 3.859375 -0.3125 C 2.953125 -0.3125 2.9375 -0.421875 2.9375 -0.78125 Z M 2.9375 -6.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 2.890625 -3.515625 C 3.703125 -3.78125 4.28125 -4.46875 4.28125 -5.265625 C 4.28125 -6.078125 3.40625 -6.640625 2.453125 -6.640625 C 1.453125 -6.640625 0.6875 -6.046875 0.6875 -5.28125 C 0.6875 -4.953125 0.90625 -4.765625 1.203125 -4.765625 C 1.5 -4.765625 1.703125 -4.984375 1.703125 -5.28125 C 1.703125 -5.765625 1.234375 -5.765625 1.09375 -5.765625 C 1.390625 -6.265625 2.046875 -6.390625 2.40625 -6.390625 C 2.828125 -6.390625 3.375 -6.171875 3.375 -5.28125 C 3.375 -5.15625 3.34375 -4.578125 3.09375 -4.140625 C 2.796875 -3.65625 2.453125 -3.625 2.203125 -3.625 C 2.125 -3.609375 1.890625 -3.59375 1.8125 -3.59375 C 1.734375 -3.578125 1.671875 -3.5625 1.671875 -3.46875 C 1.671875 -3.359375 1.734375 -3.359375 1.90625 -3.359375 L 2.34375 -3.359375 C 3.15625 -3.359375 3.53125 -2.6875 3.53125 -1.703125 C 3.53125 -0.34375 2.84375 -0.0625 2.40625 -0.0625 C 1.96875 -0.0625 1.21875 -0.234375 0.875 -0.8125 C 1.21875 -0.765625 1.53125 -0.984375 1.53125 -1.359375 C 1.53125 -1.71875 1.265625 -1.921875 0.984375 -1.921875 C 0.734375 -1.921875 0.421875 -1.78125 0.421875 -1.34375 C 0.421875 -0.4375 1.34375 0.21875 2.4375 0.21875 C 3.65625 0.21875 4.5625 -0.6875 4.5625 -1.703125 C 4.5625 -2.515625 3.921875 -3.296875 2.890625 -3.515625 Z M 2.890625 -3.515625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 4.46875 -2 C 4.46875 -3.1875 3.65625 -4.1875 2.578125 -4.1875 C 2.109375 -4.1875 1.671875 -4.03125 1.3125 -3.671875 L 1.3125 -5.625 C 1.515625 -5.5625 1.84375 -5.5 2.15625 -5.5 C 3.390625 -5.5 4.09375 -6.40625 4.09375 -6.53125 C 4.09375 -6.59375 4.0625 -6.640625 3.984375 -6.640625 C 3.984375 -6.640625 3.953125 -6.640625 3.90625 -6.609375 C 3.703125 -6.515625 3.21875 -6.3125 2.546875 -6.3125 C 2.15625 -6.3125 1.6875 -6.390625 1.21875 -6.59375 C 1.140625 -6.625 1.125 -6.625 1.109375 -6.625 C 1 -6.625 1 -6.546875 1 -6.390625 L 1 -3.4375 C 1 -3.265625 1 -3.1875 1.140625 -3.1875 C 1.21875 -3.1875 1.234375 -3.203125 1.28125 -3.265625 C 1.390625 -3.421875 1.75 -3.96875 2.5625 -3.96875 C 3.078125 -3.96875 3.328125 -3.515625 3.40625 -3.328125 C 3.5625 -2.953125 3.59375 -2.578125 3.59375 -2.078125 C 3.59375 -1.71875 3.59375 -1.125 3.34375 -0.703125 C 3.109375 -0.3125 2.734375 -0.0625 2.28125 -0.0625 C 1.5625 -0.0625 0.984375 -0.59375 0.8125 -1.171875 C 0.84375 -1.171875 0.875 -1.15625 0.984375 -1.15625 C 1.3125 -1.15625 1.484375 -1.40625 1.484375 -1.640625 C 1.484375 -1.890625 1.3125 -2.140625 0.984375 -2.140625 C 0.84375 -2.140625 0.5 -2.0625 0.5 -1.609375 C 0.5 -0.75 1.1875 0.21875 2.296875 0.21875 C 3.453125 0.21875 4.46875 -0.734375 4.46875 -2 Z M 4.46875 -2 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 0 0 L 142.132812 0 L 142.132812 85.4375 L 0 85.4375 Z M 0 0 "/>
</clipPath>
<clipPath id="clip2">
<path d="M 8 0 L 134 0 L 134 85.4375 L 8 85.4375 Z M 8 0 "/>
</clipPath>
</defs>
<g id="surface1">
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00021875 0.00071875 L 0.00021875 85.039781 L 141.734594 85.039781 L 141.734594 0.00071875 Z M 0.00021875 0.00071875 " transform="matrix(1,0,0,-1,0.199,85.239)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00021875 0.00071875 L 0.00021875 85.039781 L 141.734594 85.039781 L 141.734594 0.00071875 Z M 0.00021875 0.00071875 " transform="matrix(1,0,0,-1,0.199,85.239)"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="133.43" y="10.14"/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(59.999084%,59.999084%,59.999084%);fill-opacity:1;" d="M 127.757812 42.71875 C 127.757812 22.367188 102.378906 5.867188 71.066406 5.867188 C 39.753906 5.867188 14.371094 22.367188 14.371094 42.71875 C 14.371094 63.070312 39.753906 79.570312 71.066406 79.570312 C 102.378906 79.570312 127.757812 63.070312 127.757812 42.71875 Z M 127.757812 42.71875 "/>
<g clip-path="url(#clip2)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 127.558813 42.52025 C 127.558813 62.871813 102.179906 79.371813 70.867406 79.371813 C 39.554906 79.371813 14.172094 62.871813 14.172094 42.52025 C 14.172094 22.168688 39.554906 5.668688 70.867406 5.668688 C 102.179906 5.668688 127.558813 22.168688 127.558813 42.52025 Z M 127.558813 42.52025 " transform="matrix(1,0,0,-1,0.199,85.239)"/>