changeset 1610:2dff2bdffdb8

font support within Orthanc
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 04 Sep 2015 13:44:21 +0200
parents c74495267acf
children 5e9b2aac8b89
files CMakeLists.txt Core/Enumerations.cpp Core/Enumerations.h Core/ImageFormats/Font.cpp Core/ImageFormats/Font.h Core/ImageFormats/FontRegistry.cpp Core/ImageFormats/FontRegistry.h Core/ImageFormats/ImageProcessing.cpp Core/ImageFormats/JpegReader.cpp Core/ImageFormats/PngReader.cpp OrthancServer/OrthancInitialization.cpp OrthancServer/OrthancInitialization.h Plugins/Include/orthanc/OrthancCPlugin.h Resources/ErrorCodes.json Resources/Fonts/GenerateFont.py Resources/Fonts/README.txt Resources/Fonts/UbuntuMonoBold-16.json UnitTestsSources/ImageTests.cpp
diffstat 18 files changed, 741 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Wed Sep 02 15:07:47 2015 +0200
+++ b/CMakeLists.txt	Fri Sep 04 13:44:21 2015 +0200
@@ -121,6 +121,8 @@
   Core/MultiThreading/ReaderWriterLock.cpp
   Core/MultiThreading/Semaphore.cpp
   Core/MultiThreading/SharedMessageQueue.cpp
+  Core/ImageFormats/Font.cpp
+  Core/ImageFormats/FontRegistry.cpp
   Core/ImageFormats/ImageAccessor.cpp
   Core/ImageFormats/ImageBuffer.cpp
   Core/ImageFormats/ImageProcessing.cpp
@@ -236,6 +238,7 @@
   CONFIGURATION_SAMPLE        ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Configuration.json
   DICOM_CONFORMANCE_STATEMENT ${CMAKE_CURRENT_SOURCE_DIR}/Resources/DicomConformanceStatement.txt
   LUA_TOOLBOX                 ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Toolbox.lua
+  FONT_UBUNTU_MONO_BOLD_16    ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Fonts/UbuntuMonoBold-16.json
   )
 
 
--- a/Core/Enumerations.cpp	Wed Sep 02 15:07:47 2015 +0200
+++ b/Core/Enumerations.cpp	Fri Sep 04 13:44:21 2015 +0200
@@ -139,6 +139,9 @@
       case ErrorCode_Unauthorized:
         return "Bad credentials were provided to an HTTP request";
 
+      case ErrorCode_BadFont:
+        return "Badly formatted font file";
+
       case ErrorCode_SQLiteNotOpened:
         return "SQLite: The database is not opened";
 
--- a/Core/Enumerations.h	Wed Sep 02 15:07:47 2015 +0200
+++ b/Core/Enumerations.h	Fri Sep 04 13:44:21 2015 +0200
@@ -76,6 +76,7 @@
     ErrorCode_UnknownDicomTag = 27    /*!< Unknown DICOM tag */,
     ErrorCode_BadJson = 28    /*!< Cannot parse a JSON document */,
     ErrorCode_Unauthorized = 29    /*!< Bad credentials were provided to an HTTP request */,
+    ErrorCode_BadFont = 30    /*!< Badly formatted font file */,
     ErrorCode_SQLiteNotOpened = 1000    /*!< SQLite: The database is not opened */,
     ErrorCode_SQLiteAlreadyOpened = 1001    /*!< SQLite: Connection is already open */,
     ErrorCode_SQLiteCannotOpen = 1002    /*!< SQLite: Unable to open the database */,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Core/ImageFormats/Font.cpp	Fri Sep 04 13:44:21 2015 +0200
@@ -0,0 +1,298 @@
+/**
+ * Orthanc - A Lightweight, RESTful DICOM Store
+ * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * In addition, as a special exception, the copyright holders of this
+ * program give permission to link the code of its release with the
+ * OpenSSL project's "OpenSSL" library (or with modified versions of it
+ * that use the same license as the "OpenSSL" library), and distribute
+ * the linked executables. You must obey the GNU General Public License
+ * in all respects for all of the code used other than "OpenSSL". If you
+ * modify file(s) with this exception, you may extend this exception to
+ * your version of the file(s), but you are not obligated to do so. If
+ * you do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source files
+ * in the program, then also delete it here.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+#include "../PrecompiledHeaders.h"
+#include "Font.h"
+
+#include "../Toolbox.h"
+#include "../OrthancException.h"
+
+#include <stdio.h>
+#include <memory>
+#include <boost/lexical_cast.hpp>
+
+namespace Orthanc
+{
+  Font::~Font()
+  {
+    for (Characters::iterator it = characters_.begin();
+         it != characters_.end(); it++)
+    {
+      delete it->second;
+    }
+  }
+
+
+  void Font::LoadFromMemory(const std::string& font)
+  {
+    Json::Value v;
+    Json::Reader reader;
+    if (!reader.parse(font, v) ||
+        v.type() != Json::objectValue ||
+        !v.isMember("Name") ||
+        !v.isMember("Size") ||
+        !v.isMember("Characters") ||
+        v["Name"].type() != Json::stringValue ||
+        v["Size"].type() != Json::intValue ||
+        v["Characters"].type() != Json::objectValue)
+    {
+      throw OrthancException(ErrorCode_BadFont);
+    }
+
+    name_ = v["Name"].asString();
+    size_ = v["Size"].asUInt();
+    maxHeight_ = 0;
+
+    Json::Value::Members characters = v["Characters"].getMemberNames();
+
+    for (size_t i = 0; i < characters.size(); i++)
+    {
+      const Json::Value& info = v["Characters"][characters[i]];
+      if (info.type() != Json::objectValue ||
+          !info.isMember("Advance") ||
+          !info.isMember("Bitmap") ||
+          !info.isMember("Height") ||
+          !info.isMember("Top") ||
+          !info.isMember("Width") ||
+          info["Advance"].type() != Json::intValue ||
+          info["Bitmap"].type() != Json::arrayValue ||
+          info["Height"].type() != Json::intValue ||
+          info["Top"].type() != Json::intValue ||
+          info["Width"].type() != Json::intValue)
+      {
+        throw OrthancException(ErrorCode_BadFont);
+      }
+
+      std::auto_ptr<Character> c(new Character);
+      
+      c->advance_ = info["Advance"].asUInt();
+      c->height_ = info["Height"].asUInt();
+      c->top_ = info["Top"].asUInt();
+      c->width_ = info["Width"].asUInt();
+      c->bitmap_.resize(info["Bitmap"].size());
+
+      if (c->height_ > maxHeight_)
+      {
+        maxHeight_ = c->height_;
+      }
+      
+      for (Json::Value::ArrayIndex j = 0; j < info["Bitmap"].size(); j++)
+      {
+        if (info["Bitmap"][j].type() != Json::intValue)
+        {
+          throw OrthancException(ErrorCode_BadFont);
+        }
+
+        int value = info["Bitmap"][j].asInt();
+        if (value < 0 || value > 255)
+        {
+          throw OrthancException(ErrorCode_BadFont);
+        }
+
+        c->bitmap_[j] = value;
+      }
+
+      int index = boost::lexical_cast<int>(characters[i]);
+      if (index < 0 || index > 255)
+      {
+        throw OrthancException(ErrorCode_BadFont);
+      }
+
+      characters_[static_cast<char>(index)] = c.release();
+    }
+  }
+
+
+  void Font::LoadFromFile(const std::string& path)
+  {
+    std::string font;
+    Toolbox::ReadFile(font, path);
+    LoadFromMemory(font);
+  }
+
+
+  static unsigned int MyMin(unsigned int a, 
+                            unsigned int b)
+  {
+    return a < b ? a : b;
+  }
+
+
+  void Font::DrawCharacter(ImageAccessor& target,
+                           const Character& character,
+                           int x,
+                           int y,
+                           const uint8_t color[4]) const
+  {
+    // Compute the bounds of the character
+    if (x >= static_cast<int>(target.GetWidth()) ||
+        y >= static_cast<int>(target.GetHeight()))
+    {
+      // The character is out of the image
+      return;
+    }
+
+    unsigned int left = x < 0 ? -x : 0;
+    unsigned int top = y < 0 ? -y : 0;
+    unsigned int width = MyMin(character.width_, target.GetWidth() - x);
+    unsigned int height = MyMin(character.height_, target.GetHeight() - y);
+
+    uint8_t bpp = target.GetBytesPerPixel();
+
+    // Blit the font bitmap OVER the target image
+    // https://en.wikipedia.org/wiki/Alpha_compositing
+
+    for (unsigned int cy = top; cy < height; cy++)
+    {
+      uint8_t* p = reinterpret_cast<uint8_t*>(target.GetRow(y + cy)) + (x + left) * bpp;
+      unsigned int pos = cy * character.width_ + left;
+
+      switch (target.GetFormat())
+      {
+        case PixelFormat_Grayscale8:
+        {
+          assert(bpp == 1);
+          for (unsigned int cx = left; cx < width; cx++, pos++, p++)
+          {
+            uint16_t alpha = character.bitmap_[pos];
+            *p = (alpha * static_cast<uint16_t>(color[0]) + (255 - alpha) * static_cast<uint16_t>(*p)) >> 8;
+          }
+
+          break;
+        }
+
+        case PixelFormat_RGB24:
+        {
+          assert(bpp == 3);
+          for (unsigned int cx = left; cx < width; cx++, pos++, p += 3)
+          {
+            uint16_t alpha = character.bitmap_[pos];
+            p[0] = (alpha * static_cast<uint16_t>(color[0]) + (255 - alpha) * static_cast<uint16_t>(p[0])) >> 8;
+            p[1] = (alpha * static_cast<uint16_t>(color[1]) + (255 - alpha) * static_cast<uint16_t>(p[1])) >> 8;
+            p[2] = (alpha * static_cast<uint16_t>(color[2]) + (255 - alpha) * static_cast<uint16_t>(p[2])) >> 8;
+          }
+
+          break;
+        }
+
+        case PixelFormat_RGBA32:
+        {
+          assert(bpp == 4);
+
+          for (unsigned int cx = left; cx < width; cx++, pos++, p += 4)
+          {
+            float alpha = static_cast<float>(character.bitmap_[pos]) / 255.0f;
+            float beta = (1.0f - alpha) * static_cast<float>(p[3]) / 255.0f;
+            float denom = 1.0f / (alpha + beta);
+
+            for (uint8_t i = 0; i < 3; i++)
+            {
+              p[i] = static_cast<uint8_t>((alpha * static_cast<float>(color[i]) +
+                                           beta * static_cast<float>(p[i])) * denom);
+            }
+
+            p[3] = static_cast<uint8_t>(255.0f * (alpha + beta));
+          }
+
+          break;
+        }
+
+        default:
+          throw OrthancException(ErrorCode_NotImplemented);
+      }
+    }
+
+  }
+
+
+  void Font::DrawInternal(ImageAccessor& target,
+                          const std::string& utf8,
+                          int x,
+                          int y,
+                          const uint8_t color[4]) const
+  {
+    if (target.GetFormat() != PixelFormat_Grayscale8 &&
+        target.GetFormat() != PixelFormat_RGB24 &&
+        target.GetFormat() != PixelFormat_RGBA32)
+    {
+      throw OrthancException(ErrorCode_NotImplemented);
+    }
+
+    int a = x;
+
+    std::string s = Toolbox::ConvertFromUtf8(utf8, Encoding_Latin1);
+
+    for (size_t i = 0; i < s.size(); i++)
+    {
+      if (s[i] == '\n')
+      {
+        // Go to the next line
+        a = x;
+        y += maxHeight_ + 1;
+      }
+      else
+      {
+        Characters::const_iterator c = characters_.find(s[i]);
+        if (c != characters_.end())
+        {
+          DrawCharacter(target, *c->second, a, y + static_cast<int>(c->second->top_), color);
+          a += c->second->advance_;
+        }
+      }
+    }
+  }
+
+
+  void Font::DrawText(ImageAccessor& target,
+                      const std::string& utf8,
+                      int x,
+                      int y,
+                      uint8_t grayscale) const
+  {
+    uint8_t color[4] = { grayscale, grayscale, grayscale, 255 };
+    DrawInternal(target, utf8, x, y, color);
+  }
+
+
+  void Font::DrawText(ImageAccessor& target,
+                      const std::string& utf8,
+                      int x,
+                      int y,
+                      uint8_t r,
+                      uint8_t g,
+                      uint8_t b) const
+  {
+    uint8_t color[4] = { r, g, b, 255 };
+    DrawInternal(target, utf8, x, y, color);
+  }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Core/ImageFormats/Font.h	Fri Sep 04 13:44:21 2015 +0200
@@ -0,0 +1,105 @@
+/**
+ * Orthanc - A Lightweight, RESTful DICOM Store
+ * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * In addition, as a special exception, the copyright holders of this
+ * program give permission to link the code of its release with the
+ * OpenSSL project's "OpenSSL" library (or with modified versions of it
+ * that use the same license as the "OpenSSL" library), and distribute
+ * the linked executables. You must obey the GNU General Public License
+ * in all respects for all of the code used other than "OpenSSL". If you
+ * modify file(s) with this exception, you may extend this exception to
+ * your version of the file(s), but you are not obligated to do so. If
+ * you do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source files
+ * in the program, then also delete it here.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+#pragma once
+
+#include "ImageAccessor.h"
+
+#include <stdint.h>
+#include <vector>
+#include <map>
+
+namespace Orthanc
+{
+  class Font
+  {
+  private:
+    struct Character
+    {
+      unsigned int  width_;
+      unsigned int  height_;
+      unsigned int  top_;
+      unsigned int  advance_;
+      std::vector<uint8_t>  bitmap_;
+    };
+
+    typedef std::map<char, Character*>  Characters;
+
+    std::string   name_;
+    unsigned int  size_;
+    Characters    characters_;
+    unsigned int  maxHeight_;
+
+    void DrawCharacter(ImageAccessor& target,
+                       const Character& character,
+                       int x,
+                       int y,
+                       const uint8_t color[4]) const;
+
+    void DrawInternal(ImageAccessor& target,
+                      const std::string& utf8,
+                      int x,
+                      int y,
+                      const uint8_t color[4]) const;
+
+  public:
+    ~Font();
+
+    void LoadFromMemory(const std::string& font);
+
+    void LoadFromFile(const std::string& path);
+
+    const std::string& GetName() const
+    {
+      return name_;
+    }
+
+    unsigned int GetSize() const
+    {
+      return size_;
+    }
+
+    void DrawText(ImageAccessor& target,
+                  const std::string& utf8,
+                  int x,
+                  int y,
+                  uint8_t grayscale) const;
+
+    void DrawText(ImageAccessor& target,
+                  const std::string& utf8,
+                  int x,
+                  int y,
+                  uint8_t r,
+                  uint8_t g,
+                  uint8_t b) const;
+  };
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Core/ImageFormats/FontRegistry.cpp	Fri Sep 04 13:44:21 2015 +0200
@@ -0,0 +1,86 @@
+/**
+ * Orthanc - A Lightweight, RESTful DICOM Store
+ * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * In addition, as a special exception, the copyright holders of this
+ * program give permission to link the code of its release with the
+ * OpenSSL project's "OpenSSL" library (or with modified versions of it
+ * that use the same license as the "OpenSSL" library), and distribute
+ * the linked executables. You must obey the GNU General Public License
+ * in all respects for all of the code used other than "OpenSSL". If you
+ * modify file(s) with this exception, you may extend this exception to
+ * your version of the file(s), but you are not obligated to do so. If
+ * you do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source files
+ * in the program, then also delete it here.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+#include "../PrecompiledHeaders.h"
+#include "FontRegistry.h"
+
+#include "../OrthancException.h"
+
+#include <memory>
+
+namespace Orthanc
+{
+  FontRegistry::~FontRegistry()
+  {
+    for (Fonts::iterator it = fonts_.begin(); it != fonts_.end(); ++it)
+    {
+      delete *it;
+    }
+  }
+
+
+  void FontRegistry::AddFromMemory(const std::string& font)
+  {
+    std::auto_ptr<Font> f(new Font);
+    f->LoadFromMemory(font);
+    fonts_.push_back(f.release());
+  }
+
+
+  void FontRegistry::AddFromFile(const std::string& path)
+  {
+    std::auto_ptr<Font> f(new Font);
+    f->LoadFromFile(path);
+    fonts_.push_back(f.release());
+  }
+
+
+  void FontRegistry::AddFromResource(EmbeddedResources::FileResourceId resource)
+  {
+    std::string content;
+    EmbeddedResources::GetFileResource(content, resource);
+    AddFromMemory(content);
+  }
+
+
+  const Font& FontRegistry::GetFont(size_t i) const
+  {
+    if (i >= fonts_.size())
+    {
+      throw OrthancException(ErrorCode_ParameterOutOfRange);
+    }
+    else
+    {
+      return *fonts_[i];
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Core/ImageFormats/FontRegistry.h	Fri Sep 04 13:44:21 2015 +0200
@@ -0,0 +1,64 @@
+/**
+ * Orthanc - A Lightweight, RESTful DICOM Store
+ * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * In addition, as a special exception, the copyright holders of this
+ * program give permission to link the code of its release with the
+ * OpenSSL project's "OpenSSL" library (or with modified versions of it
+ * that use the same license as the "OpenSSL" library), and distribute
+ * the linked executables. You must obey the GNU General Public License
+ * in all respects for all of the code used other than "OpenSSL". If you
+ * modify file(s) with this exception, you may extend this exception to
+ * your version of the file(s), but you are not obligated to do so. If
+ * you do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source files
+ * in the program, then also delete it here.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+#pragma once
+
+#include "Font.h"
+
+#include <EmbeddedResources.h>   // Autogenerated file
+
+namespace Orthanc
+{
+  class FontRegistry
+  {
+  private:
+    typedef std::vector<Font*>  Fonts;
+
+    Fonts  fonts_;
+
+  public:
+    ~FontRegistry();
+
+    void AddFromMemory(const std::string& font);
+
+    void AddFromFile(const std::string& path);
+
+    void AddFromResource(EmbeddedResources::FileResourceId resource);
+
+    size_t GetSize() const
+    {
+      return fonts_.size();
+    }
+
+    const Font& GetFont(size_t i) const;
+  };
+}
--- a/Core/ImageFormats/ImageProcessing.cpp	Wed Sep 02 15:07:47 2015 +0200
+++ b/Core/ImageFormats/ImageProcessing.cpp	Fri Sep 04 13:44:21 2015 +0200
@@ -378,6 +378,25 @@
       return;
     }
 
+    if (target.GetFormat() == PixelFormat_Grayscale8 &&
+        source.GetFormat() == PixelFormat_RGBA32)
+    {
+      for (unsigned int y = 0; y < source.GetHeight(); y++)
+      {
+        const uint8_t* p = reinterpret_cast<const uint8_t*>(source.GetConstRow(y));
+        uint8_t* q = reinterpret_cast<uint8_t*>(target.GetRow(y));
+        for (unsigned int x = 0; x < source.GetWidth(); x++, q++)
+        {
+          *q = static_cast<uint8_t>((2126 * static_cast<uint32_t>(p[0]) +
+                                     7152 * static_cast<uint32_t>(p[1]) +
+                                     0722 * static_cast<uint32_t>(p[2])) / 10000);
+          p += 4;
+        }
+      }
+
+      return;
+    }
+
     if (target.GetFormat() == PixelFormat_RGB24 &&
         source.GetFormat() == PixelFormat_RGBA32)
     {
--- a/Core/ImageFormats/JpegReader.cpp	Wed Sep 02 15:07:47 2015 +0200
+++ b/Core/ImageFormats/JpegReader.cpp	Fri Sep 04 13:44:21 2015 +0200
@@ -76,8 +76,8 @@
       throw OrthancException(ErrorCode_NotEnoughMemory);
     }
 
-    accessor.AssignReadOnly(format, cinfo.output_width, cinfo.output_height, pitch, 
-                            content.empty() ? NULL : content.c_str());
+    accessor.AssignWritable(format, cinfo.output_width, cinfo.output_height, pitch, 
+                            content.empty() ? NULL : &content[0]);
 
     uint8_t* target = reinterpret_cast<uint8_t*>(&content[0]);
     while (cinfo.output_scanline < cinfo.output_height) 
--- a/Core/ImageFormats/PngReader.cpp	Wed Sep 02 15:07:47 2015 +0200
+++ b/Core/ImageFormats/PngReader.cpp	Fri Sep 04 13:44:21 2015 +0200
@@ -201,7 +201,7 @@
 
     png_read_image(rabi.png_, &rows[0]);
 
-    AssignReadOnly(format, width, height, pitch, &data_[0]);
+    AssignWritable(format, width, height, pitch, &data_[0]);
   }
 
   void PngReader::ReadFromFile(const char* filename)
--- a/OrthancServer/OrthancInitialization.cpp	Wed Sep 02 15:07:47 2015 +0200
+++ b/OrthancServer/OrthancInitialization.cpp	Fri Sep 04 13:44:21 2015 +0200
@@ -75,6 +75,7 @@
   static Json::Value configuration_;
   static boost::filesystem::path defaultDirectory_;
   static std::string configurationAbsolutePath_;
+  static FontRegistry fontRegistry_;
 
 
   static std::string GetGlobalStringParameterInternal(const std::string& parameter,
@@ -348,6 +349,8 @@
     LOG(WARNING) << "Registering JPEG codecs";
     DJDecoderRegistration::registerCodecs(); 
 #endif
+
+    fontRegistry_.AddFromResource(EmbeddedResources::FONT_UBUNTU_MONO_BOLD_16);
   }
 
 
@@ -920,7 +923,6 @@
   }  
 
 
-
   void Configuration::GetConfiguration(Json::Value& result)
   {
     boost::mutex::scoped_lock lock(globalMutex_);
@@ -936,4 +938,10 @@
     Json::StyledWriter w;
     result = w.write(config);
   }
+
+
+  const FontRegistry& Configuration::GetFontRegistry()
+  {
+    return fontRegistry_;
+  }
 }
--- a/OrthancServer/OrthancInitialization.h	Wed Sep 02 15:07:47 2015 +0200
+++ b/OrthancServer/OrthancInitialization.h	Fri Sep 04 13:44:21 2015 +0200
@@ -42,6 +42,7 @@
 #include "OrthancPeerParameters.h"
 #include "IDatabaseWrapper.h"
 #include "../Core/FileStorage/IStorageArea.h"
+#include "../Core/ImageFormats/FontRegistry.h"
 
 namespace Orthanc
 {
@@ -112,5 +113,7 @@
     static void GetConfiguration(Json::Value& result);
 
     static void FormatConfiguration(std::string& result);
+
+    static const FontRegistry& GetFontRegistry();
   };
 }
--- a/Plugins/Include/orthanc/OrthancCPlugin.h	Wed Sep 02 15:07:47 2015 +0200
+++ b/Plugins/Include/orthanc/OrthancCPlugin.h	Fri Sep 04 13:44:21 2015 +0200
@@ -209,6 +209,7 @@
     OrthancPluginErrorCode_UnknownDicomTag = 27    /*!< Unknown DICOM tag */,
     OrthancPluginErrorCode_BadJson = 28    /*!< Cannot parse a JSON document */,
     OrthancPluginErrorCode_Unauthorized = 29    /*!< Bad credentials were provided to an HTTP request */,
+    OrthancPluginErrorCode_BadFont = 30    /*!< Badly formatted font file */,
     OrthancPluginErrorCode_SQLiteNotOpened = 1000    /*!< SQLite: The database is not opened */,
     OrthancPluginErrorCode_SQLiteAlreadyOpened = 1001    /*!< SQLite: Connection is already open */,
     OrthancPluginErrorCode_SQLiteCannotOpen = 1002    /*!< SQLite: Unable to open the database */,
--- a/Resources/ErrorCodes.json	Wed Sep 02 15:07:47 2015 +0200
+++ b/Resources/ErrorCodes.json	Fri Sep 04 13:44:21 2015 +0200
@@ -169,13 +169,16 @@
     "HttpStatus": 401, 
     "Name": "Unauthorized", 
     "Description": "Bad credentials were provided to an HTTP request"
+  }, 
+  {
+    "Code": 30, 
+    "Name": "BadFont", 
+    "Description": "Badly formatted font file"
   },
 
 
 
 
-
-
   /** SQLite **/
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/Fonts/GenerateFont.py	Fri Sep 04 13:44:21 2015 +0200
@@ -0,0 +1,113 @@
+#!/usr/bin/python
+
+# Orthanc - A Lightweight, RESTful DICOM Store
+# Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
+# Department, University Hospital of Liege, Belgium
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# In addition, as a special exception, the copyright holders of this
+# program give permission to link the code of its release with the
+# OpenSSL project's "OpenSSL" library (or with modified versions of it
+# that use the same license as the "OpenSSL" library), and distribute
+# the linked executables. You must obey the GNU General Public License
+# in all respects for all of the code used other than "OpenSSL". If you
+# modify file(s) with this exception, you may extend this exception to
+# your version of the file(s), but you are not obligated to do so. If
+# you do not wish to do so, delete this exception statement from your
+# version. If you delete this exception statement from all source files
+# in the program, then also delete it here.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+
+
+# sudo pip install freetype-py
+
+
+
+import freetype
+import json
+import os
+import sys
+import unicodedata
+
+
+if len(sys.argv) != 3:
+    print('Usage: %s <Font> <Size>\n' % sys.argv[0])
+    print('Example: %s /usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-B.ttf 16\n' % sys.argv[0])
+    sys.exit(-1)
+
+
+
+FONT = sys.argv[1]
+PIXEL_SIZE = int(sys.argv[2])
+CHARSET = 'latin-1'
+
+
+# Load the font
+face = freetype.Face(FONT)
+face.set_char_size(PIXEL_SIZE * 64)
+
+# Generate all the characters between 0 and 255
+characters = ''.join(map(chr, range(0, 256)))
+
+# Interpret the string using the required charset
+characters = characters.decode(CHARSET, 'ignore')
+
+# Keep only non-control characters
+characters = filter(lambda c: unicodedata.category(c)[0] != 'C', characters)
+
+font = {
+    'Name' : os.path.basename(FONT),
+    'Size' : PIXEL_SIZE,
+    'Characters' : {}
+}
+
+
+def PrintCharacter(c):
+    pos = 0
+    for i in range(c['Height']):
+        s = ''
+        for j in range(c['Width']):
+            if c['Bitmap'][pos] > 127:
+                s += '*'
+            else:
+                s += ' '
+            pos += 1
+        print s
+
+
+for c in characters:
+    face.load_char(c)
+
+    info = {
+        'Width' : face.glyph.bitmap.width,
+        'Height' : face.glyph.bitmap.rows,
+        'Advance' : face.glyph.metrics.horiAdvance / 64,
+        'Top' : -face.glyph.metrics.horiBearingY / 64,
+        'Bitmap' : face.glyph.bitmap.buffer,
+    }
+
+    font['Characters'][ord(c)] = info
+
+    #PrintCharacter(info)
+
+minTop = min(map(lambda (k, v): v['Top'], font['Characters'].iteritems()))
+for c in font['Characters']:
+    font['Characters'][c]['Top'] -= minTop
+
+font['MaxAdvance'] = max(map(lambda (k, v): v['Advance'], font['Characters'].iteritems()))
+font['MaxHeight'] = max(map(lambda (k, v): v['Height'], font['Characters'].iteritems()))
+
+print json.dumps(font)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/Fonts/README.txt	Fri Sep 04 13:44:21 2015 +0200
@@ -0,0 +1,6 @@
+This file contains a precompiled version of several open-source fonts,
+that are used to draw text on images within Orthanc. These fonts are
+encoded as JSON files through the "./GenerateFont.py" script.
+
+- UbuntuMonoBold-16.json is the Ubuntu Mono Bold, size 16, licensed
+  under the Ubuntu Font Licence.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/Fonts/UbuntuMonoBold-16.json	Fri Sep 04 13:44:21 2015 +0200
@@ -0,0 +1,1 @@
+{"MaxAdvance": 9, "MaxHeight": 15, "Name": "UbuntuMono-B.ttf", "Characters": {"32": {"Width": 0, "Advance": 8, "Bitmap": [], "Top": 14, "Height": 0}, "33": {"Width": 2, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 254, 251, 245, 242, 224, 223, 196, 199, 0, 0, 199, 198, 199, 198], "Top": 4, "Height": 10}, "34": {"Width": 5, "Advance": 8, "Bitmap": [255, 255, 0, 255, 255, 248, 247, 0, 248, 247, 226, 226, 0, 226, 226, 197, 196, 0, 197, 196, 160, 160, 0, 160, 162], "Top": 3, "Height": 5}, "35": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 31, 255, 254, 255, 225, 0, 0, 0, 93, 255, 250, 255, 163, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 234, 255, 255, 255, 21, 0, 0, 25, 255, 253, 255, 231, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 163, 243, 161, 255, 93, 0, 0, 0, 225, 94, 105, 255, 31, 0, 0], "Top": 4, "Height": 10}, "36": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 8, 0, 33, 198, 255, 255, 248, 169, 190, 255, 255, 255, 255, 202, 246, 255, 46, 8, 44, 66, 216, 255, 231, 148, 27, 0, 71, 243, 255, 255, 239, 59, 0, 23, 115, 205, 255, 205, 82, 56, 10, 42, 255, 246, 211, 255, 255, 255, 255, 209, 120, 227, 255, 255, 245, 72, 0, 0, 255, 255, 15, 0, 0, 0, 255, 255, 0, 0], "Top": 3, "Height": 13}, "37": {"Width": 7, "Advance": 8, "Bitmap": [127, 242, 123, 0, 0, 77, 179, 240, 57, 239, 0, 8, 213, 33, 240, 55, 239, 0, 128, 127, 0, 126, 243, 123, 34, 213, 8, 0, 0, 0, 0, 179, 76, 0, 0, 0, 0, 77, 179, 0, 0, 0, 0, 8, 213, 33, 126, 59, 124, 0, 128, 127, 0, 240, 6, 239, 34, 213, 8, 0, 240, 68, 240, 179, 76, 0, 0, 128, 243, 126], "Top": 4, "Height": 10}, "38": {"Width": 9, "Advance": 8, "Bitmap": [0, 39, 190, 245, 206, 57, 0, 0, 0, 0, 201, 255, 255, 255, 219, 0, 0, 0, 0, 242, 255, 55, 255, 233, 0, 0, 0, 0, 184, 255, 116, 255, 110, 0, 0, 0, 0, 128, 255, 255, 130, 6, 188, 52, 0, 102, 255, 103, 202, 235, 70, 255, 70, 0, 225, 255, 11, 26, 231, 249, 255, 45, 0, 240, 255, 82, 17, 174, 255, 255, 17, 0, 162, 255, 255, 255, 255, 255, 255, 125, 0, 14, 152, 229, 240, 188, 114, 255, 235, 7], "Top": 4, "Height": 10}, "39": {"Width": 2, "Advance": 8, "Bitmap": [255, 255, 251, 250, 230, 230, 200, 199, 161, 163], "Top": 3, "Height": 5}, "40": {"Width": 5, "Advance": 8, "Bitmap": [0, 0, 9, 152, 142, 0, 12, 199, 253, 110, 0, 166, 255, 118, 0, 46, 255, 207, 2, 0, 146, 255, 106, 0, 0, 209, 255, 40, 0, 0, 239, 255, 12, 0, 0, 242, 255, 14, 0, 0, 213, 255, 43, 0, 0, 157, 255, 117, 0, 0, 58, 255, 219, 8, 0, 0, 180, 255, 153, 0, 0, 17, 207, 255, 160, 0, 0, 12, 157, 119], "Top": 3, "Height": 14}, "41": {"Width": 6, "Advance": 8, "Bitmap": [120, 194, 49, 0, 0, 0, 82, 230, 250, 103, 0, 0, 0, 23, 219, 255, 93, 0, 0, 0, 32, 242, 243, 24, 0, 0, 0, 129, 255, 131, 0, 0, 0, 45, 255, 208, 0, 0, 0, 8, 255, 245, 0, 0, 0, 9, 255, 247, 0, 0, 0, 50, 255, 216, 0, 0, 0, 140, 255, 146, 0, 0, 50, 247, 250, 37, 0, 47, 235, 255, 117, 0, 121, 250, 253, 123, 0, 0, 80, 201, 60, 0, 0, 0], "Top": 3, "Height": 14}, "42": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 136, 189, 68, 255, 66, 183, 136, 213, 255, 255, 255, 255, 255, 214, 0, 7, 161, 248, 162, 8, 0, 0, 174, 255, 132, 255, 176, 0, 0, 67, 187, 4, 185, 63, 0], "Top": 4, "Height": 7}, "43": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 6, "Height": 8}, "44": {"Width": 4, "Advance": 8, "Bitmap": [0, 140, 243, 125, 0, 246, 255, 240, 0, 166, 255, 234, 0, 40, 255, 177, 49, 203, 240, 42, 204, 174, 39, 0], "Top": 11, "Height": 6}, "45": {"Width": 4, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255], "Top": 9, "Height": 2}, "46": {"Width": 3, "Advance": 9, "Bitmap": [91, 243, 85, 234, 255, 212, 91, 244, 85], "Top": 11, "Height": 3}, "47": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 0, 47, 255, 217, 0, 0, 0, 0, 124, 255, 139, 0, 0, 0, 0, 201, 255, 62, 0, 0, 0, 24, 254, 237, 3, 0, 0, 0, 99, 255, 164, 0, 0, 0, 0, 176, 255, 87, 0, 0, 0, 8, 245, 250, 15, 0, 0, 0, 75, 255, 189, 0, 0, 0, 0, 152, 255, 111, 0, 0, 0, 0, 228, 255, 34, 0, 0, 0, 50, 255, 213, 0, 0, 0, 0, 127, 255, 136, 0, 0, 0, 0, 204, 255, 59, 0, 0, 0, 26, 254, 235, 2, 0, 0, 0], "Top": 3, "Height": 14}, "48": {"Width": 6, "Advance": 8, "Bitmap": [0, 125, 237, 238, 130, 0, 85, 255, 255, 255, 255, 89, 183, 255, 112, 114, 255, 184, 231, 255, 28, 30, 255, 231, 251, 255, 205, 204, 255, 250, 251, 255, 205, 204, 255, 249, 232, 255, 28, 30, 255, 230, 185, 255, 112, 114, 255, 184, 90, 255, 255, 255, 255, 89, 0, 131, 238, 238, 131, 0], "Top": 4, "Height": 10}, "49": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 48, 216, 255, 0, 0, 49, 161, 252, 255, 255, 0, 0, 196, 255, 221, 255, 255, 0, 0, 56, 80, 3, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "50": {"Width": 7, "Advance": 8, "Bitmap": [0, 31, 166, 239, 236, 162, 19, 0, 206, 255, 255, 255, 255, 177, 0, 93, 125, 21, 76, 255, 247, 0, 0, 0, 0, 22, 255, 200, 0, 0, 0, 5, 182, 247, 54, 0, 0, 9, 184, 244, 73, 0, 0, 3, 184, 233, 49, 0, 0, 0, 117, 255, 60, 0, 0, 0, 0, 227, 255, 255, 255, 255, 255, 0, 253, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "51": {"Width": 6, "Advance": 8, "Bitmap": [78, 198, 247, 226, 148, 13, 201, 255, 255, 255, 255, 155, 66, 71, 13, 62, 255, 236, 0, 0, 12, 99, 255, 226, 0, 255, 255, 255, 250, 88, 0, 255, 255, 255, 251, 95, 0, 1, 16, 94, 255, 228, 69, 33, 7, 76, 255, 239, 215, 255, 255, 255, 255, 162, 145, 222, 251, 233, 144, 13], "Top": 4, "Height": 10}, "52": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 64, 249, 255, 0, 0, 0, 34, 238, 255, 255, 0, 0, 3, 198, 241, 255, 255, 0, 0, 119, 255, 91, 255, 255, 0, 33, 246, 179, 0, 255, 255, 0, 165, 252, 37, 0, 255, 255, 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0], "Top": 4, "Height": 10}, "53": {"Width": 6, "Advance": 8, "Bitmap": [0, 171, 255, 255, 255, 255, 0, 184, 255, 255, 255, 255, 0, 198, 236, 0, 0, 0, 0, 221, 255, 215, 118, 2, 0, 244, 255, 255, 255, 118, 0, 4, 34, 154, 255, 218, 0, 0, 0, 12, 255, 246, 60, 25, 8, 96, 255, 216, 213, 255, 255, 255, 255, 108, 156, 231, 251, 222, 106, 1], "Top": 4, "Height": 10}, "54": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 42, 155, 221, 227, 0, 91, 249, 255, 255, 249, 42, 249, 237, 115, 42, 11, 156, 255, 140, 100, 31, 0, 223, 255, 255, 255, 244, 68, 249, 254, 158, 193, 255, 204, 247, 252, 1, 13, 255, 246, 211, 255, 78, 70, 255, 222, 121, 255, 255, 255, 255, 126, 4, 144, 237, 244, 147, 4], "Top": 4, "Height": 10}, "55": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 77, 255, 161, 0, 0, 3, 218, 241, 18, 0, 0, 89, 255, 135, 0, 0, 0, 205, 253, 26, 0, 0, 45, 255, 193, 0, 0, 0, 132, 255, 111, 0, 0, 0, 201, 255, 52, 0, 0, 0, 242, 255, 14, 0, 0], "Top": 4, "Height": 10}, "56": {"Width": 6, "Advance": 8, "Bitmap": [7, 142, 237, 243, 186, 38, 123, 255, 255, 255, 255, 203, 184, 255, 52, 50, 255, 244, 137, 255, 104, 72, 255, 153, 16, 237, 255, 255, 213, 7, 136, 255, 86, 183, 255, 130, 231, 255, 9, 19, 255, 233, 241, 255, 68, 67, 255, 239, 174, 255, 255, 255, 255, 159, 21, 168, 238, 242, 158, 14], "Top": 4, "Height": 10}, "57": {"Width": 6, "Advance": 8, "Bitmap": [3, 141, 242, 235, 131, 1, 125, 255, 255, 255, 255, 93, 224, 255, 60, 85, 255, 198, 246, 255, 12, 2, 253, 236, 205, 255, 198, 166, 255, 249, 69, 244, 255, 255, 255, 228, 0, 29, 93, 127, 255, 174, 0, 15, 80, 227, 255, 74, 0, 253, 255, 255, 154, 0, 0, 236, 203, 101, 1, 0], "Top": 4, "Height": 10}, "58": {"Width": 3, "Advance": 9, "Bitmap": [91, 243, 85, 234, 255, 212, 91, 244, 85, 0, 0, 0, 0, 0, 0, 91, 243, 85, 234, 255, 212, 91, 244, 85], "Top": 6, "Height": 8}, "59": {"Width": 4, "Advance": 8, "Bitmap": [0, 91, 243, 85, 0, 234, 255, 212, 0, 91, 244, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 243, 125, 0, 246, 255, 240, 0, 166, 255, 234, 0, 40, 255, 177, 49, 203, 240, 42, 204, 174, 39, 0], "Top": 6, "Height": 11}, "60": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 0, 0, 94, 131, 0, 0, 0, 32, 185, 255, 203, 0, 2, 112, 244, 255, 255, 192, 27, 201, 255, 255, 234, 98, 1, 72, 255, 252, 148, 16, 0, 0, 72, 255, 252, 147, 16, 0, 0, 25, 195, 255, 255, 234, 97, 1, 0, 1, 108, 243, 255, 255, 192, 0, 0, 0, 30, 183, 255, 203, 0, 0, 0, 0, 0, 93, 131], "Top": 3, "Height": 10}, "61": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 8, "Height": 5}, "62": {"Width": 6, "Advance": 8, "Bitmap": [132, 83, 0, 0, 0, 0, 206, 255, 166, 18, 0, 0, 195, 255, 255, 231, 78, 0, 2, 108, 241, 255, 255, 161, 0, 0, 26, 172, 255, 255, 0, 0, 26, 171, 255, 255, 2, 107, 241, 255, 255, 155, 195, 255, 255, 229, 73, 0, 206, 255, 165, 17, 0, 0, 132, 82, 0, 0, 0, 0], "Top": 3, "Height": 10}, "63": {"Width": 6, "Advance": 8, "Bitmap": [98, 200, 241, 241, 170, 22, 200, 255, 255, 255, 255, 174, 68, 61, 11, 67, 255, 243, 0, 0, 0, 65, 255, 196, 0, 1, 119, 250, 232, 40, 0, 132, 255, 220, 35, 0, 0, 245, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 195, 0, 0, 0, 0, 198, 198, 0, 0, 0], "Top": 4, "Height": 10}, "64": {"Width": 7, "Advance": 8, "Bitmap": [0, 30, 175, 244, 229, 135, 6, 10, 211, 81, 14, 124, 255, 132, 111, 139, 0, 0, 10, 255, 224, 190, 59, 31, 209, 247, 255, 252, 232, 20, 172, 255, 247, 255, 255, 249, 5, 235, 255, 47, 255, 255, 248, 4, 251, 255, 2, 255, 255, 229, 21, 231, 255, 45, 255, 255, 179, 70, 152, 255, 253, 255, 255, 88, 176, 14, 159, 237, 229, 129, 1, 181, 163, 45, 7, 0, 0, 0, 5, 120, 209, 246, 254, 216], "Top": 4, "Height": 12}, "65": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 4, "Height": 10}, "66": {"Width": 6, "Advance": 8, "Bitmap": [212, 240, 251, 232, 160, 21, 255, 255, 255, 255, 255, 182, 255, 255, 5, 53, 255, 244, 255, 255, 1, 70, 255, 222, 255, 255, 255, 255, 247, 70, 255, 255, 255, 255, 251, 125, 255, 255, 1, 66, 255, 237, 255, 255, 2, 62, 255, 246, 255, 255, 255, 255, 255, 169, 206, 242, 251, 228, 151, 14], "Top": 4, "Height": 10}, "67": {"Width": 7, "Advance": 8, "Bitmap": [0, 15, 140, 225, 248, 209, 91, 10, 208, 255, 255, 255, 255, 223, 124, 255, 216, 58, 9, 72, 133, 210, 255, 64, 0, 0, 0, 0, 247, 255, 8, 0, 0, 0, 0, 249, 255, 15, 0, 0, 0, 0, 219, 255, 67, 0, 0, 0, 0, 148, 255, 211, 51, 8, 64, 134, 27, 235, 255, 255, 255, 255, 225, 0, 37, 171, 238, 249, 205, 87], "Top": 4, "Height": 10}, "68": {"Width": 7, "Advance": 8, "Bitmap": [214, 244, 252, 229, 159, 29, 0, 255, 255, 255, 255, 255, 229, 23, 255, 255, 5, 42, 212, 255, 143, 255, 255, 0, 0, 65, 255, 218, 255, 255, 0, 0, 12, 255, 247, 255, 255, 0, 0, 15, 255, 246, 255, 255, 0, 0, 72, 255, 214, 255, 255, 8, 61, 219, 255, 135, 255, 255, 255, 255, 255, 219, 17, 217, 248, 250, 221, 145, 19, 0], "Top": 4, "Height": 10}, "69": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "70": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 4, "Height": 10}, "71": {"Width": 7, "Advance": 8, "Bitmap": [0, 20, 151, 231, 254, 255, 234, 13, 215, 255, 255, 255, 255, 190, 130, 255, 219, 61, 11, 72, 122, 212, 255, 68, 0, 0, 0, 0, 247, 255, 13, 0, 0, 0, 0, 248, 255, 13, 0, 0, 255, 255, 219, 255, 58, 0, 0, 255, 255, 148, 255, 200, 39, 5, 255, 255, 28, 236, 255, 255, 255, 255, 255, 0, 40, 178, 242, 255, 255, 255], "Top": 4, "Height": 10}, "72": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255], "Top": 4, "Height": 10}, "73": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "74": {"Width": 6, "Advance": 8, "Bitmap": [0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 8, 255, 252, 115, 93, 9, 109, 255, 223, 216, 255, 255, 255, 255, 128, 72, 209, 249, 232, 131, 4], "Top": 4, "Height": 10}, "75": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 74, 255, 182, 255, 255, 0, 12, 223, 245, 35, 255, 255, 0, 163, 255, 107, 0, 255, 255, 114, 255, 172, 0, 0, 255, 255, 253, 236, 11, 0, 0, 255, 255, 216, 255, 127, 0, 0, 255, 255, 30, 235, 253, 62, 0, 255, 255, 0, 77, 255, 217, 3, 255, 255, 0, 0, 179, 255, 97, 255, 255, 0, 0, 56, 255, 205], "Top": 4, "Height": 10}, "76": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "77": {"Width": 7, "Advance": 8, "Bitmap": [119, 255, 43, 16, 255, 255, 17, 142, 255, 131, 44, 255, 255, 53, 163, 228, 217, 72, 255, 227, 88, 180, 191, 230, 149, 236, 183, 120, 195, 200, 158, 246, 164, 193, 151, 209, 210, 85, 255, 89, 204, 177, 221, 220, 0, 0, 0, 216, 199, 232, 230, 0, 0, 0, 227, 219, 242, 240, 0, 0, 0, 239, 234, 251, 250, 0, 0, 0, 250, 248], "Top": 4, "Height": 10}, "78": {"Width": 7, "Advance": 8, "Bitmap": [255, 246, 31, 0, 0, 255, 255, 255, 255, 171, 0, 0, 255, 255, 255, 255, 255, 53, 0, 255, 255, 255, 255, 229, 185, 0, 255, 255, 255, 255, 106, 255, 57, 255, 255, 255, 255, 6, 223, 178, 255, 255, 255, 255, 0, 97, 254, 255, 255, 255, 255, 0, 5, 229, 255, 255, 255, 255, 0, 0, 120, 255, 255, 255, 255, 0, 0, 17, 244, 255], "Top": 4, "Height": 10}, "79": {"Width": 7, "Advance": 8, "Bitmap": [0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 4, "Height": 10}, "80": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 255, 236, 199, 95, 1, 255, 255, 255, 255, 255, 255, 124, 255, 255, 5, 12, 120, 255, 226, 255, 255, 0, 0, 12, 255, 250, 255, 255, 0, 15, 122, 255, 223, 255, 255, 255, 255, 255, 255, 118, 255, 255, 255, 234, 195, 89, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0], "Top": 4, "Height": 10}, "81": {"Width": 7, "Advance": 8, "Bitmap": [0, 76, 212, 249, 214, 81, 0, 53, 251, 255, 255, 255, 252, 55, 166, 255, 146, 19, 145, 255, 166, 225, 255, 32, 0, 34, 255, 224, 250, 255, 5, 0, 7, 255, 248, 246, 255, 5, 0, 7, 255, 245, 223, 255, 31, 0, 36, 255, 221, 168, 255, 143, 19, 150, 255, 165, 63, 253, 255, 255, 255, 252, 60, 0, 94, 231, 255, 227, 92, 0, 0, 0, 52, 255, 181, 70, 18, 0, 0, 0, 175, 255, 255, 210, 0, 0, 0, 4, 101, 192, 149], "Top": 4, "Height": 13}, "82": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 249, 214, 121, 2, 255, 255, 255, 255, 255, 122, 255, 255, 7, 106, 255, 222, 255, 255, 0, 10, 255, 249, 255, 255, 6, 105, 255, 212, 255, 255, 255, 255, 252, 77, 255, 255, 255, 247, 51, 0, 255, 255, 142, 255, 133, 0, 255, 255, 7, 214, 252, 47, 255, 255, 0, 73, 255, 189], "Top": 4, "Height": 10}, "83": {"Width": 6, "Advance": 8, "Bitmap": [11, 142, 225, 248, 211, 92, 153, 255, 255, 255, 255, 216, 234, 255, 58, 7, 74, 128, 241, 255, 144, 31, 0, 0, 139, 255, 255, 253, 157, 10, 3, 118, 233, 255, 255, 149, 0, 0, 5, 111, 255, 240, 135, 69, 7, 61, 255, 238, 223, 255, 255, 255, 255, 167, 97, 212, 249, 231, 160, 19], "Top": 4, "Height": 10}, "84": {"Width": 8, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 4, "Height": 10}, "85": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 4, "Height": 10}, "86": {"Width": 7, "Advance": 8, "Bitmap": [232, 250, 3, 0, 3, 249, 230, 182, 255, 35, 0, 39, 255, 178, 123, 255, 79, 0, 84, 255, 123, 62, 255, 124, 0, 131, 255, 63, 7, 247, 175, 0, 182, 249, 9, 0, 188, 228, 0, 233, 190, 0, 0, 120, 255, 65, 255, 120, 0, 0, 50, 255, 194, 255, 48, 0, 0, 1, 232, 255, 225, 0, 0, 0, 0, 156, 255, 147, 0, 0], "Top": 4, "Height": 10}, "87": {"Width": 7, "Advance": 8, "Bitmap": [252, 248, 0, 0, 0, 253, 251, 245, 234, 0, 0, 0, 246, 241, 236, 221, 0, 0, 0, 237, 231, 225, 209, 32, 120, 29, 223, 221, 215, 196, 120, 255, 109, 210, 210, 201, 182, 189, 241, 177, 197, 197, 186, 182, 248, 108, 241, 191, 181, 170, 237, 227, 2, 230, 237, 165, 148, 255, 149, 0, 153, 255, 146, 124, 255, 71, 0, 72, 255, 126], "Top": 4, "Height": 10}, "88": {"Width": 8, "Advance": 8, "Bitmap": [178, 255, 160, 0, 0, 137, 255, 178, 32, 246, 252, 37, 29, 247, 246, 32, 0, 124, 255, 164, 159, 255, 124, 0, 0, 7, 218, 253, 253, 218, 7, 0, 0, 0, 82, 255, 255, 87, 0, 0, 0, 0, 152, 255, 255, 173, 0, 0, 0, 45, 253, 212, 213, 255, 68, 0, 0, 184, 255, 89, 92, 255, 206, 1, 68, 255, 221, 3, 3, 225, 255, 81, 197, 255, 109, 0, 0, 119, 255, 200], "Top": 4, "Height": 10}, "89": {"Width": 8, "Advance": 8, "Bitmap": [201, 255, 76, 0, 0, 57, 255, 203, 92, 255, 172, 0, 0, 158, 255, 98, 6, 232, 249, 22, 17, 245, 233, 8, 0, 118, 255, 130, 120, 255, 120, 0, 0, 9, 227, 236, 234, 233, 11, 0, 0, 0, 98, 255, 255, 101, 0, 0, 0, 0, 2, 255, 255, 2, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 4, "Height": 10}, "90": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 177, 0, 0, 0, 148, 245, 31, 0, 0, 39, 251, 123, 0, 0, 0, 177, 222, 8, 0, 0, 62, 255, 86, 0, 0, 0, 200, 201, 0, 0, 0, 79, 255, 67, 0, 0, 0, 204, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "91": {"Width": 4, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 3, "Height": 14}, "92": {"Width": 6, "Advance": 8, "Bitmap": [220, 255, 44, 0, 0, 0, 147, 255, 116, 0, 0, 0, 75, 255, 189, 0, 0, 0, 10, 248, 249, 12, 0, 0, 0, 186, 255, 78, 0, 0, 0, 113, 255, 150, 0, 0, 0, 40, 255, 223, 0, 0, 0, 0, 223, 255, 40, 0, 0, 0, 151, 255, 112, 0, 0, 0, 79, 255, 185, 0, 0, 0, 12, 249, 247, 9, 0, 0, 0, 190, 255, 74, 0, 0, 0, 117, 255, 146, 0, 0, 0, 44, 255, 219], "Top": 3, "Height": 14}, "93": {"Width": 4, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 3, "Height": 14}, "94": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 49, 250, 251, 54, 0, 0, 0, 7, 211, 255, 255, 218, 11, 0, 0, 139, 255, 171, 169, 255, 155, 0, 60, 253, 235, 22, 19, 231, 255, 80, 74, 201, 88, 0, 0, 76, 208, 90], "Top": 4, "Height": 5}, "95": {"Width": 8, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 15, "Height": 2}, "96": {"Width": 4, "Advance": 8, "Bitmap": [64, 187, 34, 0, 175, 255, 245, 113, 0, 65, 179, 136], "Top": 3, "Height": 3}, "97": {"Width": 7, "Advance": 8, "Bitmap": [0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 6, "Height": 8}, "98": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 250, 172, 10, 255, 255, 255, 255, 255, 124, 255, 255, 0, 94, 255, 210, 255, 255, 0, 10, 255, 242, 255, 255, 0, 12, 255, 238, 255, 255, 0, 95, 255, 198, 255, 255, 243, 255, 255, 87, 183, 232, 250, 226, 101, 0], "Top": 3, "Height": 11}, "99": {"Width": 6, "Advance": 8, "Bitmap": [0, 71, 198, 246, 240, 172, 60, 253, 255, 255, 255, 201, 187, 255, 160, 26, 10, 32, 236, 255, 19, 0, 0, 0, 239, 255, 20, 0, 0, 0, 197, 255, 157, 23, 7, 34, 84, 255, 255, 255, 255, 218, 0, 86, 206, 248, 240, 182], "Top": 6, "Height": 8}, "100": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 118, 226, 254, 255, 255, 255, 90, 255, 255, 255, 255, 255, 255, 199, 255, 128, 8, 0, 255, 255, 239, 255, 14, 0, 0, 255, 255, 238, 255, 21, 0, 0, 255, 255, 194, 255, 154, 17, 6, 255, 255, 70, 255, 255, 255, 255, 255, 255, 0, 86, 206, 248, 246, 226, 185], "Top": 3, "Height": 11}, "101": {"Width": 8, "Advance": 8, "Bitmap": [0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 6, "Height": 8}, "102": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 19, 159, 232, 248, 223, 147, 0, 0, 186, 255, 255, 255, 255, 208, 0, 0, 250, 255, 50, 6, 34, 54, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 3, "Height": 11}, "103": {"Width": 7, "Advance": 8, "Bitmap": [0, 67, 191, 243, 247, 224, 174, 72, 253, 255, 255, 255, 255, 255, 195, 255, 162, 23, 6, 255, 255, 245, 255, 23, 0, 0, 255, 255, 242, 255, 13, 0, 0, 255, 255, 206, 255, 129, 10, 34, 255, 255, 101, 255, 255, 255, 255, 255, 255, 1, 129, 230, 249, 210, 255, 244, 0, 0, 0, 6, 77, 255, 209, 27, 255, 255, 255, 255, 255, 106, 45, 198, 239, 250, 220, 122, 2], "Top": 6, "Height": 11}, "104": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 228, 246, 171, 16, 255, 255, 255, 255, 255, 153, 255, 255, 16, 82, 255, 228, 255, 255, 0, 8, 255, 251, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255], "Top": 3, "Height": 11}, "105": {"Width": 7, "Advance": 8, "Bitmap": [0, 201, 199, 0, 0, 0, 0, 0, 201, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 238, 255, 63, 0, 0, 0, 0, 180, 255, 255, 255, 173, 0, 0, 33, 189, 244, 234, 136], "Top": 3, "Height": 11}, "106": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 0, 0, 201, 199, 0, 0, 0, 0, 201, 199, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 2, 255, 254, 48, 156, 25, 64, 255, 233, 122, 255, 255, 255, 255, 157, 48, 175, 234, 238, 163, 16], "Top": 3, "Height": 14}, "107": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 1, 182, 255, 141, 255, 255, 0, 129, 255, 158, 1, 255, 255, 94, 255, 161, 2, 0, 255, 255, 252, 216, 2, 0, 0, 255, 255, 179, 255, 136, 0, 0, 255, 255, 9, 205, 255, 100, 0, 255, 255, 0, 34, 241, 248, 49, 255, 255, 0, 0, 97, 196, 148], "Top": 3, "Height": 11}, "108": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 243, 255, 40, 0, 0, 0, 199, 255, 255, 223, 0, 0, 59, 220, 247, 187], "Top": 3, "Height": 11}, "109": {"Width": 7, "Advance": 8, "Bitmap": [185, 234, 244, 179, 232, 228, 76, 255, 255, 255, 255, 255, 255, 208, 255, 255, 35, 244, 37, 255, 245, 255, 255, 0, 255, 1, 255, 255, 255, 255, 0, 255, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255], "Top": 6, "Height": 8}, "110": {"Width": 7, "Advance": 8, "Bitmap": [175, 217, 238, 251, 229, 144, 8, 255, 255, 255, 255, 255, 255, 143, 255, 255, 7, 9, 115, 255, 222, 255, 255, 0, 0, 12, 255, 250, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255], "Top": 6, "Height": 8}, "111": {"Width": 7, "Advance": 8, "Bitmap": [0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 6, "Height": 8}, "112": {"Width": 6, "Advance": 8, "Bitmap": [178, 228, 249, 227, 118, 0, 255, 255, 255, 255, 255, 90, 255, 255, 8, 119, 255, 200, 255, 255, 0, 16, 255, 239, 255, 255, 0, 9, 255, 241, 255, 255, 20, 92, 255, 209, 255, 255, 255, 255, 255, 122, 255, 255, 210, 247, 164, 6, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 6, "Height": 11}, "113": {"Width": 6, "Advance": 8, "Bitmap": [0, 98, 225, 251, 232, 181, 85, 255, 255, 255, 255, 255, 197, 255, 117, 8, 255, 255, 239, 255, 15, 0, 255, 255, 243, 255, 9, 0, 255, 255, 212, 255, 92, 0, 255, 255, 126, 255, 255, 255, 255, 255, 7, 168, 250, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255], "Top": 6, "Height": 11}, "114": {"Width": 6, "Advance": 8, "Bitmap": [122, 195, 239, 253, 239, 187, 255, 255, 255, 255, 255, 200, 255, 255, 28, 3, 17, 34, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 6, "Height": 8}, "115": {"Width": 6, "Advance": 8, "Bitmap": [28, 163, 237, 249, 227, 158, 196, 255, 255, 255, 255, 213, 239, 255, 54, 8, 40, 65, 144, 255, 239, 158, 58, 0, 0, 79, 171, 244, 255, 125, 94, 48, 7, 49, 255, 236, 227, 255, 255, 255, 255, 209, 123, 217, 250, 241, 185, 42], "Top": 6, "Height": 8}, "116": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 250, 255, 48, 7, 48, 0, 0, 209, 255, 255, 255, 221, 0, 0, 62, 210, 249, 237, 170], "Top": 4, "Height": 10}, "117": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 6, "Height": 8}, "118": {"Width": 7, "Advance": 8, "Bitmap": [166, 255, 49, 0, 1, 236, 220, 97, 255, 110, 0, 53, 255, 149, 26, 254, 182, 0, 133, 255, 75, 0, 203, 247, 11, 218, 241, 6, 0, 123, 255, 131, 255, 162, 0, 0, 35, 255, 251, 255, 67, 0, 0, 0, 198, 255, 224, 2, 0, 0, 0, 98, 255, 123, 0, 0], "Top": 6, "Height": 8}, "119": {"Width": 8, "Advance": 8, "Bitmap": [245, 255, 0, 0, 0, 0, 255, 244, 224, 255, 0, 0, 0, 0, 255, 221, 201, 255, 64, 255, 116, 0, 255, 195, 174, 255, 113, 255, 217, 1, 255, 164, 143, 255, 166, 235, 255, 75, 255, 130, 105, 255, 227, 84, 242, 199, 255, 89, 63, 255, 245, 8, 123, 255, 255, 45, 13, 253, 179, 0, 8, 222, 246, 3], "Top": 6, "Height": 8}, "120": {"Width": 8, "Advance": 8, "Bitmap": [154, 255, 212, 9, 0, 132, 255, 168, 6, 199, 255, 153, 55, 252, 230, 18, 0, 26, 231, 255, 234, 255, 74, 0, 0, 0, 58, 253, 255, 160, 0, 0, 0, 0, 109, 255, 255, 210, 8, 0, 0, 64, 251, 238, 204, 255, 138, 0, 22, 231, 255, 83, 32, 243, 252, 46, 174, 255, 180, 0, 0, 112, 255, 188], "Top": 6, "Height": 8}, "121": {"Width": 8, "Advance": 8, "Bitmap": [0, 222, 255, 34, 0, 30, 255, 222, 0, 153, 255, 105, 0, 89, 255, 156, 0, 80, 255, 180, 0, 152, 255, 88, 0, 9, 244, 249, 16, 219, 253, 19, 0, 0, 165, 255, 141, 255, 200, 0, 0, 0, 66, 255, 254, 255, 120, 0, 0, 0, 1, 214, 255, 255, 37, 0, 0, 0, 0, 123, 255, 196, 0, 0, 0, 0, 44, 228, 255, 86, 0, 0, 174, 255, 255, 255, 185, 0, 0, 0, 198, 249, 234, 156, 13, 0, 0, 0], "Top": 6, "Height": 11}, "122": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 153, 0, 0, 29, 237, 201, 6, 0, 3, 195, 240, 31, 0, 0, 126, 255, 90, 0, 0, 49, 250, 175, 0, 0, 0, 206, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 6, "Height": 8}, "123": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 77, 220, 252, 255, 0, 0, 221, 255, 255, 255, 0, 0, 253, 255, 36, 0, 0, 0, 255, 255, 0, 0, 0, 1, 255, 255, 0, 0, 0, 59, 255, 228, 0, 0, 255, 255, 218, 76, 0, 0, 255, 255, 219, 76, 0, 0, 0, 61, 255, 228, 0, 0, 0, 1, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 253, 255, 36, 0, 0, 0, 221, 255, 255, 255, 0, 0, 77, 221, 253, 255], "Top": 3, "Height": 14}, "124": {"Width": 2, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 3, "Height": 14}, "125": {"Width": 6, "Advance": 8, "Bitmap": [255, 252, 218, 74, 0, 0, 255, 255, 255, 221, 0, 0, 0, 38, 255, 253, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 229, 255, 59, 0, 0, 0, 78, 220, 255, 255, 0, 0, 74, 217, 255, 255, 0, 0, 228, 255, 61, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 0, 37, 255, 253, 0, 0, 255, 255, 255, 222, 0, 0, 255, 253, 219, 74, 0, 0], "Top": 3, "Height": 14}, "126": {"Width": 7, "Advance": 8, "Bitmap": [31, 211, 234, 134, 22, 146, 178, 174, 255, 255, 255, 255, 255, 168, 180, 143, 24, 137, 235, 212, 29], "Top": 8, "Height": 3}, "160": {"Width": 0, "Advance": 8, "Bitmap": [], "Top": 14, "Height": 0}, "161": {"Width": 2, "Advance": 8, "Bitmap": [199, 198, 199, 198, 0, 0, 202, 193, 226, 219, 245, 240, 254, 251, 255, 255, 255, 255, 255, 255], "Top": 7, "Height": 10}, "162": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 78, 206, 255, 255, 217, 70, 252, 255, 255, 255, 188, 191, 255, 151, 21, 0, 0, 240, 255, 18, 0, 0, 0, 240, 255, 19, 0, 0, 0, 193, 255, 154, 22, 7, 33, 73, 253, 255, 255, 255, 219, 0, 80, 207, 255, 255, 227, 0, 0, 0, 255, 255, 3, 0, 0, 0, 255, 255, 0], "Top": 4, "Height": 12}, "163": {"Width": 6, "Advance": 8, "Bitmap": [0, 24, 171, 238, 236, 148, 0, 172, 255, 255, 255, 162, 0, 240, 255, 56, 81, 54, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 0, 255, 249, 0, 0, 0, 0, 255, 224, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "164": {"Width": 8, "Advance": 8, "Bitmap": [52, 190, 17, 0, 0, 16, 189, 54, 156, 255, 226, 242, 242, 225, 255, 153, 0, 217, 255, 255, 255, 255, 216, 0, 0, 249, 255, 60, 60, 255, 248, 0, 0, 216, 255, 255, 255, 255, 216, 0, 153, 255, 226, 245, 245, 227, 255, 155, 55, 189, 16, 0, 0, 17, 190, 52], "Top": 6, "Height": 7}, "165": {"Width": 8, "Advance": 8, "Bitmap": [185, 255, 52, 0, 0, 52, 255, 182, 46, 253, 156, 0, 0, 155, 254, 44, 0, 161, 246, 24, 24, 245, 172, 0, 0, 38, 252, 146, 147, 255, 55, 0, 0, 0, 162, 248, 248, 188, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 4, "Height": 10}, "166": {"Width": 2, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 3, "Height": 14}, "167": {"Width": 6, "Advance": 8, "Bitmap": [27, 167, 232, 247, 218, 148, 190, 255, 255, 255, 255, 154, 241, 255, 74, 1, 0, 0, 162, 255, 255, 224, 113, 2, 183, 255, 255, 255, 255, 148, 250, 255, 47, 133, 255, 241, 240, 255, 125, 44, 255, 228, 149, 255, 255, 255, 255, 121, 4, 119, 231, 255, 255, 175, 133, 91, 14, 82, 255, 243, 218, 255, 255, 255, 255, 202, 105, 207, 247, 241, 188, 41], "Top": 4, "Height": 12}, "168": {"Width": 5, "Advance": 8, "Bitmap": [199, 198, 0, 199, 199, 201, 199, 0, 201, 201], "Top": 3, "Height": 2}, "169": {"Width": 8, "Advance": 8, "Bitmap": [0, 58, 185, 244, 243, 184, 56, 0, 57, 241, 113, 23, 23, 113, 240, 55, 189, 108, 78, 227, 245, 38, 112, 186, 244, 14, 229, 58, 10, 0, 15, 244, 244, 14, 232, 61, 11, 0, 15, 244, 188, 105, 84, 230, 242, 42, 109, 184, 43, 236, 107, 21, 21, 108, 235, 39, 0, 43, 181, 244, 244, 179, 42, 0], "Top": 6, "Height": 8}, "170": {"Width": 5, "Advance": 8, "Bitmap": [0, 213, 249, 225, 83, 0, 21, 53, 255, 226, 7, 72, 90, 255, 254, 191, 255, 184, 255, 255, 240, 255, 22, 255, 255, 100, 224, 250, 238, 205], "Top": 4, "Height": 6}, "171": {"Width": 8, "Advance": 8, "Bitmap": [0, 41, 193, 16, 0, 46, 191, 14, 1, 194, 218, 1, 1, 198, 216, 1, 99, 255, 110, 0, 101, 255, 108, 0, 216, 255, 27, 0, 216, 255, 27, 0, 93, 255, 111, 0, 96, 255, 110, 0, 0, 188, 220, 2, 0, 193, 218, 1, 0, 37, 191, 15, 0, 41, 190, 14], "Top": 6, "Height": 7}, "172": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255], "Top": 8, "Height": 6}, "174": {"Width": 8, "Advance": 8, "Bitmap": [0, 58, 185, 244, 243, 184, 56, 0, 57, 241, 113, 23, 23, 113, 240, 55, 189, 108, 0, 239, 245, 142, 112, 186, 244, 14, 0, 255, 45, 234, 15, 244, 244, 14, 0, 255, 255, 82, 15, 244, 188, 105, 0, 255, 126, 198, 114, 184, 43, 236, 107, 21, 21, 108, 235, 39, 0, 43, 181, 244, 244, 179, 42, 0], "Top": 6, "Height": 8}, "175": {"Width": 5, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255], "Top": 4, "Height": 1}, "176": {"Width": 4, "Advance": 8, "Bitmap": [88, 232, 230, 81, 233, 53, 51, 229, 234, 54, 52, 230, 94, 234, 231, 83], "Top": 3, "Height": 4}, "177": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 5, "Height": 9}, "178": {"Width": 4, "Advance": 8, "Bitmap": [115, 232, 239, 110, 139, 41, 255, 241, 0, 90, 255, 211, 42, 240, 238, 42, 193, 255, 83, 0, 250, 255, 255, 255], "Top": 4, "Height": 6}, "179": {"Width": 5, "Advance": 8, "Bitmap": [146, 233, 237, 128, 0, 133, 47, 255, 241, 0, 0, 255, 255, 174, 0, 0, 1, 62, 254, 16, 136, 32, 52, 252, 15, 179, 244, 230, 108, 0], "Top": 4, "Height": 6}, "180": {"Width": 4, "Advance": 8, "Bitmap": [0, 35, 187, 63, 113, 245, 255, 174, 136, 179, 64, 0], "Top": 3, "Height": 3}, "181": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 8, 0, 255, 255, 255, 255, 84, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 230, 248, 225, 172, 255, 246, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 6, "Height": 11}, "182": {"Width": 7, "Advance": 8, "Bitmap": [1, 104, 203, 240, 248, 230, 190, 129, 255, 255, 255, 254, 255, 255, 238, 255, 255, 255, 1, 255, 255, 243, 255, 255, 255, 0, 255, 255, 188, 255, 255, 255, 0, 255, 255, 36, 200, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255], "Top": 4, "Height": 13}, "183": {"Width": 3, "Advance": 9, "Bitmap": [91, 243, 85, 234, 255, 212, 91, 244, 85], "Top": 8, "Height": 3}, "184": {"Width": 3, "Advance": 8, "Bitmap": [0, 176, 122, 0, 61, 235, 207, 247, 150], "Top": 14, "Height": 3}, "185": {"Width": 5, "Advance": 8, "Bitmap": [27, 122, 236, 255, 0, 208, 224, 255, 255, 0, 26, 2, 255, 255, 0, 0, 0, 255, 255, 0, 255, 255, 255, 255, 255], "Top": 4, "Height": 5}, "186": {"Width": 6, "Advance": 8, "Bitmap": [5, 136, 238, 239, 137, 5, 122, 255, 255, 255, 255, 122, 217, 255, 75, 75, 255, 216, 246, 255, 6, 7, 255, 246, 218, 255, 73, 73, 255, 218, 125, 255, 255, 255, 255, 126, 5, 140, 231, 231, 140, 6], "Top": 4, "Height": 7}, "187": {"Width": 7, "Advance": 8, "Bitmap": [165, 77, 0, 159, 90, 0, 0, 153, 233, 21, 145, 237, 25, 0, 32, 250, 176, 22, 243, 181, 0, 0, 187, 255, 55, 162, 255, 56, 31, 250, 179, 21, 242, 183, 0, 152, 235, 24, 144, 240, 28, 0, 164, 84, 0, 159, 97, 0, 0], "Top": 6, "Height": 7}, "188": {"Width": 8, "Advance": 8, "Bitmap": [85, 247, 0, 0, 0, 60, 191, 0, 236, 255, 0, 0, 0, 188, 63, 0, 50, 255, 0, 0, 61, 190, 0, 0, 0, 255, 0, 0, 189, 62, 0, 0, 0, 0, 0, 62, 189, 0, 0, 0, 0, 0, 0, 190, 61, 0, 0, 0, 0, 0, 63, 188, 1, 186, 255, 0, 0, 0, 191, 60, 110, 149, 255, 0, 0, 64, 188, 0, 241, 255, 255, 255, 0, 191, 60, 0, 0, 0, 255, 0], "Top": 4, "Height": 10}, "189": {"Width": 8, "Advance": 8, "Bitmap": [69, 246, 0, 0, 0, 35, 213, 6, 198, 255, 0, 0, 0, 174, 81, 0, 0, 255, 0, 0, 63, 191, 0, 0, 0, 255, 0, 2, 204, 49, 0, 0, 0, 0, 0, 97, 158, 0, 0, 0, 0, 0, 12, 218, 25, 0, 0, 0, 0, 0, 132, 123, 0, 143, 245, 176, 0, 30, 216, 9, 0, 0, 40, 234, 0, 166, 89, 0, 0, 75, 205, 65, 56, 198, 1, 0, 0, 229, 255, 255], "Top": 4, "Height": 10}, "190": {"Width": 8, "Advance": 8, "Bitmap": [156, 246, 126, 0, 0, 3, 206, 46, 11, 91, 199, 0, 0, 102, 153, 0, 25, 255, 236, 0, 14, 219, 22, 0, 209, 250, 169, 0, 136, 119, 0, 0, 0, 0, 0, 33, 215, 7, 0, 0, 0, 0, 0, 171, 85, 0, 0, 0, 0, 0, 60, 194, 0, 171, 255, 88, 0, 1, 201, 52, 94, 164, 240, 88, 0, 94, 161, 0, 225, 255, 255, 219, 10, 217, 27, 0, 0, 0, 240, 88], "Top": 4, "Height": 10}, "191": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 199, 193, 0, 0, 0, 0, 200, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 255, 48, 0, 0, 67, 254, 244, 10, 0, 29, 236, 255, 115, 0, 0, 170, 255, 173, 2, 0, 0, 240, 255, 19, 0, 0, 0, 233, 255, 79, 11, 103, 129, 148, 255, 255, 255, 255, 217, 13, 160, 240, 247, 196, 73], "Top": 6, "Height": 11}, "192": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 64, 187, 34, 0, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 0, "Height": 14}, "193": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 0, "Height": 14}, "194": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 0, 4, 162, 255, 255, 161, 4, 0, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 0, "Height": 14}, "195": {"Width": 8, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 1, "Height": 13}, "196": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 199, 198, 0, 199, 199, 0, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 1, "Height": 13}, "197": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 27, 133, 134, 30, 0, 0, 0, 0, 197, 137, 137, 209, 0, 0, 0, 0, 213, 114, 113, 221, 0, 0, 0, 0, 134, 255, 255, 149, 0, 0, 0, 0, 195, 255, 255, 211, 0, 0, 0, 16, 252, 206, 208, 255, 28, 0, 0, 85, 255, 113, 115, 255, 100, 0, 0, 158, 255, 31, 33, 255, 172, 0, 0, 227, 214, 0, 0, 218, 237, 1, 39, 255, 255, 255, 255, 255, 255, 47, 104, 255, 255, 255, 255, 255, 255, 111, 165, 255, 70, 0, 0, 76, 255, 169, 226, 255, 18, 0, 0, 20, 255, 227], "Top": 1, "Height": 13}, "198": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 45, 255, 255, 255, 255, 255, 0, 0, 135, 243, 255, 255, 255, 255, 0, 0, 222, 183, 255, 255, 0, 0, 0, 52, 255, 118, 255, 255, 0, 0, 0, 134, 255, 57, 255, 255, 255, 0, 0, 210, 247, 6, 255, 255, 255, 0, 28, 255, 255, 255, 255, 255, 0, 0, 98, 255, 255, 255, 255, 255, 0, 0, 163, 255, 104, 0, 255, 255, 255, 255, 225, 255, 48, 0, 255, 255, 255, 255], "Top": 4, "Height": 10}, "199": {"Width": 8, "Advance": 8, "Bitmap": [0, 14, 140, 225, 248, 209, 91, 0, 9, 206, 255, 255, 255, 255, 223, 0, 122, 255, 216, 58, 9, 72, 133, 0, 209, 255, 64, 0, 0, 0, 0, 0, 246, 255, 8, 0, 0, 0, 0, 0, 248, 255, 16, 0, 0, 0, 0, 0, 213, 255, 74, 0, 0, 0, 0, 0, 126, 255, 221, 65, 11, 29, 155, 2, 9, 191, 255, 255, 255, 255, 255, 1, 0, 4, 116, 205, 255, 240, 123, 0, 0, 0, 0, 10, 236, 121, 0, 0, 0, 0, 0, 16, 46, 239, 0, 0, 0, 0, 0, 209, 244, 133, 0, 0], "Top": 4, "Height": 13}, "200": {"Width": 6, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "201": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 113, 245, 255, 174, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "202": {"Width": 6, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 4, 162, 255, 255, 161, 4, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "203": {"Width": 6, "Advance": 8, "Bitmap": [199, 198, 0, 199, 199, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 1, "Height": 13}, "204": {"Width": 6, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "205": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 113, 245, 255, 174, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "206": {"Width": 6, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 4, 162, 255, 255, 161, 4, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "207": {"Width": 6, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 1, "Height": 13}, "208": {"Width": 8, "Advance": 8, "Bitmap": [0, 213, 243, 252, 231, 161, 31, 0, 0, 255, 255, 255, 255, 255, 231, 25, 0, 255, 255, 4, 42, 212, 255, 144, 0, 255, 255, 0, 0, 65, 255, 218, 255, 255, 255, 255, 0, 12, 255, 247, 255, 255, 255, 255, 0, 15, 255, 246, 0, 255, 255, 0, 0, 72, 255, 214, 0, 255, 255, 9, 62, 220, 255, 135, 0, 255, 255, 255, 255, 255, 219, 17, 0, 219, 247, 250, 223, 146, 19, 0], "Top": 4, "Height": 10}, "209": {"Width": 7, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 255, 246, 31, 0, 0, 255, 255, 255, 255, 171, 0, 0, 255, 255, 255, 255, 255, 53, 0, 255, 255, 255, 255, 229, 185, 0, 255, 255, 255, 255, 106, 255, 57, 255, 255, 255, 255, 6, 223, 178, 255, 255, 255, 255, 0, 97, 254, 255, 255, 255, 255, 0, 5, 229, 255, 255, 255, 255, 0, 0, 120, 255, 255, 255, 255, 0, 0, 17, 244, 255], "Top": 1, "Height": 13}, "210": {"Width": 7, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 0, "Height": 14}, "211": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 0, "Height": 14}, "212": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 4, 162, 255, 255, 161, 4, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 0, "Height": 14}, "213": {"Width": 7, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 1, "Height": 13}, "214": {"Width": 7, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 1, "Height": 13}, "215": {"Width": 6, "Advance": 8, "Bitmap": [102, 139, 0, 0, 141, 99, 156, 255, 132, 133, 255, 154, 1, 144, 255, 255, 140, 0, 0, 129, 255, 255, 132, 0, 145, 255, 124, 131, 255, 148, 98, 123, 0, 0, 129, 92], "Top": 7, "Height": 6}, "216": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 0, 0, 0, 150, 18, 0, 34, 169, 237, 249, 214, 253, 52, 25, 233, 255, 255, 236, 255, 255, 0, 145, 255, 181, 20, 143, 255, 255, 0, 216, 255, 44, 57, 245, 255, 255, 0, 247, 255, 14, 216, 146, 255, 255, 0, 250, 255, 137, 247, 31, 255, 248, 0, 226, 255, 252, 143, 30, 255, 223, 0, 165, 255, 254, 46, 136, 255, 165, 0, 49, 254, 255, 255, 255, 252, 54, 0, 46, 246, 213, 249, 215, 81, 0, 0, 17, 139, 0, 0, 0, 0, 0, 0], "Top": 3, "Height": 12}, "217": {"Width": 6, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 0, "Height": 14}, "218": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 113, 245, 255, 174, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 0, "Height": 14}, "219": {"Width": 6, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 4, 162, 255, 255, 161, 4, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 0, "Height": 14}, "220": {"Width": 6, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 1, "Height": 13}, "221": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 255, 76, 0, 0, 57, 255, 203, 92, 255, 172, 0, 0, 158, 255, 98, 6, 232, 249, 22, 17, 245, 233, 8, 0, 118, 255, 130, 120, 255, 120, 0, 0, 9, 227, 236, 234, 233, 11, 0, 0, 0, 98, 255, 255, 101, 0, 0, 0, 0, 2, 255, 255, 2, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 0, "Height": 14}, "222": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 2, 0, 0, 0, 255, 255, 254, 226, 136, 8, 255, 255, 249, 255, 255, 133, 255, 255, 0, 84, 255, 220, 255, 255, 0, 9, 255, 246, 255, 255, 3, 100, 255, 217, 255, 255, 255, 255, 255, 121, 255, 255, 252, 221, 125, 4, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 4, "Height": 10}, "223": {"Width": 7, "Advance": 8, "Bitmap": [9, 146, 238, 249, 193, 44, 0, 140, 255, 255, 255, 255, 206, 0, 225, 255, 88, 48, 255, 249, 0, 252, 255, 5, 44, 255, 194, 0, 255, 255, 0, 176, 255, 60, 0, 255, 255, 0, 244, 255, 20, 0, 255, 255, 0, 184, 255, 191, 17, 255, 255, 0, 7, 141, 255, 181, 255, 255, 0, 115, 40, 255, 245, 255, 255, 0, 231, 255, 255, 215, 255, 255, 0, 177, 248, 219, 70], "Top": 3, "Height": 11}, "224": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 64, 187, 34, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 2, "Height": 12}, "225": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 2, "Height": 12}, "226": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 4, 162, 255, 255, 161, 4, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 2, "Height": 12}, "227": {"Width": 7, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 3, "Height": 11}, "228": {"Width": 7, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 3, "Height": 11}, "229": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 141, 244, 141, 0, 0, 0, 0, 244, 72, 244, 0, 0, 0, 0, 143, 245, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 2, "Height": 12}, "230": {"Width": 9, "Advance": 8, "Bitmap": [0, 182, 243, 205, 99, 226, 207, 37, 0, 0, 218, 255, 255, 255, 255, 255, 170, 0, 0, 36, 14, 183, 255, 144, 81, 234, 0, 47, 203, 249, 247, 255, 255, 255, 255, 2, 206, 255, 255, 255, 255, 255, 255, 255, 6, 245, 255, 55, 123, 255, 150, 7, 26, 0, 189, 255, 255, 255, 255, 255, 255, 214, 0, 34, 194, 244, 196, 102, 214, 246, 186, 0], "Top": 6, "Height": 8}, "231": {"Width": 6, "Advance": 8, "Bitmap": [0, 70, 198, 246, 242, 179, 57, 253, 255, 255, 255, 190, 183, 255, 160, 26, 0, 0, 235, 255, 19, 0, 0, 0, 241, 255, 20, 0, 0, 0, 192, 255, 157, 23, 0, 0, 64, 249, 255, 255, 255, 211, 0, 59, 185, 252, 253, 206, 0, 0, 0, 211, 114, 0, 0, 0, 0, 44, 238, 0, 0, 0, 207, 245, 136, 0], "Top": 6, "Height": 11}, "232": {"Width": 8, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 2, "Height": 12}, "233": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 2, "Height": 12}, "234": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 0, 4, 162, 255, 255, 161, 4, 0, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 2, "Height": 12}, "235": {"Width": 8, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 3, "Height": 11}, "236": {"Width": 6, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 241, 255, 47, 103, 0, 0, 193, 255, 255, 239, 0, 0, 53, 215, 241, 155], "Top": 2, "Height": 12}, "237": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 113, 245, 255, 174, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 241, 255, 47, 103, 0, 0, 193, 255, 255, 239, 0, 0, 53, 215, 241, 155], "Top": 2, "Height": 12}, "238": {"Width": 6, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 4, 162, 255, 255, 161, 4, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 241, 255, 47, 103, 0, 0, 193, 255, 255, 239, 0, 0, 53, 215, 241, 155], "Top": 2, "Height": 12}, "239": {"Width": 6, "Advance": 8, "Bitmap": [199, 198, 0, 199, 199, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 241, 255, 47, 103, 0, 0, 193, 255, 255, 239, 0, 0, 53, 215, 241, 155], "Top": 3, "Height": 11}, "240": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 109, 207, 59, 38, 74, 0, 0, 113, 255, 253, 255, 195, 0, 0, 196, 197, 217, 255, 53, 0, 0, 1, 0, 58, 255, 146, 0, 85, 203, 237, 247, 255, 208, 97, 255, 255, 255, 255, 255, 244, 213, 255, 116, 21, 13, 255, 247, 245, 255, 10, 0, 32, 255, 222, 212, 255, 108, 15, 149, 255, 164, 104, 255, 255, 255, 255, 254, 59, 0, 106, 223, 249, 215, 88, 0], "Top": 3, "Height": 11}, "241": {"Width": 7, "Advance": 8, "Bitmap": [75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 175, 217, 238, 251, 229, 144, 8, 255, 255, 255, 255, 255, 255, 143, 255, 255, 7, 9, 115, 255, 222, 255, 255, 0, 0, 12, 255, 250, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255], "Top": 3, "Height": 11}, "242": {"Width": 7, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 2, "Height": 12}, "243": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 2, "Height": 12}, "244": {"Width": 7, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 0, 4, 162, 255, 255, 161, 4, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 2, "Height": 12}, "245": {"Width": 7, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 3, "Height": 11}, "246": {"Width": 7, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 3, "Height": 11}, "247": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 199, 200, 0, 0, 0, 0, 201, 202, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, 0, 0, 0, 0, 199, 200, 0, 0], "Top": 6, "Height": 8}, "248": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 0, 0, 21, 9, 0, 86, 214, 248, 212, 206, 158, 64, 255, 255, 255, 255, 255, 86, 195, 255, 127, 45, 246, 255, 187, 246, 252, 11, 195, 131, 240, 237, 226, 239, 129, 195, 12, 253, 237, 86, 254, 245, 44, 128, 255, 196, 0, 146, 255, 255, 255, 255, 87, 0, 200, 189, 238, 235, 113, 0, 0, 29, 1, 0, 0, 0, 0], "Top": 5, "Height": 10}, "249": {"Width": 7, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 2, "Height": 12}, "250": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 2, "Height": 12}, "251": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 4, 162, 255, 255, 161, 4, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 2, "Height": 12}, "252": {"Width": 7, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 3, "Height": 11}, "253": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 255, 34, 0, 30, 255, 222, 0, 153, 255, 105, 0, 89, 255, 156, 0, 80, 255, 180, 0, 152, 255, 88, 0, 9, 244, 249, 16, 219, 253, 19, 0, 0, 165, 255, 141, 255, 200, 0, 0, 0, 66, 255, 254, 255, 120, 0, 0, 0, 1, 214, 255, 255, 37, 0, 0, 0, 0, 123, 255, 196, 0, 0, 0, 0, 44, 228, 255, 86, 0, 0, 174, 255, 255, 255, 185, 0, 0, 0, 198, 249, 234, 156, 13, 0, 0, 0], "Top": 2, "Height": 15}, "254": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 240, 246, 198, 73, 0, 255, 255, 255, 255, 255, 254, 71, 255, 255, 8, 19, 163, 255, 196, 255, 255, 0, 0, 24, 255, 246, 255, 255, 0, 0, 14, 255, 238, 255, 255, 28, 10, 131, 255, 197, 255, 255, 255, 255, 255, 255, 90, 255, 255, 203, 248, 228, 106, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0], "Top": 3, "Height": 14}, "255": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 199, 198, 0, 199, 199, 0, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 255, 34, 0, 30, 255, 222, 0, 153, 255, 105, 0, 89, 255, 156, 0, 80, 255, 180, 0, 152, 255, 88, 0, 9, 244, 249, 16, 219, 253, 19, 0, 0, 165, 255, 141, 255, 200, 0, 0, 0, 66, 255, 254, 255, 120, 0, 0, 0, 1, 214, 255, 255, 37, 0, 0, 0, 0, 123, 255, 196, 0, 0, 0, 0, 44, 228, 255, 86, 0, 0, 174, 255, 255, 255, 185, 0, 0, 0, 198, 249, 234, 156, 13, 0, 0, 0], "Top": 3, "Height": 14}}, "Size": 16}
--- a/UnitTestsSources/ImageTests.cpp	Wed Sep 02 15:07:47 2015 +0200
+++ b/UnitTestsSources/ImageTests.cpp	Fri Sep 04 13:44:21 2015 +0200
@@ -33,14 +33,18 @@
 #include "PrecompiledHeadersUnitTests.h"
 #include "gtest/gtest.h"
 
-#include <stdint.h>
+#include "../Core/ImageFormats/Font.h"
 #include "../Core/ImageFormats/Image.h"
+#include "../Core/ImageFormats/ImageProcessing.h"
+#include "../Core/ImageFormats/JpegReader.h"
+#include "../Core/ImageFormats/JpegWriter.h"
 #include "../Core/ImageFormats/PngReader.h"
 #include "../Core/ImageFormats/PngWriter.h"
-#include "../Core/ImageFormats/JpegReader.h"
-#include "../Core/ImageFormats/JpegWriter.h"
 #include "../Core/Toolbox.h"
 #include "../Core/Uuid.h"
+#include "../OrthancServer/OrthancInitialization.h"
+
+#include <stdint.h>
 
 
 TEST(PngWriter, ColorPattern)
@@ -239,3 +243,17 @@
     }
   }
 }
+
+
+TEST(Font, Basic)
+{
+  Orthanc::Image s(Orthanc::PixelFormat_RGB24, 640, 480);
+  memset(s.GetBuffer(), 0, s.GetPitch() * s.GetHeight());
+
+  ASSERT_GE(1, Orthanc::Configuration::GetFontRegistry().GetSize());
+  Orthanc::Configuration::GetFontRegistry().GetFont(0).DrawText(s, "Hello world É\n\rComment ça va ?\nq", 50, 60, 255, 0, 0);
+
+  Orthanc::PngWriter w;
+  w.WriteToFile("UnitTestsResults/font.png", s);
+}
+