misc improvements, speed research, etc
authorDuncan Mac-Vicar P <dmacvicar@suse.de>
Tue, 17 Apr 2007 17:19:39 +0000 (17:19 +0000)
committerDuncan Mac-Vicar P <dmacvicar@suse.de>
Tue, 17 Apr 2007 17:19:39 +0000 (17:19 +0000)
14 files changed:
devel/devel.dmacvicar/SUSETagsParser.cc
devel/devel.dmacvicar/SUSETagsParser.h
devel/devel.dmacvicar/SUSETagsParser_tp.cc
tests/CMakeLists.txt
tests/README [new file with mode: 0644]
tests/cache/CMakeLists.txt
tests/cache/CacheInitializer_test.cc [moved from tests/cache/CacheInitializer.cc with 100% similarity]
tests/cache/CacheStore_test.cc [new file with mode: 0644]
tests/cache/TIMING.txt [new file with mode: 0644]
tests/cache/data/package-set.txt.gz [new file with mode: 0644]
tests/cache/dump-nvra.rb [new file with mode: 0644]
tests/cache/ram-cachestore-1.ps [new file with mode: 0644]
zypp/parser/yum/PatchesFileReader.h
zypp2/cache/CacheStore.cpp

index 00a2e71..e965eee 100644 (file)
@@ -42,66 +42,13 @@ struct PackageDataProvider
   PackageDataProviderPtr _fallback_provider;
 };
 
-
-  PackagesParser::PackagesParser( const data::RecordId &catalog_id, zypp::cache::CacheStore consumer )
-    : _consumer(consumer), _catalog_id(catalog_id)
-  {
-    ZYpp::Ptr z = getZYpp();
-    _system_arch = z->architecture();
-    
-    // initialize tagset
-    _tagset.setAllowMultipleSets (true);  // multiple tagsets per file
-    _tagset.setAllowUnknownTags (true);   // skip unknown tags
-
-    // Using loop and switch to get a compiler warning, if tags are
-    // defined but uninitialized, or vice versa.
-    for ( Tags tag = Tags(0); tag < NUM_TAGS; tag = Tags(tag+1) )
-    {
-      switch ( tag )
-      {
-  #define DEFTAG(T,ARGS) case T: _tagset.addTag ARGS; break
-        // for the 'packages' file
-        DEFTAG( PACKAGE,  ( "Pkg", tag, TaggedFile::SINGLE, TaggedFile::START) );
-        DEFTAG( REQUIRES, ( "Req", tag, TaggedFile::MULTI) );
-        DEFTAG( PREREQUIRES,  ( "Prq", tag, TaggedFile::MULTI) );
-        DEFTAG( PROVIDES, ( "Prv", tag, TaggedFile::MULTI) );
-        DEFTAG( CONFLICTS,  ( "Con", tag, TaggedFile::MULTI) );
-        DEFTAG( OBSOLETES,  ( "Obs", tag, TaggedFile::MULTI) );
-        DEFTAG( RECOMMENDS, ( "Rec", tag, TaggedFile::MULTI) );
-        DEFTAG( SUGGESTS, ( "Sug", tag, TaggedFile::MULTI) );
-      
-        DEFTAG( LOCATION, ( "Loc", tag, TaggedFile::SINGLE) );
-        DEFTAG( SIZE,   ( "Siz", tag, TaggedFile::SINGLE) );
-        DEFTAG( BUILDTIME,  ( "Tim", tag, TaggedFile::SINGLE) );
-        DEFTAG( SOURCERPM,  ( "Src", tag, TaggedFile::SINGLEPOS) );
-        DEFTAG( GROUP,    ( "Grp", tag, TaggedFile::SINGLE) );
-        DEFTAG( LICENSE,  ( "Lic", tag, TaggedFile::SINGLEPOS) );
-        DEFTAG( AUTHORS,  ( "Aut", tag, TaggedFile::MULTI) );
-        DEFTAG( SHAREWITH,  ( "Shr", tag, TaggedFile::SINGLE) );
-        DEFTAG( KEYWORDS, ( "Key", tag, TaggedFile::MULTI) );
-        
-        // for the 'packages.<locale>' file
-        DEFTAG( SUMMARY,  ( "Sum", tag, TaggedFile::SINGLE) );
-        DEFTAG( DESCRIPTION,  ( "Des", tag, TaggedFile::MULTI) );
-        DEFTAG( INSNOTIFY,  ( "Ins", tag,   TaggedFile::MULTI) );
-        DEFTAG( DELNOTIFY,  ( "Del", tag,   TaggedFile::MULTI) );
-        DEFTAG( LICENSETOCONFIRM,( "Eul", tag,   TaggedFile::MULTI) );
-        // for the 'packages.DU' file
-        DEFTAG( DU,   ( "Dir", DU,  TaggedFile::MULTI) );
-
-        // No default: let compiler warn missing enumeration values
-        case NUM_TAGS: break;
-#undef DEFTAG
-      }
-    }
-  }
-
-  void PackagesParser::start( const Pathname &path )
+class ContentInfo
+{
+public:
+  ContentInfo( const Pathname &file )
   {
-    std::ifstream content_stream((path + "/content").asString().c_str());
     std::string buffer;
-    Pathname descr_dir;
-  
+    std::ifstream content_stream(file.asString().c_str());
     // Note this code assumes DESCR comes before as META
     while ( content_stream && !content_stream.eof())
     {
@@ -114,64 +61,233 @@ struct PackageDataProvider
           // error
           ZYPP_THROW(Exception("bad DESCR line")); 
         }
-        descr_dir = words[1];
+        _descr_dir = words[1];
       }
     }
+  }
+  
+  Pathname descrDir() const
+  { return _descr_dir; }
+  
+private:
+  Pathname _descr_dir;
+};
 
-    list<Locale> locales;
-    ZYpp::Ptr z = getZYpp();
-    Locale curr_locale( z->getTextLocale() );
+PackagesParser::PackagesParser( const data::RecordId &catalog_id, zypp::cache::CacheStore consumer )
+    : _consumer(consumer), _catalog_id(catalog_id)
+{
+  ZYpp::Ptr z = getZYpp();
+  _system_arch = z->architecture();
+    
+  // initialize tagset
+  _tagset.setAllowMultipleSets (true);  // multiple tagsets per file
+  _tagset.setAllowUnknownTags (true);   // skip unknown tags
 
-    while ( curr_locale != Locale() )
+  // Using loop and switch to get a compiler warning, if tags are
+  // defined but uninitialized, or vice versa.
+  for ( Tags tag = Tags(0); tag < NUM_TAGS; tag = Tags(tag+1) )
+  {
+    switch ( tag )
     {
-      locales.push_back(curr_locale);
-      curr_locale = curr_locale.fallback();
+#define DEFTAG(T,ARGS) case T: _tagset.addTag ARGS; break
+      // for the 'packages' file
+      DEFTAG( PACKAGE,  ( "Pkg", tag, TaggedFile::SINGLE, TaggedFile::START) );
+      DEFTAG( REQUIRES, ( "Req", tag, TaggedFile::MULTI) );
+      DEFTAG( PREREQUIRES,  ( "Prq", tag, TaggedFile::MULTI) );
+      DEFTAG( PROVIDES, ( "Prv", tag, TaggedFile::MULTI) );
+      DEFTAG( CONFLICTS,  ( "Con", tag, TaggedFile::MULTI) );
+      DEFTAG( OBSOLETES,  ( "Obs", tag, TaggedFile::MULTI) );
+      DEFTAG( RECOMMENDS, ( "Rec", tag, TaggedFile::MULTI) );
+      DEFTAG( SUGGESTS, ( "Sug", tag, TaggedFile::MULTI) );
+    
+      DEFTAG( LOCATION, ( "Loc", tag, TaggedFile::SINGLE) );
+      DEFTAG( SIZE,   ( "Siz", tag, TaggedFile::SINGLE) );
+      DEFTAG( BUILDTIME,  ( "Tim", tag, TaggedFile::SINGLE) );
+      DEFTAG( SOURCERPM,  ( "Src", tag, TaggedFile::SINGLEPOS) );
+      DEFTAG( GROUP,    ( "Grp", tag, TaggedFile::SINGLE) );
+      DEFTAG( LICENSE,  ( "Lic", tag, TaggedFile::SINGLEPOS) );
+      DEFTAG( AUTHORS,  ( "Aut", tag, TaggedFile::MULTI) );
+      DEFTAG( SHAREWITH,  ( "Shr", tag, TaggedFile::SINGLE) );
+      DEFTAG( KEYWORDS, ( "Key", tag, TaggedFile::MULTI) );
+      
+      // for the 'packages.<locale>' file
+      DEFTAG( SUMMARY,  ( "Sum", tag, TaggedFile::SINGLE) );
+      DEFTAG( DESCRIPTION,  ( "Des", tag, TaggedFile::MULTI) );
+      DEFTAG( INSNOTIFY,  ( "Ins", tag,   TaggedFile::MULTI) );
+      DEFTAG( DELNOTIFY,  ( "Del", tag,   TaggedFile::MULTI) );
+      DEFTAG( LICENSETOCONFIRM,( "Eul", tag,   TaggedFile::MULTI) );
+      // for the 'packages.DU' file
+      DEFTAG( DU,   ( "Dir", DU,  TaggedFile::MULTI) );
+
+      // No default: let compiler warn missing enumeration values
+      case NUM_TAGS: break;
+#undef DEFTAG
+    }
+  }
+}
+
+void PackagesParser::start( const Pathname &path, Progress progress_fnc )
+{
+  Pathname descr_dir;
+
+  // 647374 lines
+  // 16288929 size
+  // ~25 bytes per line in average
+  
+  progress_fnc(0);
+  
+  ContentInfo content(path + "/content");
+  descr_dir = content.descrDir();
+  
+  list<Locale> locales;
+  ZYpp::Ptr z = getZYpp();
+  Locale curr_locale( z->getTextLocale() );
+
+  while ( curr_locale != Locale() )
+  {
+    locales.push_back(curr_locale);
+    curr_locale = curr_locale.fallback();
+  }
+  MIL << "I have " << locales.size() << " locales" << endl;
+  
+  MIL << "Welcome to new parsing" << endl;
+  Pathname packages_path = (path + descr_dir + "/packages");
+  
+  // packages file size, to estimate progress
+  off_t s = PathInfo(packages_path).size();
+  int estimated_lines = s/25;
+  
+  std::ifstream pkgstream ( packages_path.asString().c_str() );
+
+  if (!pkgstream.is_open())
+  {
+    ERR << "Cant open " << packages_path << endl;
+    ZYPP_THROW( ParseException( "cant open packages file" ) );
+  }
+
+  // find initial version tag
+  // find any initial tag
+  TaggedParser::TagType type = _parser.lookupTag (pkgstream);
+  if ((type != TaggedParser::SINGLE) || (_parser.currentTag() != "Ver") || (!_parser.currentLocale().empty()))
+  {
+    ERR << path << ": Initial '=Ver:' tag missing" << endl;
+    ZYPP_THROW( ParseException( "bad packages file" ) );
+  }
+
+  string version = _parser.data();
+  if (version != "2.0")
+  {
+    ERR << path << ": Version '" << version << "' != 2.0" << endl;
+    ZYPP_THROW( ParseException( "bad packages file" ) );
+  }
+  
+  //---------------------------------------------------------------
+  // assign set repeatedly
+
+  // create a single cache for all packages
+  TagCacheRetrieval_Ptr pkgcache (new TagCacheRetrieval (packages_path));
+  
+  //TagCacheRetrievalPtr ducache (new TagCacheRetrieval (dupath));
+
+  pkgcache->startRetrieval();
+  //ducache->startRetrieval();
+
+  //PMError ret = PMError::E_ok;
+  int progress = 0;
+  for (;;)
+  {
+    int new_progress = (int)( (float)_parser.lineNumber()/estimated_lines)*100;
+    if ( (new_progress < progress) || ( (new_progress - progress) < 5 ) )
+    {
+      // do nothing
+    }
+    else
+    {
+      progress = new_progress;
+      progress_fnc(progress);
+    }
+     
+    TaggedFile::assignstatus status = _tagset.assignSet (_parser, pkgstream);
+
+    if (status == TaggedFile::REJECTED_EOF)
+      break;
+
+    if (status == TaggedFile::ACCEPTED_FULL)
+    {
+      try
+      {
+        fromCache (pkgcache);
+      }
+      catch ( const Exception &e )
+      {
+        ERR << path << ":" << _parser.lineNumber() << endl;
+        ZYPP_RETHROW(e);
+      }
+    }
+    else
+    {
+      ERR << path << ":" << _parser.lineNumber() << endl;
+      ERR << "Status " << (int)status << ", Last tag read: " << _parser.currentTag();
+      if (!_parser.currentLocale().empty()) ERR << "." << _parser.currentLocale();
+      ERR << endl;
+      //ret = InstSrcError::E_data_bad_packages;
+      ZYPP_THROW( ParseException( "bad packages file" ) );
+      break;
+    }
+  }
+
+  pkgcache->stopRetrieval();
+  
+  //ducache->stopRetrieval();
+
+  // now parse locales files
+  for ( list<Locale>::const_iterator it = locales.begin(); it != locales.end(); ++it )
+  {
+    Locale locale = *it;
+    Pathname locale_path = ( (path + descr_dir + "/packages.").asString() + locale.code() );
+
+    if ( ! PathInfo(locale_path).isExist() )
+    {
+      ERR << locale_path << " doesn't exists." << endl;
+        continue;
     }
-    MIL << "I have " << locales.size() << " locales" << endl;
     
-    MIL << "Welcome to new parsing" << endl;
-    Pathname packages_path = (path + descr_dir + "/packages");
+    MIL << "Parsing " << locale_path << endl;
+    TagCacheRetrieval_Ptr localecache (new TagCacheRetrieval (locale_path));
+    localecache->startRetrieval();
     
-    std::ifstream pkgstream ( packages_path.asString().c_str() );
+    std::ifstream localestream (path.asString().c_str());
 
-    if (!pkgstream.is_open())
+    if (!localestream.is_open())
     {
-      ERR << "Cant open " << packages_path << endl;
-      ZYPP_THROW( ParseException( "cant open packages file" ) );
+      ERR << "Cant open " << path.asString() << endl;
+      ZYPP_THROW( ParseException( "can't open translation" + locale_path.asString() ) );
     }
 
+    //---------------------------------------------------------------
     // find initial version tag
+
     // find any initial tag
-    TaggedParser::TagType type = _parser.lookupTag (pkgstream);
+    TaggedParser::TagType type = _parser.lookupTag (localestream);
     if ((type != TaggedParser::SINGLE) || (_parser.currentTag() != "Ver") || (!_parser.currentLocale().empty()))
     {
       ERR << path << ": Initial '=Ver:' tag missing" << endl;
-      ZYPP_THROW( ParseException( "bad packages file" ) );
+      continue;
+      //return InstSrcError::E_data_bad_packages_lang;
     }
 
     string version = _parser.data();
     if (version != "2.0")
     {
       ERR << path << ": Version '" << version << "' != 2.0" << endl;
-      ZYPP_THROW( ParseException( "bad packages file" ) );
+      ZYPP_THROW( ParseException( "wrong packages.en version" ) );
     }
-    
+
     //---------------------------------------------------------------
     // assign set repeatedly
-
-    // create a single cache for all packages
-    TagCacheRetrieval_Ptr pkgcache (new TagCacheRetrieval (packages_path));
-    
-    //TagCacheRetrievalPtr ducache (new TagCacheRetrieval (dupath));
-
-    pkgcache->startRetrieval();
-    //ducache->startRetrieval();
-
-    //PMError ret = PMError::E_ok;
     for (;;)
     {
-      TaggedFile::assignstatus status = _tagset.assignSet (_parser, pkgstream);
-
+      TaggedFile::assignstatus status = _tagset.assignSet (_parser, localestream);
       if (status == TaggedFile::REJECTED_EOF)
         break;
 
@@ -179,7 +295,7 @@ struct PackageDataProvider
       {
         try
         {
-          fromCache (pkgcache);
+          fromLocale ();
         }
         catch ( const Exception &e )
         {
@@ -191,234 +307,156 @@ struct PackageDataProvider
       {
         ERR << path << ":" << _parser.lineNumber() << endl;
         ERR << "Status " << (int)status << ", Last tag read: " << _parser.currentTag();
-        if (!_parser.currentLocale().empty()) ERR << "." << _parser.currentLocale();
         ERR << endl;
-        //ret = InstSrcError::E_data_bad_packages;
         ZYPP_THROW( ParseException( "bad packages file" ) );
-        break;
       }
-    }
-
-    pkgcache->stopRetrieval();
+    } //loop
     
-    //ducache->stopRetrieval();
-
-    // now parse locales files
-    for ( list<Locale>::const_iterator it = locales.begin(); it != locales.end(); ++it )
-    {
-      Locale locale = *it;
-      Pathname locale_path = ( (path + descr_dir + "/packages.").asString() + locale.code() );
+    localecache->stopRetrieval();
+    
+  } // locales iterator
+  
+  progress_fnc(100);
+}
 
-      if ( ! PathInfo(locale_path).isExist() )
-      {
-        ERR << locale_path << " doesn't exists." << endl;
-        continue;
-      }
-      
-      MIL << "Parsing " << locale_path << endl;
-      TagCacheRetrieval_Ptr localecache (new TagCacheRetrieval (locale_path));
-      localecache->startRetrieval();
-      
-      std::ifstream localestream (path.asString().c_str());
+void PackagesParser::fromCache ( TagCacheRetrieval_Ptr pkgcache)
+{
+  //---------------------------------------------------------------
+  // PACKAGE
+  string single ((_tagset.getTagByIndex (PACKAGE))->Data());
+  if (single.empty ())
+  {
+    ERR << "No '=Pkg' value found" << endl;
+    ZYPP_THROW( ParseException( "No '=Pkg' value found" ) );
+    //return InstSrcError::E_data_bad_packages;
+  }
   
-      if (!localestream.is_open())
-      {
-        ERR << "Cant open " << path.asString() << endl;
-        ZYPP_THROW( ParseException( "can't open translation" + locale_path.asString() ) );
-      }
+  /*
+  pkgmaptype::iterator pkgpos = _pkgmap.find (single);
+  if (pkgpos != _pkgmap.end())
+  {
+    ERR << "Duplicate '=Pkg' value '" << single << "'" << endl;
+    return InstSrcError::E_data_bad_packages;
+  }
+  */
   
-      //---------------------------------------------------------------
-      // find initial version tag
+  std::vector<std::string> splitted;
+  str::split (single, std::back_inserter(splitted) );
+  if (  splitted.size() != 4 )
+  {
+    ERR << "Invalid '=Pkg: N V R A' value '" << single << "'" << endl;
+    //return InstSrcError::E_data_bad_packages;
+    ZYPP_THROW( ParseException( "Invalid '=Pkg: N V R A' value" ) );
+  }
+  std::string arch = splitted[3];
+
+  // warning: according to autobuild, this is the wrong check
+  //  a 'src/norsrc' packages is determined by _not_ having a "=Src:" tag in packages
+  // However, the 'arch' string we're checking here must be remembered since
+  // it determines the directory below the <DATADIR> where the real package
+  // can be found.
+  if (arch == "src" || arch == "nosrc")
+  {
+    arch = "noarch";
+    //_srcPkgImpl = SrcPkgImplPtr( new source::susetags::SuseTagsSrcPackageImpl( _source ) );
+  }
   
-      // find any initial tag
-      TaggedParser::TagType type = _parser.lookupTag (localestream);
-      if ((type != TaggedParser::SINGLE) || (_parser.currentTag() != "Ver") || (!_parser.currentLocale().empty()))
-      {
-        ERR << path << ": Initial '=Ver:' tag missing" << endl;
-        continue;
-        //return InstSrcError::E_data_bad_packages_lang;
-      }
+  NVRA nvra( splitted[0], Edition( splitted[1], splitted[2] ), Arch(arch) );
   
-      string version = _parser.data();
-      if (version != "2.0")
-      {
-        ERR << path << ": Version '" << version << "' != 2.0" << endl;
-        ZYPP_THROW( ParseException( "wrong packages.en version" ) );
-      }
+  // DEPENDENCIES
+  #define GET_TAG(tagname) \
+  _tagset.getTagByIndex (tagname)
   
-      //---------------------------------------------------------------
-      // assign set repeatedly
-      for (;;)
-      {
-        TaggedFile::assignstatus status = _tagset.assignSet (_parser, localestream);
-        if (status == TaggedFile::REJECTED_EOF)
-          break;
+  data::Dependencies deps;
+  
+  std::list<std::string> pkglist;
   
-        if (status == TaggedFile::ACCEPTED_FULL)
-        {
-          try
-          {
-            fromLocale ();
-          }
-          catch ( const Exception &e )
-          {
-            ERR << path << ":" << _parser.lineNumber() << endl;
-            ZYPP_RETHROW(e);
-          }
-        }
-        else
-        {
-          ERR << path << ":" << _parser.lineNumber() << endl;
-          ERR << "Status " << (int)status << ", Last tag read: " << _parser.currentTag();
-          ERR << endl;
-          ZYPP_THROW( ParseException( "bad packages file" ) );
-        }
-      } //loop
-      
-      localecache->stopRetrieval();
-      
-    } // locales iterator
-  }
-
-  void PackagesParser::fromCache ( TagCacheRetrieval_Ptr pkgcache)
-  {
-    //---------------------------------------------------------------
-    // PACKAGE
-    string single ((_tagset.getTagByIndex (PACKAGE))->Data());
-    if (single.empty ())
-    {
-      ERR << "No '=Pkg' value found" << endl;
-      ZYPP_THROW( ParseException( "No '=Pkg' value found" ) );
-      //return InstSrcError::E_data_bad_packages;
-    }
-    
-    /*
-    pkgmaptype::iterator pkgpos = _pkgmap.find (single);
-    if (pkgpos != _pkgmap.end())
-    {
-      ERR << "Duplicate '=Pkg' value '" << single << "'" << endl;
-      return InstSrcError::E_data_bad_packages;
-    }
-    */
-    
-    std::vector<std::string> splitted;
-    str::split (single, std::back_inserter(splitted) );
-    if (  splitted.size() != 4 )
-    {
-      ERR << "Invalid '=Pkg: N V R A' value '" << single << "'" << endl;
-      //return InstSrcError::E_data_bad_packages;
-      ZYPP_THROW( ParseException( "Invalid '=Pkg: N V R A' value" ) );
-    }
-    std::string arch = splitted[3];
-
-    // warning: according to autobuild, this is the wrong check
-    //  a 'src/norsrc' packages is determined by _not_ having a "=Src:" tag in packages
-    // However, the 'arch' string we're checking here must be remembered since
-    // it determines the directory below the <DATADIR> where the real package
-    // can be found.
-    if (arch == "src" || arch == "nosrc")
-    {
-      arch = "noarch";
-      //_srcPkgImpl = SrcPkgImplPtr( new source::susetags::SuseTagsSrcPackageImpl( _source ) );
-    }
-    
-    NVRA nvra( splitted[0], Edition( splitted[1], splitted[2] ), Arch(arch) );
-    
-    // DEPENDENCIES
-    #define GET_TAG(tagname) \
-    _tagset.getTagByIndex (tagname)
-    
-    data::Dependencies deps;
-    
-    std::list<std::string> pkglist;
-    
 #define COLLECT_DEPS(dtype) \
     if (pkgcache->retrieveData (GET_TAG(dtype)->Pos(), pkglist)) \
       collectDeps( zypp::Dep::dtype, pkglist, deps); \
     pkglist.clear();
     
-    COLLECT_DEPS(REQUIRES);
-    COLLECT_DEPS(PROVIDES);
-    COLLECT_DEPS(PREREQUIRES);
-    //COLLECT_DEPS(ENHANCES);
-    COLLECT_DEPS(CONFLICTS);
-    //COLLECT_DEPS(FRESHENS);
-    //COLLECT_DEPS(SUPPLEMENTS);
-    COLLECT_DEPS(RECOMMENDS);
-
-    data::RecordId pkgid = _consumer.appendResolvable( _catalog_id, ResTraits<Package>::kind, nvra, deps );
-    _idmap[single] = pkgid;
-  }
-
-  void PackagesParser::collectDeps( zypp::Dep deptype, const std::list<std::string> &depstrlist, data::Dependencies &deps )
+  COLLECT_DEPS(REQUIRES);
+  COLLECT_DEPS(PROVIDES);
+  COLLECT_DEPS(PREREQUIRES);
+  //COLLECT_DEPS(ENHANCES);
+  COLLECT_DEPS(CONFLICTS);
+  //COLLECT_DEPS(FRESHENS);
+  //COLLECT_DEPS(SUPPLEMENTS);
+  COLLECT_DEPS(RECOMMENDS);
+
+  data::RecordId pkgid = _consumer.appendResolvable( _catalog_id, ResTraits<Package>::kind, nvra, deps );
+  _idmap[single] = pkgid;
+}
+
+void PackagesParser::collectDeps( zypp::Dep deptype, const std::list<std::string> &depstrlist, data::Dependencies &deps )
+{
+  for ( list<string>::const_iterator it = depstrlist.begin(); it != depstrlist.end(); ++it )
   {
-    for ( list<string>::const_iterator it = depstrlist.begin(); it != depstrlist.end(); ++it )
-    {
-      capability::CapabilityImpl::Ptr cap = zypp::capability::parse( ResTraits<Package>::kind, *it);
-      if (cap)
-        deps[deptype].push_back(cap);
-      else
-        ZYPP_THROW(ParseException("Invalid capability: [" + *it + "]"));
-    }
+    capability::CapabilityImpl::Ptr cap = zypp::capability::parse( ResTraits<Package>::kind, *it);
+    if (cap)
+      deps[deptype].push_back(cap);
+    else
+      ZYPP_THROW(ParseException("Invalid capability: [" + *it + "]"));
   }
+}
+
+void PackagesParser::fromPathLocale (const Pathname& path)
+{
   
-  void PackagesParser::fromPathLocale (const Pathname& path)
+}
+
+void PackagesParser::fromLocale ()
+{
+  //---------------------------------------------------------------
+  // PACKAGE.<locale>
+
+  string single ((_tagset.getTagByIndex (PACKAGE))->Data());
+  if (single.empty ())
   {
-    
+    ERR << "No '=Pkg' value found" << endl;
+    ZYPP_THROW( ParseException( "bad packages file" ) );
   }
 
-  void PackagesParser::fromLocale ()
+  //---------------------------------------------------------------
+  // find corresponding package
+  pkgmaptype::iterator pkgpos = _pkgmap.find (single);
+  if (pkgpos == _pkgmap.end())
   {
-    //---------------------------------------------------------------
-    // PACKAGE.<locale>
-
-    string single ((_tagset.getTagByIndex (PACKAGE))->Data());
-    if (single.empty ())
-    {
-      ERR << "No '=Pkg' value found" << endl;
-      ZYPP_THROW( ParseException( "bad packages file" ) );
-    }
-
-    //---------------------------------------------------------------
-    // find corresponding package
-    pkgmaptype::iterator pkgpos = _pkgmap.find (single);
-    if (pkgpos == _pkgmap.end())
-    {
-      return;
-    }
-    PackageDataProviderPtr dataprovider = pkgpos->second;
-    TaggedFile::Tag *tagptr;    // for SET_MULTI()
+    return;
+  }
+  PackageDataProviderPtr dataprovider = pkgpos->second;
+  TaggedFile::Tag *tagptr;    // for SET_MULTI()
 #define GET_TAG(tagname) \
     _tagset.getTagByIndex (tagname)
 #define SET_CACHE(tagname) \
     do { tagptr = GET_TAG (tagname); dataprovider->_attr_##tagname = tagptr->Pos(); } while (0)
-    
-    SET_CACHE (SUMMARY);
-    SET_CACHE (DESCRIPTION);
-    SET_CACHE (INSNOTIFY);
-    SET_CACHE (DELNOTIFY);
-    SET_CACHE (LICENSETOCONFIRM);
-    
+  
+  SET_CACHE (SUMMARY);
+  SET_CACHE (DESCRIPTION);
+  SET_CACHE (INSNOTIFY);
+  SET_CACHE (DELNOTIFY);
+  SET_CACHE (LICENSETOCONFIRM);
+  
 
-    //std::list<std::string> description;
-    //if (localecache->retrieveData (GET_TAG(DESCRIPTION)->Pos(), description))
-    //{
-    //  cout << description.front() << endl;
-      //collectDeps( pkglist, _nvrad[Dep::REQUIRES] );
-    //}
-    
-    /*
-    if ( ! dataprovider->_attr_LICENSETOCONFIRM.empty() )
-    {
-      MIL << "Package " << pkgpos->first << " has a license to confirm" << endl;
-      PMPackagePtr package = pkgpos->second.first;
-      package -> markLicenseUnconfirmed ();
+  //std::list<std::string> description;
+  //if (localecache->retrieveData (GET_TAG(DESCRIPTION)->Pos(), description))
+  //{
+  //  cout << description.front() << endl;
+    //collectDeps( pkglist, _nvrad[Dep::REQUIRES] );
+  //}
+  
+  /*
+  if ( ! dataprovider->_attr_LICENSETOCONFIRM.empty() )
+  {
+    MIL << "Package " << pkgpos->first << " has a license to confirm" << endl;
+    PMPackagePtr package = pkgpos->second.first;
+    package -> markLicenseUnconfirmed ();
 
-    }
-    */
+  }
+  */
 #undef GET_TAG
 #undef SET_CACHE
-  }
-
+}
 
 } // ns zypp
index 8a71b79..cde57fd 100644 (file)
@@ -5,7 +5,7 @@
 // #include <string>
 // #include <fstream>
 #include "zypp/base/PtrTypes.h"
-// #include "zypp/base/Measure.h"
+#include "zypp/base/Function.h"
 // #include "zypp/Arch.h"
 // #include "zypp/ZYppFactory.h"
 // #include "zypp/ZYpp.h"
@@ -25,6 +25,8 @@ namespace zypp
   
   struct PackagesParser
   {
+    typedef function<bool( int )> Progress;
+    
     // tag ids for the TaggedParser
     enum Tags {
       PACKAGE,  // name version release arch
@@ -57,7 +59,7 @@ namespace zypp
     };
   
     PackagesParser( const data::RecordId &catalog_id, zypp::cache::CacheStore consumer );
-    void start( const zypp::Pathname &path );
+    void start( const zypp::Pathname &path, Progress progress_fnc );
     void fromCache ( TagCacheRetrieval_Ptr pkgcache);
     void collectDeps( zypp::Dep deptype, const std::list<std::string> &depstrlist, data::Dependencies &deps );
     void fromPathLocale (const zypp::Pathname& path);
index cd853eb..fdbcaa6 100644 (file)
@@ -11,6 +11,11 @@ using namespace std;
 using namespace zypp;
 using namespace zypp::debug;
 
+bool progress_function( int p )
+{
+  MIL << p << "%" << endl;
+}
+
 int main(int argc, char **argv)
 {
     try
@@ -21,7 +26,7 @@ int main(int argc, char **argv)
       data::RecordId catalog_id = store.lookupOrAppendCatalog( Url("http://www.google.com"), "/");
       PackagesParser parser( catalog_id, store);
       Measure m;
-      parser.start(argv[1]);
+      parser.start(argv[1], &progress_function);
       m.elapsed();
     }
     catch ( const Exception &e )
index 22ce55f..620536a 100644 (file)
@@ -2,8 +2,8 @@ ENABLE_TESTING()
 INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
 ADD_DEFINITIONS( -DTESTS_SRC_DIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\" )
 
-#ADD_SUBDIRECTORY( cache )
+ADD_SUBDIRECTORY( cache )
 #ADD_SUBDIRECTORY( media )
 ADD_SUBDIRECTORY( zypp )
 ADD_SUBDIRECTORY( parser )
-ADD_SUBDIRECTORY( source )
\ No newline at end of file
+ADD_SUBDIRECTORY( source )
diff --git a/tests/README b/tests/README
new file mode 100644 (file)
index 0000000..3d26e17
--- /dev/null
@@ -0,0 +1,3 @@
+
+You can find here unit tests for lot of zypp classes.
+
index 1061001..1aad09a 100644 (file)
@@ -1,10 +1,15 @@
 INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
 
-SET(CacheInitializer_SRCS
-CacheInitializer.cc
-)
-
-ADD_EXECUTABLE(CacheInitializer ${CacheInitializer_SRCS})
+ADD_EXECUTABLE(CacheInitializer CacheInitializer_test.cc)
 TARGET_LINK_LIBRARIES(CacheInitializer boost_unit_test_framework )
 TARGET_LINK_LIBRARIES(CacheInitializer zypp2 )
 TARGET_LINK_LIBRARIES(CacheInitializer zypp )
+
+ADD_EXECUTABLE(CacheStore CacheStore_test.cc)
+TARGET_LINK_LIBRARIES(CacheStore boost_unit_test_framework )
+TARGET_LINK_LIBRARIES(CacheStore zypp2 )
+TARGET_LINK_LIBRARIES(CacheStore zypp )
+
+ADD_TEST(CacheInitializer ${CMAKE_CURRENT_BINARY_DIR}/CacheInitializer ${CMAKE_CURRENT_SOURCE_DIR}/data )
+ADD_TEST(CacheStore ${CMAKE_CURRENT_BINARY_DIR}/CacheStore ${CMAKE_CURRENT_SOURCE_DIR}/data )
+
diff --git a/tests/cache/CacheStore_test.cc b/tests/cache/CacheStore_test.cc
new file mode 100644 (file)
index 0000000..b42ddc7
--- /dev/null
@@ -0,0 +1,150 @@
+#include <stdio.h>
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include <list>
+#include <boost/test/unit_test.hpp>
+#include <boost/test/parameterized_test.hpp>
+#include <boost/test/unit_test_log.hpp>
+
+#include "zypp/base/Random.h"
+#include "zypp/base/Logger.h"
+#include "zypp/base/GzStream.h"
+#include "zypp/base/Measure.h"
+#include "zypp/capability/CapabilityImpl.h"
+#include "zypp/data/ResolvableData.h"
+#include "zypp2/cache/CacheStore.h"
+#include "zypp/Url.h"
+#include "zypp/NVRA.h"
+#include "zypp/PathInfo.h"
+#include "zypp/TmpPath.h"
+
+using namespace std;
+using namespace zypp;
+using namespace boost::unit_test;
+
+void read_dash( zypp::ifgzstream &ifs, const std::string &s, int &line )
+{
+  string buffer;
+  // get the "-"
+  getline(ifs, buffer);
+  line++;
+  if ( buffer != s )
+  {
+    ERR << "line : " << line << endl;
+    ZYPP_THROW(Exception("missing " + s ));
+  }
+}
+
+void read_deps( zypp::ifgzstream &ifs, data::DependencyList &list, int &line, const string &endchar )
+{
+  string buffer;
+  while ( ifs && !ifs.eof())
+  {
+    getline(ifs, buffer);
+    line++;
+    if ( buffer == endchar )
+      break;
+    try
+    {
+      capability::CapabilityImpl::Ptr cap = zypp::capability::parse( ResTraits<Package>::kind, buffer);
+      if (cap)
+        list.push_back(cap);
+    }
+    catch( const Exception  &e )
+    {
+      ERR << "line : " << line << endl;
+      ZYPP_THROW(Exception("bad capability line")); 
+    }    
+  }
+}
+
+struct MiniResolvable
+{
+  NVRA nvra;
+  data::Dependencies deps;
+};
+
+void cache_write_test(const string &dir)
+{
+  list<MiniResolvable> res_list;
+  std::string buffer;
+  Pathname nvra_list = Pathname(dir) + "package-set.txt.gz";
+  
+  int line = 0;
+  zypp::ifgzstream nvra_stream(nvra_list.c_str());
+  MIL << "reading " << nvra_list << endl;
+  
+  if ( ! nvra_stream )
+    ZYPP_THROW(Exception("cant open data file " + nvra_list.asString()));
+  
+  while ( nvra_stream && !nvra_stream.eof())
+  {
+    MiniResolvable res;
+    getline(nvra_stream, buffer);
+    line++;
+    
+    if ( buffer.empty() )
+      break;
+    
+    std::vector<std::string> words;
+    if ( str::split( buffer, std::back_inserter(words) ) != 4 )
+    {
+      ERR << nvra_list << " : line : " << line << endl;
+      ZYPP_THROW(Exception("bad NVRA line"));
+    }
+    
+    res.nvra = NVRA(words[0], Edition(words[1], words[2]), Arch(words[3]));
+    // requires
+    read_dash( nvra_stream, "+r", line);
+    read_deps( nvra_stream, res.deps[Dep::REQUIRES], line, "-r");
+    read_dash( nvra_stream, "+p", line);
+    read_deps( nvra_stream, res.deps[Dep::PROVIDES], line, "-p");
+    
+    res_list.push_back(res);
+  }
+  //MIL << deps.size() << " capabilities read." << endl;
+  
+  filesystem::TmpDir tmpdir;
+  cache::CacheStore store(tmpdir.path());
+  
+  data::RecordId catalog_id = store.lookupOrAppendCatalog( Url("http://novell.com"), "/");
+  
+  zypp::debug::Measure cap_parse_timer("store resolvables");
+  for ( list<MiniResolvable>::iterator it = res_list.begin(); it != res_list.end(); it++)
+  {
+    data::RecordId id = store.appendResolvable( catalog_id,
+                                       ResTraits<Package>::kind,
+                                       (*it).nvra,
+                                       (*it).deps );
+  }
+}
+
+test_suite*
+init_unit_test_suite( int argc, char *argv[] )
+{
+  string datadir;
+  if (argc < 2)
+  {
+    datadir = TESTS_SRC_DIR;
+    datadir = (Pathname(datadir) + "/cache/data").asString();
+    cout << "CacheStore_test:"
+      " path to directory with test data required as parameter. Using " << datadir  << endl;
+    //return (test_suite *)0;
+    
+  }
+  else
+  {
+    datadir = argv[1];
+  }
+  
+  test_suite* test= BOOST_TEST_SUITE("CacheStore");
+  
+  std::string const params[] = { datadir };
+  test->add(BOOST_PARAM_TEST_CASE(&cache_write_test,
+                                 (std::string const*)params, params+1));
+  return test;
+}
+
+
+// vim: set ts=2 sts=2 sw=2 ai et:
diff --git a/tests/cache/TIMING.txt b/tests/cache/TIMING.txt
new file mode 100644 (file)
index 0000000..9873492
--- /dev/null
@@ -0,0 +1,4 @@
+
+CacheStore_test
+(u 28.54 s 0.29 c 0.00)
+
diff --git a/tests/cache/data/package-set.txt.gz b/tests/cache/data/package-set.txt.gz
new file mode 100644 (file)
index 0000000..95c8a2a
Binary files /dev/null and b/tests/cache/data/package-set.txt.gz differ
diff --git a/tests/cache/dump-nvra.rb b/tests/cache/dump-nvra.rb
new file mode 100644 (file)
index 0000000..bd03523
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/ruby
+
+mode = :normal
+File.new(ARGV[0]).each_line do |l |
+  tag = l[0,5]
+  if ( tag == "+Prv:")
+    mode = :dep
+    puts "+p"
+    next
+  end
+  if ( tag == "+Req:" )
+    mode = :dep
+    puts "+r"
+    next
+  end
+  if ( tag == "-Req:" )
+    mode = :normal
+    puts "-r"
+    next
+  end
+  if ( tag == "-Prv:")
+    mode = :normal
+    puts "-p"
+    next
+  end
+
+  if mode == :normal
+    if ( l[0,6] == "=Pkg: " )
+      puts l[6, l.size]
+    end
+  end
+  
+  if mode == :dep
+    puts l
+  end
+  
+  
+end
\ No newline at end of file
diff --git a/tests/cache/ram-cachestore-1.ps b/tests/cache/ram-cachestore-1.ps
new file mode 100644 (file)
index 0000000..07cee0b
--- /dev/null
@@ -0,0 +1,5545 @@
+%!PS-Adobe-2.0
+%%Title: ./CacheStore
+%%Creator: hp2ps (version 0.25)
+%%CreationDate: 
+%%EndComments
+-90 rotate
+-756.000000 72.000000 translate
+/HE10 /Helvetica findfont 10 scalefont def
+/HE12 /Helvetica findfont 12 scalefont def
+newpath
+0 0 moveto
+0 432.000000 rlineto
+648.000000 0 rlineto
+0 -432.000000 rlineto
+closepath
+0.500000 setlinewidth
+stroke
+newpath
+5.000000 407.000000 moveto
+0 20.000000 rlineto
+638.000000 0 rlineto
+0 -20.000000 rlineto
+closepath
+0.500000 setlinewidth
+stroke
+HE12 setfont
+11.000000 413.000000 moveto
+(./CacheStore) show
+HE12 setfont
+(20,513,541,368,665 bytes x ms)
+dup stringwidth pop
+2 div
+319.000000
+exch sub
+413.000000 moveto
+show
+HE12 setfont
+()
+dup stringwidth pop
+637.000000
+exch sub
+413.000000 moveto
+show
+45.000000 20.000000 moveto
+433.039355 0 rlineto
+0.500000 setlinewidth
+stroke
+HE10 setfont
+(ms)
+dup stringwidth pop
+478.039355
+exch sub
+5.000000 moveto
+show
+45.000000 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(0.0)
+dup stringwidth pop
+2 div
+45.000000 exch sub
+5.000000 moveto
+show
+77.770362 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(50000.0)
+dup stringwidth pop
+2 div
+77.770362 exch sub
+5.000000 moveto
+show
+110.540723 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(100000.0)
+dup stringwidth pop
+2 div
+110.540723 exch sub
+5.000000 moveto
+show
+143.311085 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(150000.0)
+dup stringwidth pop
+2 div
+143.311085 exch sub
+5.000000 moveto
+show
+176.081446 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(200000.0)
+dup stringwidth pop
+2 div
+176.081446 exch sub
+5.000000 moveto
+show
+208.851808 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(250000.0)
+dup stringwidth pop
+2 div
+208.851808 exch sub
+5.000000 moveto
+show
+241.622169 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(300000.0)
+dup stringwidth pop
+2 div
+241.622169 exch sub
+5.000000 moveto
+show
+274.392531 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(350000.0)
+dup stringwidth pop
+2 div
+274.392531 exch sub
+5.000000 moveto
+show
+307.162892 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(400000.0)
+dup stringwidth pop
+2 div
+307.162892 exch sub
+5.000000 moveto
+show
+339.933254 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(450000.0)
+dup stringwidth pop
+2 div
+339.933254 exch sub
+5.000000 moveto
+show
+372.703615 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(500000.0)
+dup stringwidth pop
+2 div
+372.703615 exch sub
+5.000000 moveto
+show
+405.473977 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(550000.0)
+dup stringwidth pop
+2 div
+405.473977 exch sub
+5.000000 moveto
+show
+438.244339 20.000000 moveto
+0 -4 rlineto
+stroke
+HE10 setfont
+(600000.0)
+dup stringwidth pop
+2 div
+438.244339 exch sub
+5.000000 moveto
+show
+45.000000 20.000000 moveto
+0 382.000000 rlineto
+0.500000 setlinewidth
+stroke
+gsave
+HE10 setfont
+(bytes)
+dup stringwidth pop
+402.000000
+exch sub
+40.000000 exch
+translate
+90 rotate
+0 0 moveto
+show
+grestore
+45.000000 20.000000 moveto
+-4 0 rlineto
+stroke
+HE10 setfont
+(0M)
+dup stringwidth
+2 div
+20.000000 exch sub
+exch
+40.000000 exch sub
+exch
+moveto
+show
+45.000000 70.212530 moveto
+-4 0 rlineto
+stroke
+HE10 setfont
+(5M)
+dup stringwidth
+2 div
+70.212530 exch sub
+exch
+40.000000 exch sub
+exch
+moveto
+show
+45.000000 120.425061 moveto
+-4 0 rlineto
+stroke
+HE10 setfont
+(10M)
+dup stringwidth
+2 div
+120.425061 exch sub
+exch
+40.000000 exch sub
+exch
+moveto
+show
+45.000000 170.637591 moveto
+-4 0 rlineto
+stroke
+HE10 setfont
+(15M)
+dup stringwidth
+2 div
+170.637591 exch sub
+exch
+40.000000 exch sub
+exch
+moveto
+show
+45.000000 220.850122 moveto
+-4 0 rlineto
+stroke
+HE10 setfont
+(20M)
+dup stringwidth
+2 div
+220.850122 exch sub
+exch
+40.000000 exch sub
+exch
+moveto
+show
+45.000000 271.062652 moveto
+-4 0 rlineto
+stroke
+HE10 setfont
+(25M)
+dup stringwidth
+2 div
+271.062652 exch sub
+exch
+40.000000 exch sub
+exch
+moveto
+show
+45.000000 321.275183 moveto
+-4 0 rlineto
+stroke
+HE10 setfont
+(30M)
+dup stringwidth
+2 div
+321.275183 exch sub
+exch
+40.000000 exch sub
+exch
+moveto
+show
+483.039355 44.833333 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+0.000000 0.000000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 46.833333 moveto
+(x43CF353:zypp::capabilit) show
+483.039355 76.666667 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+0.000000 0.000000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 78.666667 moveto
+(x805B744:__gnu_cxx::new_) show
+483.039355 108.500000 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+0.000000 1.000000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 110.500000 moveto
+(x805B6E1:__gnu_cxx::new_) show
+483.039355 140.333333 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+0.000000 1.000000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 142.333333 moveto
+(x46A1529:zypp::Edition::) show
+483.039355 172.166667 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+1.000000 0.000000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 174.166667 moveto
+(x46A2484:boost::detail::) show
+483.039355 204.000000 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+1.000000 0.000000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 206.000000 moveto
+(x4B99E1D:sqlite3GenericM) show
+483.039355 235.833333 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+1.000000 1.000000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 237.833333 moveto
+(x43CF798:zypp::capabilit) show
+483.039355 267.666667 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+1.000000 1.000000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 269.666667 moveto
+(x43CF6C9:zypp::capabilit) show
+483.039355 299.500000 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+0.000000 0.000000 0.500000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 301.500000 moveto
+(x805B678:__gnu_cxx::new_) show
+483.039355 331.333333 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+0.000000 0.500000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 333.333333 moveto
+(heap-admin) show
+483.039355 363.166667 moveto
+0 14 rlineto
+14 0 rlineto
+0 -14 rlineto
+closepath
+gsave
+0.000000 0.500000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+HE10 setfont
+502.039355 365.166667 moveto
+(x4C80FFB:std::string::_R) show
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 20.000000 lineto
+52.341216 20.000000 lineto
+55.025764 20.000000 lineto
+56.493877 20.000000 lineto
+59.178425 20.000000 lineto
+61.862973 20.000000 lineto
+64.799197 20.000000 lineto
+67.483745 20.000000 lineto
+70.168293 20.000000 lineto
+72.852841 20.000000 lineto
+75.537389 20.000000 lineto
+78.221937 20.000000 lineto
+81.409838 20.000000 lineto
+84.094386 20.000000 lineto
+86.778934 20.000000 lineto
+89.463482 20.000000 lineto
+92.148030 20.000000 lineto
+94.832578 20.000000 lineto
+97.517126 20.000000 lineto
+100.201674 20.000000 lineto
+102.886222 20.000000 lineto
+105.570770 20.000000 lineto
+108.255318 20.000000 lineto
+110.939866 20.000000 lineto
+114.631120 20.000000 lineto
+117.315668 20.000000 lineto
+120.000216 20.000000 lineto
+122.684764 20.000000 lineto
+125.369312 20.000000 lineto
+128.053860 20.000000 lineto
+130.738408 20.000000 lineto
+133.422956 20.000000 lineto
+136.107504 20.000000 lineto
+138.792052 20.000000 lineto
+141.476600 20.000000 lineto
+144.161148 20.000000 lineto
+146.845696 20.000000 lineto
+149.530244 20.000000 lineto
+152.214792 20.000000 lineto
+154.899340 20.000000 lineto
+157.583888 20.000000 lineto
+160.268436 20.000000 lineto
+162.952984 20.000000 lineto
+165.637532 20.000000 lineto
+168.322080 20.000000 lineto
+171.006628 20.000000 lineto
+173.691176 20.000000 lineto
+176.375724 20.000000 lineto
+179.060272 20.000000 lineto
+181.073683 20.000000 lineto
+183.758231 20.000000 lineto
+187.800127 20.000000 lineto
+190.484675 20.000000 lineto
+193.169224 20.000000 lineto
+195.853772 20.000000 lineto
+198.538320 20.000000 lineto
+201.222868 20.000000 lineto
+203.907416 20.000000 lineto
+206.591964 20.000000 lineto
+209.276512 20.000000 lineto
+211.961060 20.000000 lineto
+214.645608 20.000000 lineto
+217.330156 20.000000 lineto
+220.014704 20.000000 lineto
+222.699252 20.000000 lineto
+225.383800 20.000000 lineto
+228.068348 20.000000 lineto
+230.752896 20.000000 lineto
+233.437444 20.000000 lineto
+236.121992 20.000000 lineto
+238.806540 20.000000 lineto
+241.491088 20.000000 lineto
+244.175636 20.000000 lineto
+246.860184 20.000000 lineto
+249.544732 20.000000 lineto
+252.229280 20.000000 lineto
+254.913828 20.000000 lineto
+257.598376 20.000000 lineto
+260.282924 20.000000 lineto
+262.967472 20.000000 lineto
+265.653331 20.000000 lineto
+268.337879 20.000000 lineto
+271.022427 20.000000 lineto
+273.706975 20.000000 lineto
+276.391523 20.000000 lineto
+279.076071 20.000000 lineto
+281.760619 20.000000 lineto
+284.445167 20.000000 lineto
+287.129715 20.000000 lineto
+289.814263 20.000000 lineto
+292.498811 20.000000 lineto
+295.183359 20.000000 lineto
+297.867907 20.000000 lineto
+300.552455 20.000000 lineto
+303.237003 20.000000 lineto
+305.921551 20.000000 lineto
+308.606099 20.000000 lineto
+311.290647 20.000000 lineto
+313.975195 20.000000 lineto
+316.659743 20.000000 lineto
+319.344291 20.000000 lineto
+322.028839 20.000000 lineto
+324.713387 20.000000 lineto
+327.397935 20.000000 lineto
+330.082483 20.000000 lineto
+332.767031 20.000000 lineto
+335.451579 20.000000 lineto
+338.136127 20.000000 lineto
+340.820675 20.000000 lineto
+343.505223 20.000000 lineto
+346.189771 20.000000 lineto
+348.874319 20.000000 lineto
+351.558867 20.000000 lineto
+354.243415 20.000000 lineto
+356.927963 20.000000 lineto
+359.612511 20.000000 lineto
+362.297059 20.000000 lineto
+364.981607 20.000000 lineto
+367.666155 20.000000 lineto
+370.350704 20.000000 lineto
+373.035252 20.000000 lineto
+375.719800 20.000000 lineto
+378.404348 20.000000 lineto
+381.088896 20.000000 lineto
+383.773444 20.000000 lineto
+386.457992 20.000000 lineto
+389.142540 20.000000 lineto
+391.827088 20.000000 lineto
+394.511636 20.000000 lineto
+397.196184 20.000000 lineto
+399.880732 20.000000 lineto
+402.565280 20.000000 lineto
+405.249828 20.000000 lineto
+407.934376 20.000000 lineto
+410.618924 20.000000 lineto
+413.303472 20.000000 lineto
+415.988020 20.000000 lineto
+418.672568 20.000000 lineto
+421.357116 20.000000 lineto
+424.041664 20.000000 lineto
+426.726212 20.000000 lineto
+429.410760 20.000000 lineto
+432.095308 20.000000 lineto
+434.779856 20.000000 lineto
+437.464404 20.000000 lineto
+440.148952 20.000000 lineto
+442.833500 20.000000 lineto
+445.518048 20.000000 lineto
+448.202596 20.000000 lineto
+450.887144 20.000000 lineto
+453.571692 20.000000 lineto
+456.256240 20.000000 lineto
+458.940788 20.000000 lineto
+461.625336 20.000000 lineto
+464.309884 20.000000 lineto
+466.994432 20.000000 lineto
+469.678980 20.000000 lineto
+472.363528 20.000000 lineto
+475.354807 20.000000 lineto
+478.039355 20.000000 lineto
+478.039355 20.000000 lineto
+478.039355 20.000000 lineto
+475.354807 22.238274 lineto
+472.363528 22.238274 lineto
+469.678980 22.238274 lineto
+466.994432 22.238274 lineto
+464.309884 22.238274 lineto
+461.625336 22.238274 lineto
+458.940788 22.238274 lineto
+456.256240 22.238274 lineto
+453.571692 22.238274 lineto
+450.887144 22.238274 lineto
+448.202596 22.238274 lineto
+445.518048 22.238274 lineto
+442.833500 22.238274 lineto
+440.148952 22.238274 lineto
+437.464404 22.238274 lineto
+434.779856 22.238274 lineto
+432.095308 22.238274 lineto
+429.410760 22.238274 lineto
+426.726212 22.238274 lineto
+424.041664 22.238274 lineto
+421.357116 22.238274 lineto
+418.672568 22.238274 lineto
+415.988020 22.238274 lineto
+413.303472 22.238274 lineto
+410.618924 22.238274 lineto
+407.934376 22.238274 lineto
+405.249828 22.238274 lineto
+402.565280 22.238274 lineto
+399.880732 22.238274 lineto
+397.196184 22.238274 lineto
+394.511636 22.238274 lineto
+391.827088 22.238274 lineto
+389.142540 22.238274 lineto
+386.457992 22.238274 lineto
+383.773444 22.238274 lineto
+381.088896 22.238274 lineto
+378.404348 22.238274 lineto
+375.719800 22.238274 lineto
+373.035252 22.238274 lineto
+370.350704 22.238274 lineto
+367.666155 22.238274 lineto
+364.981607 22.238274 lineto
+362.297059 22.238274 lineto
+359.612511 22.238274 lineto
+356.927963 22.238274 lineto
+354.243415 22.238274 lineto
+351.558867 22.238274 lineto
+348.874319 22.238274 lineto
+346.189771 22.238274 lineto
+343.505223 22.238274 lineto
+340.820675 22.238274 lineto
+338.136127 22.238274 lineto
+335.451579 22.238274 lineto
+332.767031 22.238274 lineto
+330.082483 22.238274 lineto
+327.397935 22.238274 lineto
+324.713387 22.238274 lineto
+322.028839 22.238274 lineto
+319.344291 22.238274 lineto
+316.659743 22.238274 lineto
+313.975195 22.238274 lineto
+311.290647 22.238274 lineto
+308.606099 22.238274 lineto
+305.921551 22.238274 lineto
+303.237003 22.238274 lineto
+300.552455 22.238274 lineto
+297.867907 22.238274 lineto
+295.183359 22.238274 lineto
+292.498811 22.238274 lineto
+289.814263 22.238274 lineto
+287.129715 22.238274 lineto
+284.445167 22.238274 lineto
+281.760619 22.238274 lineto
+279.076071 22.238274 lineto
+276.391523 22.238274 lineto
+273.706975 22.238274 lineto
+271.022427 22.238274 lineto
+268.337879 22.238274 lineto
+265.653331 22.238274 lineto
+262.967472 22.238274 lineto
+260.282924 22.238274 lineto
+257.598376 22.238274 lineto
+254.913828 22.238274 lineto
+252.229280 22.238274 lineto
+249.544732 22.238274 lineto
+246.860184 22.238274 lineto
+244.175636 22.238274 lineto
+241.491088 22.238274 lineto
+238.806540 22.238274 lineto
+236.121992 22.238274 lineto
+233.437444 22.238274 lineto
+230.752896 22.238274 lineto
+228.068348 22.238274 lineto
+225.383800 22.238274 lineto
+222.699252 22.238274 lineto
+220.014704 22.238274 lineto
+217.330156 22.238274 lineto
+214.645608 22.238274 lineto
+211.961060 22.238274 lineto
+209.276512 22.238274 lineto
+206.591964 22.238274 lineto
+203.907416 22.238274 lineto
+201.222868 22.238274 lineto
+198.538320 22.238274 lineto
+195.853772 22.238274 lineto
+193.169224 22.238274 lineto
+190.484675 22.238274 lineto
+187.800127 22.238274 lineto
+183.758231 22.192962 lineto
+181.073683 22.164361 lineto
+179.060272 22.131100 lineto
+176.375724 22.097357 lineto
+173.691176 22.048350 lineto
+171.006628 22.010269 lineto
+168.322080 21.969938 lineto
+165.637532 21.962225 lineto
+162.952984 21.919966 lineto
+160.268436 21.870798 lineto
+157.583888 21.828218 lineto
+154.899340 21.769088 lineto
+152.214792 21.724740 lineto
+149.530244 21.687623 lineto
+146.845696 21.659183 lineto
+144.161148 21.624476 lineto
+141.476600 21.575147 lineto
+138.792052 21.533209 lineto
+136.107504 21.488540 lineto
+133.422956 21.441943 lineto
+130.738408 21.385544 lineto
+128.053860 21.312114 lineto
+125.369312 21.263428 lineto
+122.684764 21.225346 lineto
+120.000216 21.156575 lineto
+117.315668 21.079770 lineto
+114.631120 20.996377 lineto
+110.939866 20.953958 lineto
+108.255318 20.915877 lineto
+105.570770 20.882455 lineto
+102.886222 20.841964 lineto
+100.201674 20.792153 lineto
+97.517126 20.754393 lineto
+94.832578 20.742021 lineto
+92.148030 20.722900 lineto
+89.463482 20.662645 lineto
+86.778934 20.628581 lineto
+84.094386 20.563184 lineto
+81.409838 20.524621 lineto
+78.221937 20.480916 lineto
+75.537389 20.453921 lineto
+72.852841 20.424677 lineto
+70.168293 20.368600 lineto
+67.483745 20.330037 lineto
+64.799197 20.287939 lineto
+61.862973 20.242145 lineto
+59.178425 20.192816 lineto
+56.493877 20.127259 lineto
+55.025764 20.098818 lineto
+52.341216 20.060416 lineto
+50.264886 20.023941 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+0.000000 0.000000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 20.023941 lineto
+52.341216 20.060416 lineto
+55.025764 20.098818 lineto
+56.493877 20.127259 lineto
+59.178425 20.192816 lineto
+61.862973 20.242145 lineto
+64.799197 20.287939 lineto
+67.483745 20.330037 lineto
+70.168293 20.368600 lineto
+72.852841 20.424677 lineto
+75.537389 20.453921 lineto
+78.221937 20.480916 lineto
+81.409838 20.524621 lineto
+84.094386 20.563184 lineto
+86.778934 20.628581 lineto
+89.463482 20.662645 lineto
+92.148030 20.722900 lineto
+94.832578 20.742021 lineto
+97.517126 20.754393 lineto
+100.201674 20.792153 lineto
+102.886222 20.841964 lineto
+105.570770 20.882455 lineto
+108.255318 20.915877 lineto
+110.939866 20.953958 lineto
+114.631120 20.996377 lineto
+117.315668 21.079770 lineto
+120.000216 21.156575 lineto
+122.684764 21.225346 lineto
+125.369312 21.263428 lineto
+128.053860 21.312114 lineto
+130.738408 21.385544 lineto
+133.422956 21.441943 lineto
+136.107504 21.488540 lineto
+138.792052 21.533209 lineto
+141.476600 21.575147 lineto
+144.161148 21.624476 lineto
+146.845696 21.659183 lineto
+149.530244 21.687623 lineto
+152.214792 21.724740 lineto
+154.899340 21.769088 lineto
+157.583888 21.828218 lineto
+160.268436 21.870798 lineto
+162.952984 21.919966 lineto
+165.637532 21.962225 lineto
+168.322080 21.969938 lineto
+171.006628 22.010269 lineto
+173.691176 22.048350 lineto
+176.375724 22.097357 lineto
+179.060272 22.131100 lineto
+181.073683 22.164361 lineto
+183.758231 22.192962 lineto
+187.800127 22.238274 lineto
+190.484675 22.238274 lineto
+193.169224 22.238274 lineto
+195.853772 22.238274 lineto
+198.538320 22.238274 lineto
+201.222868 22.238274 lineto
+203.907416 22.238274 lineto
+206.591964 22.238274 lineto
+209.276512 22.238274 lineto
+211.961060 22.238274 lineto
+214.645608 22.238274 lineto
+217.330156 22.238274 lineto
+220.014704 22.238274 lineto
+222.699252 22.238274 lineto
+225.383800 22.238274 lineto
+228.068348 22.238274 lineto
+230.752896 22.238274 lineto
+233.437444 22.238274 lineto
+236.121992 22.238274 lineto
+238.806540 22.238274 lineto
+241.491088 22.238274 lineto
+244.175636 22.238274 lineto
+246.860184 22.238274 lineto
+249.544732 22.238274 lineto
+252.229280 22.238274 lineto
+254.913828 22.238274 lineto
+257.598376 22.238274 lineto
+260.282924 22.238274 lineto
+262.967472 22.238274 lineto
+265.653331 22.238274 lineto
+268.337879 22.238274 lineto
+271.022427 22.238274 lineto
+273.706975 22.238274 lineto
+276.391523 22.238274 lineto
+279.076071 22.238274 lineto
+281.760619 22.238274 lineto
+284.445167 22.238274 lineto
+287.129715 22.238274 lineto
+289.814263 22.238274 lineto
+292.498811 22.238274 lineto
+295.183359 22.238274 lineto
+297.867907 22.238274 lineto
+300.552455 22.238274 lineto
+303.237003 22.238274 lineto
+305.921551 22.238274 lineto
+308.606099 22.238274 lineto
+311.290647 22.238274 lineto
+313.975195 22.238274 lineto
+316.659743 22.238274 lineto
+319.344291 22.238274 lineto
+322.028839 22.238274 lineto
+324.713387 22.238274 lineto
+327.397935 22.238274 lineto
+330.082483 22.238274 lineto
+332.767031 22.238274 lineto
+335.451579 22.238274 lineto
+338.136127 22.238274 lineto
+340.820675 22.238274 lineto
+343.505223 22.238274 lineto
+346.189771 22.238274 lineto
+348.874319 22.238274 lineto
+351.558867 22.238274 lineto
+354.243415 22.238274 lineto
+356.927963 22.238274 lineto
+359.612511 22.238274 lineto
+362.297059 22.238274 lineto
+364.981607 22.238274 lineto
+367.666155 22.238274 lineto
+370.350704 22.238274 lineto
+373.035252 22.238274 lineto
+375.719800 22.238274 lineto
+378.404348 22.238274 lineto
+381.088896 22.238274 lineto
+383.773444 22.238274 lineto
+386.457992 22.238274 lineto
+389.142540 22.238274 lineto
+391.827088 22.238274 lineto
+394.511636 22.238274 lineto
+397.196184 22.238274 lineto
+399.880732 22.238274 lineto
+402.565280 22.238274 lineto
+405.249828 22.238274 lineto
+407.934376 22.238274 lineto
+410.618924 22.238274 lineto
+413.303472 22.238274 lineto
+415.988020 22.238274 lineto
+418.672568 22.238274 lineto
+421.357116 22.238274 lineto
+424.041664 22.238274 lineto
+426.726212 22.238274 lineto
+429.410760 22.238274 lineto
+432.095308 22.238274 lineto
+434.779856 22.238274 lineto
+437.464404 22.238274 lineto
+440.148952 22.238274 lineto
+442.833500 22.238274 lineto
+445.518048 22.238274 lineto
+448.202596 22.238274 lineto
+450.887144 22.238274 lineto
+453.571692 22.238274 lineto
+456.256240 22.238274 lineto
+458.940788 22.238274 lineto
+461.625336 22.238274 lineto
+464.309884 22.238274 lineto
+466.994432 22.238274 lineto
+469.678980 22.238274 lineto
+472.363528 22.238274 lineto
+475.354807 22.238274 lineto
+478.039355 20.000000 lineto
+478.039355 22.874406 lineto
+478.039355 22.874406 lineto
+475.354807 29.817875 lineto
+472.363528 29.817875 lineto
+469.678980 29.817875 lineto
+466.994432 29.817875 lineto
+464.309884 29.817875 lineto
+461.625336 29.817875 lineto
+458.940788 29.817875 lineto
+456.256240 29.817875 lineto
+453.571692 29.817875 lineto
+450.887144 29.817875 lineto
+448.202596 29.817875 lineto
+445.518048 29.817875 lineto
+442.833500 29.817875 lineto
+440.148952 29.817875 lineto
+437.464404 29.817875 lineto
+434.779856 29.817875 lineto
+432.095308 29.817875 lineto
+429.410760 29.817875 lineto
+426.726212 29.817875 lineto
+424.041664 29.817875 lineto
+421.357116 29.817875 lineto
+418.672568 29.817875 lineto
+415.988020 29.817875 lineto
+413.303472 29.817875 lineto
+410.618924 29.817875 lineto
+407.934376 29.817875 lineto
+405.249828 29.817875 lineto
+402.565280 29.817875 lineto
+399.880732 29.817875 lineto
+397.196184 29.817875 lineto
+394.511636 29.817875 lineto
+391.827088 29.817875 lineto
+389.142540 29.817875 lineto
+386.457992 29.817875 lineto
+383.773444 29.817875 lineto
+381.088896 29.817875 lineto
+378.404348 29.817875 lineto
+375.719800 29.817875 lineto
+373.035252 29.817875 lineto
+370.350704 29.817875 lineto
+367.666155 29.817875 lineto
+364.981607 29.817875 lineto
+362.297059 29.817875 lineto
+359.612511 29.817875 lineto
+356.927963 29.817875 lineto
+354.243415 29.817875 lineto
+351.558867 29.817875 lineto
+348.874319 29.817875 lineto
+346.189771 29.817875 lineto
+343.505223 29.817875 lineto
+340.820675 29.817875 lineto
+338.136127 29.817875 lineto
+335.451579 29.817875 lineto
+332.767031 29.817875 lineto
+330.082483 29.817875 lineto
+327.397935 29.817875 lineto
+324.713387 29.817875 lineto
+322.028839 29.817875 lineto
+319.344291 29.817875 lineto
+316.659743 29.817875 lineto
+313.975195 29.817875 lineto
+311.290647 29.817875 lineto
+308.606099 29.817875 lineto
+305.921551 29.817875 lineto
+303.237003 29.817875 lineto
+300.552455 29.817875 lineto
+297.867907 29.817875 lineto
+295.183359 29.817875 lineto
+292.498811 29.817875 lineto
+289.814263 29.817875 lineto
+287.129715 29.817875 lineto
+284.445167 29.817875 lineto
+281.760619 29.817875 lineto
+279.076071 29.817875 lineto
+276.391523 29.817875 lineto
+273.706975 29.817875 lineto
+271.022427 29.817875 lineto
+268.337879 29.817875 lineto
+265.653331 29.817875 lineto
+262.967472 29.817875 lineto
+260.282924 29.817875 lineto
+257.598376 29.817875 lineto
+254.913828 29.817875 lineto
+252.229280 29.817875 lineto
+249.544732 29.817875 lineto
+246.860184 29.817875 lineto
+244.175636 29.817875 lineto
+241.491088 29.817875 lineto
+238.806540 29.817875 lineto
+236.121992 29.817875 lineto
+233.437444 29.817875 lineto
+230.752896 29.817875 lineto
+228.068348 29.817875 lineto
+225.383800 29.817875 lineto
+222.699252 29.817875 lineto
+220.014704 29.817875 lineto
+217.330156 29.817875 lineto
+214.645608 29.817875 lineto
+211.961060 29.817875 lineto
+209.276512 29.817875 lineto
+206.591964 29.817875 lineto
+203.907416 29.817875 lineto
+201.222868 29.817875 lineto
+198.538320 29.817875 lineto
+195.853772 29.817875 lineto
+193.169224 29.817875 lineto
+190.484675 29.817875 lineto
+187.800127 29.817875 lineto
+183.758231 29.583604 lineto
+181.073683 29.417139 lineto
+179.060272 29.269635 lineto
+176.375724 29.123095 lineto
+173.691176 28.934777 lineto
+171.006628 28.722198 lineto
+168.322080 28.522312 lineto
+165.637532 28.382520 lineto
+162.952984 28.204326 lineto
+160.268436 28.006207 lineto
+157.583888 27.824317 lineto
+154.899340 27.595991 lineto
+152.214792 27.369914 lineto
+149.530244 27.159262 lineto
+146.845696 27.043091 lineto
+144.161148 26.905227 lineto
+141.476600 26.699717 lineto
+138.792052 26.546429 lineto
+136.107504 26.374983 lineto
+133.422956 26.178471 lineto
+130.738408 25.949020 lineto
+128.053860 25.702537 lineto
+125.369312 25.491885 lineto
+122.684764 25.314012 lineto
+120.000216 25.063512 lineto
+117.315668 24.734600 lineto
+114.631120 24.444411 lineto
+110.939866 24.192786 lineto
+108.255318 24.014914 lineto
+105.570770 23.871587 lineto
+102.886222 23.688894 lineto
+100.201674 23.491579 lineto
+97.517126 23.290407 lineto
+94.832578 23.154632 lineto
+92.148030 22.980776 lineto
+89.463482 22.780730 lineto
+86.778934 22.620371 lineto
+84.094386 22.407952 lineto
+81.409838 22.177055 lineto
+78.221937 21.939569 lineto
+75.537389 21.824844 lineto
+72.852841 21.701602 lineto
+70.168293 21.498021 lineto
+67.483745 21.340875 lineto
+64.799197 21.197067 lineto
+61.862973 20.973882 lineto
+59.178425 20.781387 lineto
+56.493877 20.539885 lineto
+55.025764 20.422267 lineto
+52.341216 20.235878 lineto
+50.264886 20.087571 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+0.000000 0.000000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 20.087571 lineto
+52.341216 20.235878 lineto
+55.025764 20.422267 lineto
+56.493877 20.539885 lineto
+59.178425 20.781387 lineto
+61.862973 20.973882 lineto
+64.799197 21.197067 lineto
+67.483745 21.340875 lineto
+70.168293 21.498021 lineto
+72.852841 21.701602 lineto
+75.537389 21.824844 lineto
+78.221937 21.939569 lineto
+81.409838 22.177055 lineto
+84.094386 22.407952 lineto
+86.778934 22.620371 lineto
+89.463482 22.780730 lineto
+92.148030 22.980776 lineto
+94.832578 23.154632 lineto
+97.517126 23.290407 lineto
+100.201674 23.491579 lineto
+102.886222 23.688894 lineto
+105.570770 23.871587 lineto
+108.255318 24.014914 lineto
+110.939866 24.192786 lineto
+114.631120 24.444411 lineto
+117.315668 24.734600 lineto
+120.000216 25.063512 lineto
+122.684764 25.314012 lineto
+125.369312 25.491885 lineto
+128.053860 25.702537 lineto
+130.738408 25.949020 lineto
+133.422956 26.178471 lineto
+136.107504 26.374983 lineto
+138.792052 26.546429 lineto
+141.476600 26.699717 lineto
+144.161148 26.905227 lineto
+146.845696 27.043091 lineto
+149.530244 27.159262 lineto
+152.214792 27.369914 lineto
+154.899340 27.595991 lineto
+157.583888 27.824317 lineto
+160.268436 28.006207 lineto
+162.952984 28.204326 lineto
+165.637532 28.382520 lineto
+168.322080 28.522312 lineto
+171.006628 28.722198 lineto
+173.691176 28.934777 lineto
+176.375724 29.123095 lineto
+179.060272 29.269635 lineto
+181.073683 29.417139 lineto
+183.758231 29.583604 lineto
+187.800127 29.817875 lineto
+190.484675 29.817875 lineto
+193.169224 29.817875 lineto
+195.853772 29.817875 lineto
+198.538320 29.817875 lineto
+201.222868 29.817875 lineto
+203.907416 29.817875 lineto
+206.591964 29.817875 lineto
+209.276512 29.817875 lineto
+211.961060 29.817875 lineto
+214.645608 29.817875 lineto
+217.330156 29.817875 lineto
+220.014704 29.817875 lineto
+222.699252 29.817875 lineto
+225.383800 29.817875 lineto
+228.068348 29.817875 lineto
+230.752896 29.817875 lineto
+233.437444 29.817875 lineto
+236.121992 29.817875 lineto
+238.806540 29.817875 lineto
+241.491088 29.817875 lineto
+244.175636 29.817875 lineto
+246.860184 29.817875 lineto
+249.544732 29.817875 lineto
+252.229280 29.817875 lineto
+254.913828 29.817875 lineto
+257.598376 29.817875 lineto
+260.282924 29.817875 lineto
+262.967472 29.817875 lineto
+265.653331 29.817875 lineto
+268.337879 29.817875 lineto
+271.022427 29.817875 lineto
+273.706975 29.817875 lineto
+276.391523 29.817875 lineto
+279.076071 29.817875 lineto
+281.760619 29.817875 lineto
+284.445167 29.817875 lineto
+287.129715 29.817875 lineto
+289.814263 29.817875 lineto
+292.498811 29.817875 lineto
+295.183359 29.817875 lineto
+297.867907 29.817875 lineto
+300.552455 29.817875 lineto
+303.237003 29.817875 lineto
+305.921551 29.817875 lineto
+308.606099 29.817875 lineto
+311.290647 29.817875 lineto
+313.975195 29.817875 lineto
+316.659743 29.817875 lineto
+319.344291 29.817875 lineto
+322.028839 29.817875 lineto
+324.713387 29.817875 lineto
+327.397935 29.817875 lineto
+330.082483 29.817875 lineto
+332.767031 29.817875 lineto
+335.451579 29.817875 lineto
+338.136127 29.817875 lineto
+340.820675 29.817875 lineto
+343.505223 29.817875 lineto
+346.189771 29.817875 lineto
+348.874319 29.817875 lineto
+351.558867 29.817875 lineto
+354.243415 29.817875 lineto
+356.927963 29.817875 lineto
+359.612511 29.817875 lineto
+362.297059 29.817875 lineto
+364.981607 29.817875 lineto
+367.666155 29.817875 lineto
+370.350704 29.817875 lineto
+373.035252 29.817875 lineto
+375.719800 29.817875 lineto
+378.404348 29.817875 lineto
+381.088896 29.817875 lineto
+383.773444 29.817875 lineto
+386.457992 29.817875 lineto
+389.142540 29.817875 lineto
+391.827088 29.817875 lineto
+394.511636 29.817875 lineto
+397.196184 29.817875 lineto
+399.880732 29.817875 lineto
+402.565280 29.817875 lineto
+405.249828 29.817875 lineto
+407.934376 29.817875 lineto
+410.618924 29.817875 lineto
+413.303472 29.817875 lineto
+415.988020 29.817875 lineto
+418.672568 29.817875 lineto
+421.357116 29.817875 lineto
+424.041664 29.817875 lineto
+426.726212 29.817875 lineto
+429.410760 29.817875 lineto
+432.095308 29.817875 lineto
+434.779856 29.817875 lineto
+437.464404 29.817875 lineto
+440.148952 29.817875 lineto
+442.833500 29.817875 lineto
+445.518048 29.817875 lineto
+448.202596 29.817875 lineto
+450.887144 29.817875 lineto
+453.571692 29.817875 lineto
+456.256240 29.817875 lineto
+458.940788 29.817875 lineto
+461.625336 29.817875 lineto
+464.309884 29.817875 lineto
+466.994432 29.817875 lineto
+469.678980 29.817875 lineto
+472.363528 29.817875 lineto
+475.354807 29.817875 lineto
+478.039355 22.874406 lineto
+478.039355 26.227880 lineto
+478.039355 26.227880 lineto
+475.354807 38.660744 lineto
+472.363528 38.660744 lineto
+469.678980 38.660744 lineto
+466.994432 38.660744 lineto
+464.309884 38.660744 lineto
+461.625336 38.660744 lineto
+458.940788 38.660744 lineto
+456.256240 38.660744 lineto
+453.571692 38.660744 lineto
+450.887144 38.660744 lineto
+448.202596 38.660744 lineto
+445.518048 38.660744 lineto
+442.833500 38.660744 lineto
+440.148952 38.660744 lineto
+437.464404 38.660744 lineto
+434.779856 38.660744 lineto
+432.095308 38.660744 lineto
+429.410760 38.660744 lineto
+426.726212 38.660744 lineto
+424.041664 38.660744 lineto
+421.357116 38.660744 lineto
+418.672568 38.660744 lineto
+415.988020 38.660744 lineto
+413.303472 38.660744 lineto
+410.618924 38.660744 lineto
+407.934376 38.660744 lineto
+405.249828 38.660744 lineto
+402.565280 38.660744 lineto
+399.880732 38.660744 lineto
+397.196184 38.660744 lineto
+394.511636 38.660744 lineto
+391.827088 38.660744 lineto
+389.142540 38.660744 lineto
+386.457992 38.660744 lineto
+383.773444 38.660744 lineto
+381.088896 38.660744 lineto
+378.404348 38.660744 lineto
+375.719800 38.660744 lineto
+373.035252 38.660744 lineto
+370.350704 38.660744 lineto
+367.666155 38.660744 lineto
+364.981607 38.660744 lineto
+362.297059 38.660744 lineto
+359.612511 38.660744 lineto
+356.927963 38.660744 lineto
+354.243415 38.660744 lineto
+351.558867 38.660744 lineto
+348.874319 38.660744 lineto
+346.189771 38.660744 lineto
+343.505223 38.660744 lineto
+340.820675 38.660744 lineto
+338.136127 38.660744 lineto
+335.451579 38.660744 lineto
+332.767031 38.660744 lineto
+330.082483 38.660744 lineto
+327.397935 38.660744 lineto
+324.713387 38.660744 lineto
+322.028839 38.660744 lineto
+319.344291 38.660744 lineto
+316.659743 38.660744 lineto
+313.975195 38.660744 lineto
+311.290647 38.660744 lineto
+308.606099 38.660744 lineto
+305.921551 38.660744 lineto
+303.237003 38.660744 lineto
+300.552455 38.660744 lineto
+297.867907 38.660744 lineto
+295.183359 38.660744 lineto
+292.498811 38.660744 lineto
+289.814263 38.660744 lineto
+287.129715 38.660744 lineto
+284.445167 38.660744 lineto
+281.760619 38.660744 lineto
+279.076071 38.660744 lineto
+276.391523 38.660744 lineto
+273.706975 38.660744 lineto
+271.022427 38.660744 lineto
+268.337879 38.660744 lineto
+265.653331 38.660744 lineto
+262.967472 38.660744 lineto
+260.282924 38.660744 lineto
+257.598376 38.660744 lineto
+254.913828 38.660744 lineto
+252.229280 38.660744 lineto
+249.544732 38.660744 lineto
+246.860184 38.660744 lineto
+244.175636 38.660744 lineto
+241.491088 38.660744 lineto
+238.806540 38.660744 lineto
+236.121992 38.660744 lineto
+233.437444 38.660744 lineto
+230.752896 38.660744 lineto
+228.068348 38.660744 lineto
+225.383800 38.660744 lineto
+222.699252 38.660744 lineto
+220.014704 38.660744 lineto
+217.330156 38.660744 lineto
+214.645608 38.660744 lineto
+211.961060 38.660744 lineto
+209.276512 38.660744 lineto
+206.591964 38.660744 lineto
+203.907416 38.660744 lineto
+201.222868 38.660744 lineto
+198.538320 38.660744 lineto
+195.853772 38.660744 lineto
+193.169224 38.660744 lineto
+190.484675 38.660744 lineto
+187.800127 38.660744 lineto
+183.758231 38.206582 lineto
+181.073683 37.879276 lineto
+179.060272 37.598206 lineto
+176.375724 37.320069 lineto
+173.691176 36.969224 lineto
+171.006628 36.553063 lineto
+168.322080 36.167310 lineto
+165.637532 35.873145 lineto
+162.952984 35.536359 lineto
+160.268436 35.164465 lineto
+157.583888 34.820048 lineto
+154.899340 34.394326 lineto
+152.214792 33.956231 lineto
+149.530244 33.543404 lineto
+146.845696 33.324598 lineto
+144.161148 33.066385 lineto
+141.476600 32.678664 lineto
+138.792052 32.395465 lineto
+136.107504 32.076114 lineto
+133.422956 31.704983 lineto
+130.738408 31.273356 lineto
+128.053860 30.824978 lineto
+125.369312 30.425648 lineto
+122.684764 30.084403 lineto
+120.000216 29.621886 lineto
+117.315668 28.998849 lineto
+114.631120 28.467399 lineto
+110.939866 27.971701 lineto
+108.255318 27.630738 lineto
+105.570770 27.359470 lineto
+102.886222 27.010593 lineto
+100.201674 26.641190 lineto
+97.517126 26.249090 lineto
+94.832578 25.969908 lineto
+92.148030 25.615528 lineto
+89.463482 25.252110 lineto
+86.778934 24.944689 lineto
+84.094386 24.560182 lineto
+81.409838 24.105176 lineto
+78.221937 23.641614 lineto
+75.537389 23.424535 lineto
+72.852841 23.191629 lineto
+70.168293 22.816240 lineto
+67.483745 22.520468 lineto
+64.799197 22.257716 lineto
+61.862973 21.827857 lineto
+59.178425 21.468335 lineto
+56.493877 21.021564 lineto
+55.025764 20.799906 lineto
+52.341216 20.440866 lineto
+50.264886 20.162367 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+0.000000 1.000000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 20.162367 lineto
+52.341216 20.440866 lineto
+55.025764 20.799906 lineto
+56.493877 21.021564 lineto
+59.178425 21.468335 lineto
+61.862973 21.827857 lineto
+64.799197 22.257716 lineto
+67.483745 22.520468 lineto
+70.168293 22.816240 lineto
+72.852841 23.191629 lineto
+75.537389 23.424535 lineto
+78.221937 23.641614 lineto
+81.409838 24.105176 lineto
+84.094386 24.560182 lineto
+86.778934 24.944689 lineto
+89.463482 25.252110 lineto
+92.148030 25.615528 lineto
+94.832578 25.969908 lineto
+97.517126 26.249090 lineto
+100.201674 26.641190 lineto
+102.886222 27.010593 lineto
+105.570770 27.359470 lineto
+108.255318 27.630738 lineto
+110.939866 27.971701 lineto
+114.631120 28.467399 lineto
+117.315668 28.998849 lineto
+120.000216 29.621886 lineto
+122.684764 30.084403 lineto
+125.369312 30.425648 lineto
+128.053860 30.824978 lineto
+130.738408 31.273356 lineto
+133.422956 31.704983 lineto
+136.107504 32.076114 lineto
+138.792052 32.395465 lineto
+141.476600 32.678664 lineto
+144.161148 33.066385 lineto
+146.845696 33.324598 lineto
+149.530244 33.543404 lineto
+152.214792 33.956231 lineto
+154.899340 34.394326 lineto
+157.583888 34.820048 lineto
+160.268436 35.164465 lineto
+162.952984 35.536359 lineto
+165.637532 35.873145 lineto
+168.322080 36.167310 lineto
+171.006628 36.553063 lineto
+173.691176 36.969224 lineto
+176.375724 37.320069 lineto
+179.060272 37.598206 lineto
+181.073683 37.879276 lineto
+183.758231 38.206582 lineto
+187.800127 38.660744 lineto
+190.484675 38.660744 lineto
+193.169224 38.660744 lineto
+195.853772 38.660744 lineto
+198.538320 38.660744 lineto
+201.222868 38.660744 lineto
+203.907416 38.660744 lineto
+206.591964 38.660744 lineto
+209.276512 38.660744 lineto
+211.961060 38.660744 lineto
+214.645608 38.660744 lineto
+217.330156 38.660744 lineto
+220.014704 38.660744 lineto
+222.699252 38.660744 lineto
+225.383800 38.660744 lineto
+228.068348 38.660744 lineto
+230.752896 38.660744 lineto
+233.437444 38.660744 lineto
+236.121992 38.660744 lineto
+238.806540 38.660744 lineto
+241.491088 38.660744 lineto
+244.175636 38.660744 lineto
+246.860184 38.660744 lineto
+249.544732 38.660744 lineto
+252.229280 38.660744 lineto
+254.913828 38.660744 lineto
+257.598376 38.660744 lineto
+260.282924 38.660744 lineto
+262.967472 38.660744 lineto
+265.653331 38.660744 lineto
+268.337879 38.660744 lineto
+271.022427 38.660744 lineto
+273.706975 38.660744 lineto
+276.391523 38.660744 lineto
+279.076071 38.660744 lineto
+281.760619 38.660744 lineto
+284.445167 38.660744 lineto
+287.129715 38.660744 lineto
+289.814263 38.660744 lineto
+292.498811 38.660744 lineto
+295.183359 38.660744 lineto
+297.867907 38.660744 lineto
+300.552455 38.660744 lineto
+303.237003 38.660744 lineto
+305.921551 38.660744 lineto
+308.606099 38.660744 lineto
+311.290647 38.660744 lineto
+313.975195 38.660744 lineto
+316.659743 38.660744 lineto
+319.344291 38.660744 lineto
+322.028839 38.660744 lineto
+324.713387 38.660744 lineto
+327.397935 38.660744 lineto
+330.082483 38.660744 lineto
+332.767031 38.660744 lineto
+335.451579 38.660744 lineto
+338.136127 38.660744 lineto
+340.820675 38.660744 lineto
+343.505223 38.660744 lineto
+346.189771 38.660744 lineto
+348.874319 38.660744 lineto
+351.558867 38.660744 lineto
+354.243415 38.660744 lineto
+356.927963 38.660744 lineto
+359.612511 38.660744 lineto
+362.297059 38.660744 lineto
+364.981607 38.660744 lineto
+367.666155 38.660744 lineto
+370.350704 38.660744 lineto
+373.035252 38.660744 lineto
+375.719800 38.660744 lineto
+378.404348 38.660744 lineto
+381.088896 38.660744 lineto
+383.773444 38.660744 lineto
+386.457992 38.660744 lineto
+389.142540 38.660744 lineto
+391.827088 38.660744 lineto
+394.511636 38.660744 lineto
+397.196184 38.660744 lineto
+399.880732 38.660744 lineto
+402.565280 38.660744 lineto
+405.249828 38.660744 lineto
+407.934376 38.660744 lineto
+410.618924 38.660744 lineto
+413.303472 38.660744 lineto
+415.988020 38.660744 lineto
+418.672568 38.660744 lineto
+421.357116 38.660744 lineto
+424.041664 38.660744 lineto
+426.726212 38.660744 lineto
+429.410760 38.660744 lineto
+432.095308 38.660744 lineto
+434.779856 38.660744 lineto
+437.464404 38.660744 lineto
+440.148952 38.660744 lineto
+442.833500 38.660744 lineto
+445.518048 38.660744 lineto
+448.202596 38.660744 lineto
+450.887144 38.660744 lineto
+453.571692 38.660744 lineto
+456.256240 38.660744 lineto
+458.940788 38.660744 lineto
+461.625336 38.660744 lineto
+464.309884 38.660744 lineto
+466.994432 38.660744 lineto
+469.678980 38.660744 lineto
+472.363528 38.660744 lineto
+475.354807 38.660744 lineto
+478.039355 26.227880 lineto
+478.039355 30.129876 lineto
+478.039355 30.129876 lineto
+475.354807 48.888193 lineto
+472.363528 48.888193 lineto
+469.678980 48.888193 lineto
+466.994432 48.888193 lineto
+464.309884 48.888193 lineto
+461.625336 48.888193 lineto
+458.940788 48.888193 lineto
+456.256240 48.888193 lineto
+453.571692 48.888193 lineto
+450.887144 48.888193 lineto
+448.202596 48.888193 lineto
+445.518048 48.888193 lineto
+442.833500 48.888193 lineto
+440.148952 48.888193 lineto
+437.464404 48.888193 lineto
+434.779856 48.888193 lineto
+432.095308 48.888193 lineto
+429.410760 48.888193 lineto
+426.726212 48.888193 lineto
+424.041664 48.888193 lineto
+421.357116 48.888193 lineto
+418.672568 48.888193 lineto
+415.988020 48.888193 lineto
+413.303472 48.888193 lineto
+410.618924 48.888193 lineto
+407.934376 48.888193 lineto
+405.249828 48.888193 lineto
+402.565280 48.888193 lineto
+399.880732 48.888193 lineto
+397.196184 48.888193 lineto
+394.511636 48.888193 lineto
+391.827088 48.888193 lineto
+389.142540 48.888193 lineto
+386.457992 48.888193 lineto
+383.773444 48.888193 lineto
+381.088896 48.888193 lineto
+378.404348 48.888193 lineto
+375.719800 48.888193 lineto
+373.035252 48.888193 lineto
+370.350704 48.888193 lineto
+367.666155 48.888193 lineto
+364.981607 48.888193 lineto
+362.297059 48.888193 lineto
+359.612511 48.888193 lineto
+356.927963 48.888193 lineto
+354.243415 48.888193 lineto
+351.558867 48.888193 lineto
+348.874319 48.888193 lineto
+346.189771 48.888193 lineto
+343.505223 48.888193 lineto
+340.820675 48.888193 lineto
+338.136127 48.888193 lineto
+335.451579 48.888193 lineto
+332.767031 48.888193 lineto
+330.082483 48.888193 lineto
+327.397935 48.888193 lineto
+324.713387 48.888193 lineto
+322.028839 48.888193 lineto
+319.344291 48.888193 lineto
+316.659743 48.888193 lineto
+313.975195 48.888193 lineto
+311.290647 48.888193 lineto
+308.606099 48.888193 lineto
+305.921551 48.888193 lineto
+303.237003 48.888193 lineto
+300.552455 48.888193 lineto
+297.867907 48.888193 lineto
+295.183359 48.888193 lineto
+292.498811 48.888193 lineto
+289.814263 48.888193 lineto
+287.129715 48.888193 lineto
+284.445167 48.888193 lineto
+281.760619 48.888193 lineto
+279.076071 48.888193 lineto
+276.391523 48.888193 lineto
+273.706975 48.888193 lineto
+271.022427 48.888193 lineto
+268.337879 48.888193 lineto
+265.653331 48.888193 lineto
+262.967472 48.888193 lineto
+260.282924 48.888193 lineto
+257.598376 48.888193 lineto
+254.913828 48.888193 lineto
+252.229280 48.888193 lineto
+249.544732 48.888193 lineto
+246.860184 48.888193 lineto
+244.175636 48.888193 lineto
+241.491088 48.888193 lineto
+238.806540 48.888193 lineto
+236.121992 48.888193 lineto
+233.437444 48.888193 lineto
+230.752896 48.888193 lineto
+228.068348 48.888193 lineto
+225.383800 48.888193 lineto
+222.699252 48.888193 lineto
+220.014704 48.888193 lineto
+217.330156 48.888193 lineto
+214.645608 48.888193 lineto
+211.961060 48.888193 lineto
+209.276512 48.888193 lineto
+206.591964 48.888193 lineto
+203.907416 48.888193 lineto
+201.222868 48.888193 lineto
+198.538320 48.888193 lineto
+195.853772 48.888193 lineto
+193.169224 48.888193 lineto
+190.484675 48.888193 lineto
+187.800127 48.888193 lineto
+183.758231 48.198674 lineto
+181.073683 47.705426 lineto
+179.060272 47.287578 lineto
+176.375724 46.878326 lineto
+173.691176 46.352018 lineto
+171.006628 45.689052 lineto
+168.322080 45.096142 lineto
+165.637532 44.526371 lineto
+162.952984 43.941817 lineto
+160.268436 43.391086 lineto
+157.583888 42.804925 lineto
+154.899340 42.177107 lineto
+152.214792 41.528723 lineto
+149.530244 40.910787 lineto
+146.845696 40.493260 lineto
+144.161148 40.092484 lineto
+141.476600 39.521346 lineto
+138.792052 39.099441 lineto
+136.107504 38.624751 lineto
+133.422956 38.065986 lineto
+130.738408 37.426962 lineto
+128.053860 36.777212 lineto
+125.369312 36.157709 lineto
+122.684764 35.637869 lineto
+120.000216 34.947828 lineto
+117.315668 34.033036 lineto
+114.631120 33.239839 lineto
+110.939866 32.504206 lineto
+108.255318 31.987780 lineto
+105.570770 31.583107 lineto
+102.886222 31.055634 lineto
+100.201674 30.461238 lineto
+97.517126 29.861018 lineto
+94.832578 29.359013 lineto
+92.148030 28.714927 lineto
+89.463482 28.142303 lineto
+86.778934 27.648815 lineto
+84.094386 27.016779 lineto
+81.409838 26.338589 lineto
+78.221937 25.644732 lineto
+75.537389 25.183138 lineto
+72.852841 24.832976 lineto
+70.168293 24.240669 lineto
+67.483745 23.796429 lineto
+64.799197 23.407503 lineto
+61.862973 22.760605 lineto
+59.178425 22.220920 lineto
+56.493877 21.563980 lineto
+55.025764 21.226752 lineto
+52.341216 20.663328 lineto
+50.264886 20.245519 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+0.000000 1.000000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 20.245519 lineto
+52.341216 20.663328 lineto
+55.025764 21.226752 lineto
+56.493877 21.563980 lineto
+59.178425 22.220920 lineto
+61.862973 22.760605 lineto
+64.799197 23.407503 lineto
+67.483745 23.796429 lineto
+70.168293 24.240669 lineto
+72.852841 24.832976 lineto
+75.537389 25.183138 lineto
+78.221937 25.644732 lineto
+81.409838 26.338589 lineto
+84.094386 27.016779 lineto
+86.778934 27.648815 lineto
+89.463482 28.142303 lineto
+92.148030 28.714927 lineto
+94.832578 29.359013 lineto
+97.517126 29.861018 lineto
+100.201674 30.461238 lineto
+102.886222 31.055634 lineto
+105.570770 31.583107 lineto
+108.255318 31.987780 lineto
+110.939866 32.504206 lineto
+114.631120 33.239839 lineto
+117.315668 34.033036 lineto
+120.000216 34.947828 lineto
+122.684764 35.637869 lineto
+125.369312 36.157709 lineto
+128.053860 36.777212 lineto
+130.738408 37.426962 lineto
+133.422956 38.065986 lineto
+136.107504 38.624751 lineto
+138.792052 39.099441 lineto
+141.476600 39.521346 lineto
+144.161148 40.092484 lineto
+146.845696 40.493260 lineto
+149.530244 40.910787 lineto
+152.214792 41.528723 lineto
+154.899340 42.177107 lineto
+157.583888 42.804925 lineto
+160.268436 43.391086 lineto
+162.952984 43.941817 lineto
+165.637532 44.526371 lineto
+168.322080 45.096142 lineto
+171.006628 45.689052 lineto
+173.691176 46.352018 lineto
+176.375724 46.878326 lineto
+179.060272 47.287578 lineto
+181.073683 47.705426 lineto
+183.758231 48.198674 lineto
+187.800127 48.888193 lineto
+190.484675 48.888193 lineto
+193.169224 48.888193 lineto
+195.853772 48.888193 lineto
+198.538320 48.888193 lineto
+201.222868 48.888193 lineto
+203.907416 48.888193 lineto
+206.591964 48.888193 lineto
+209.276512 48.888193 lineto
+211.961060 48.888193 lineto
+214.645608 48.888193 lineto
+217.330156 48.888193 lineto
+220.014704 48.888193 lineto
+222.699252 48.888193 lineto
+225.383800 48.888193 lineto
+228.068348 48.888193 lineto
+230.752896 48.888193 lineto
+233.437444 48.888193 lineto
+236.121992 48.888193 lineto
+238.806540 48.888193 lineto
+241.491088 48.888193 lineto
+244.175636 48.888193 lineto
+246.860184 48.888193 lineto
+249.544732 48.888193 lineto
+252.229280 48.888193 lineto
+254.913828 48.888193 lineto
+257.598376 48.888193 lineto
+260.282924 48.888193 lineto
+262.967472 48.888193 lineto
+265.653331 48.888193 lineto
+268.337879 48.888193 lineto
+271.022427 48.888193 lineto
+273.706975 48.888193 lineto
+276.391523 48.888193 lineto
+279.076071 48.888193 lineto
+281.760619 48.888193 lineto
+284.445167 48.888193 lineto
+287.129715 48.888193 lineto
+289.814263 48.888193 lineto
+292.498811 48.888193 lineto
+295.183359 48.888193 lineto
+297.867907 48.888193 lineto
+300.552455 48.888193 lineto
+303.237003 48.888193 lineto
+305.921551 48.888193 lineto
+308.606099 48.888193 lineto
+311.290647 48.888193 lineto
+313.975195 48.888193 lineto
+316.659743 48.888193 lineto
+319.344291 48.888193 lineto
+322.028839 48.888193 lineto
+324.713387 48.888193 lineto
+327.397935 48.888193 lineto
+330.082483 48.888193 lineto
+332.767031 48.888193 lineto
+335.451579 48.888193 lineto
+338.136127 48.888193 lineto
+340.820675 48.888193 lineto
+343.505223 48.888193 lineto
+346.189771 48.888193 lineto
+348.874319 48.888193 lineto
+351.558867 48.888193 lineto
+354.243415 48.888193 lineto
+356.927963 48.888193 lineto
+359.612511 48.888193 lineto
+362.297059 48.888193 lineto
+364.981607 48.888193 lineto
+367.666155 48.888193 lineto
+370.350704 48.888193 lineto
+373.035252 48.888193 lineto
+375.719800 48.888193 lineto
+378.404348 48.888193 lineto
+381.088896 48.888193 lineto
+383.773444 48.888193 lineto
+386.457992 48.888193 lineto
+389.142540 48.888193 lineto
+391.827088 48.888193 lineto
+394.511636 48.888193 lineto
+397.196184 48.888193 lineto
+399.880732 48.888193 lineto
+402.565280 48.888193 lineto
+405.249828 48.888193 lineto
+407.934376 48.888193 lineto
+410.618924 48.888193 lineto
+413.303472 48.888193 lineto
+415.988020 48.888193 lineto
+418.672568 48.888193 lineto
+421.357116 48.888193 lineto
+424.041664 48.888193 lineto
+426.726212 48.888193 lineto
+429.410760 48.888193 lineto
+432.095308 48.888193 lineto
+434.779856 48.888193 lineto
+437.464404 48.888193 lineto
+440.148952 48.888193 lineto
+442.833500 48.888193 lineto
+445.518048 48.888193 lineto
+448.202596 48.888193 lineto
+450.887144 48.888193 lineto
+453.571692 48.888193 lineto
+456.256240 48.888193 lineto
+458.940788 48.888193 lineto
+461.625336 48.888193 lineto
+464.309884 48.888193 lineto
+466.994432 48.888193 lineto
+469.678980 48.888193 lineto
+472.363528 48.888193 lineto
+475.354807 48.888193 lineto
+478.039355 30.129876 lineto
+478.039355 36.290833 lineto
+478.039355 36.290833 lineto
+475.354807 65.051486 lineto
+472.363528 65.051486 lineto
+469.678980 65.051486 lineto
+466.994432 65.051486 lineto
+464.309884 65.051486 lineto
+461.625336 65.051486 lineto
+458.940788 65.051486 lineto
+456.256240 65.051486 lineto
+453.571692 65.051486 lineto
+450.887144 65.051486 lineto
+448.202596 65.051486 lineto
+445.518048 65.051486 lineto
+442.833500 65.051486 lineto
+440.148952 65.051486 lineto
+437.464404 65.051486 lineto
+434.779856 65.051486 lineto
+432.095308 65.051486 lineto
+429.410760 65.051486 lineto
+426.726212 65.051486 lineto
+424.041664 65.051486 lineto
+421.357116 65.051486 lineto
+418.672568 65.051486 lineto
+415.988020 65.051486 lineto
+413.303472 65.051486 lineto
+410.618924 65.051486 lineto
+407.934376 65.051486 lineto
+405.249828 65.051486 lineto
+402.565280 65.051486 lineto
+399.880732 65.051486 lineto
+397.196184 65.051486 lineto
+394.511636 65.051486 lineto
+391.827088 65.051486 lineto
+389.142540 65.051486 lineto
+386.457992 65.051486 lineto
+383.773444 65.051486 lineto
+381.088896 65.051486 lineto
+378.404348 65.051486 lineto
+375.719800 65.051486 lineto
+373.035252 65.051486 lineto
+370.350704 65.051486 lineto
+367.666155 65.051486 lineto
+364.981607 65.051486 lineto
+362.297059 65.051486 lineto
+359.612511 65.051486 lineto
+356.927963 65.051486 lineto
+354.243415 65.051486 lineto
+351.558867 65.051486 lineto
+348.874319 65.051486 lineto
+346.189771 65.051486 lineto
+343.505223 65.051486 lineto
+340.820675 65.051486 lineto
+338.136127 65.051486 lineto
+335.451579 65.051486 lineto
+332.767031 65.051486 lineto
+330.082483 65.051486 lineto
+327.397935 65.051486 lineto
+324.713387 65.051486 lineto
+322.028839 65.051486 lineto
+319.344291 65.051486 lineto
+316.659743 65.051486 lineto
+313.975195 65.051486 lineto
+311.290647 65.051486 lineto
+308.606099 65.051486 lineto
+305.921551 65.051486 lineto
+303.237003 65.051486 lineto
+300.552455 65.051486 lineto
+297.867907 65.051486 lineto
+295.183359 65.051486 lineto
+292.498811 65.051486 lineto
+289.814263 65.051486 lineto
+287.129715 65.051486 lineto
+284.445167 65.051486 lineto
+281.760619 65.051486 lineto
+279.076071 65.051486 lineto
+276.391523 65.051486 lineto
+273.706975 65.051486 lineto
+271.022427 65.051486 lineto
+268.337879 65.051486 lineto
+265.653331 65.051486 lineto
+262.967472 65.051486 lineto
+260.282924 65.051486 lineto
+257.598376 65.051486 lineto
+254.913828 65.051486 lineto
+252.229280 65.051486 lineto
+249.544732 65.051486 lineto
+246.860184 65.051486 lineto
+244.175636 65.051486 lineto
+241.491088 65.051486 lineto
+238.806540 65.051486 lineto
+236.121992 65.051486 lineto
+233.437444 65.051486 lineto
+230.752896 65.051486 lineto
+228.068348 65.051486 lineto
+225.383800 65.051486 lineto
+222.699252 65.051486 lineto
+220.014704 65.051486 lineto
+217.330156 65.051486 lineto
+214.645608 65.051486 lineto
+211.961060 65.051486 lineto
+209.276512 65.051486 lineto
+206.591964 65.051486 lineto
+203.907416 65.051486 lineto
+201.222868 65.051486 lineto
+198.538320 65.051486 lineto
+195.853772 65.051486 lineto
+193.169224 65.051486 lineto
+190.484675 65.051486 lineto
+187.800127 65.051486 lineto
+183.758231 63.985494 lineto
+181.073683 63.224874 lineto
+179.060272 62.586573 lineto
+176.375724 61.964901 lineto
+173.691176 61.158207 lineto
+171.006628 60.108002 lineto
+168.322080 59.185698 lineto
+165.637532 58.204425 lineto
+162.952984 57.244200 lineto
+160.268436 56.405370 lineto
+157.583888 55.450448 lineto
+154.899340 54.496772 lineto
+152.214792 53.507424 lineto
+149.530244 52.558006 lineto
+146.845696 51.846434 lineto
+144.161148 51.221187 lineto
+141.476600 50.353434 lineto
+138.792052 49.709469 lineto
+136.107504 48.985404 lineto
+133.422956 48.126328 lineto
+130.738408 47.153249 lineto
+128.053860 46.177319 lineto
+125.369312 45.210265 lineto
+122.684764 44.405700 lineto
+120.000216 43.351719 lineto
+117.315668 41.963885 lineto
+114.631120 40.752919 lineto
+110.939866 39.627636 lineto
+108.255318 38.830502 lineto
+105.570770 38.211322 lineto
+102.886222 37.398320 lineto
+100.201674 36.454767 lineto
+97.517126 35.522581 lineto
+94.832578 34.682345 lineto
+92.148030 33.600405 lineto
+89.463482 32.702244 lineto
+86.778934 31.918567 lineto
+84.094386 30.907487 lineto
+81.409838 29.867606 lineto
+78.221937 28.802257 lineto
+75.537389 27.985238 lineto
+72.852841 27.447402 lineto
+70.168293 26.516703 lineto
+67.483745 25.834817 lineto
+64.799197 25.243915 lineto
+61.862973 24.248502 lineto
+59.178425 23.420879 lineto
+56.493877 22.425064 lineto
+55.025764 21.904019 lineto
+52.341216 21.018913 lineto
+50.264886 20.377920 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+1.000000 0.000000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 20.377920 lineto
+52.341216 21.018913 lineto
+55.025764 21.904019 lineto
+56.493877 22.425064 lineto
+59.178425 23.420879 lineto
+61.862973 24.248502 lineto
+64.799197 25.243915 lineto
+67.483745 25.834817 lineto
+70.168293 26.516703 lineto
+72.852841 27.447402 lineto
+75.537389 27.985238 lineto
+78.221937 28.802257 lineto
+81.409838 29.867606 lineto
+84.094386 30.907487 lineto
+86.778934 31.918567 lineto
+89.463482 32.702244 lineto
+92.148030 33.600405 lineto
+94.832578 34.682345 lineto
+97.517126 35.522581 lineto
+100.201674 36.454767 lineto
+102.886222 37.398320 lineto
+105.570770 38.211322 lineto
+108.255318 38.830502 lineto
+110.939866 39.627636 lineto
+114.631120 40.752919 lineto
+117.315668 41.963885 lineto
+120.000216 43.351719 lineto
+122.684764 44.405700 lineto
+125.369312 45.210265 lineto
+128.053860 46.177319 lineto
+130.738408 47.153249 lineto
+133.422956 48.126328 lineto
+136.107504 48.985404 lineto
+138.792052 49.709469 lineto
+141.476600 50.353434 lineto
+144.161148 51.221187 lineto
+146.845696 51.846434 lineto
+149.530244 52.558006 lineto
+152.214792 53.507424 lineto
+154.899340 54.496772 lineto
+157.583888 55.450448 lineto
+160.268436 56.405370 lineto
+162.952984 57.244200 lineto
+165.637532 58.204425 lineto
+168.322080 59.185698 lineto
+171.006628 60.108002 lineto
+173.691176 61.158207 lineto
+176.375724 61.964901 lineto
+179.060272 62.586573 lineto
+181.073683 63.224874 lineto
+183.758231 63.985494 lineto
+187.800127 65.051486 lineto
+190.484675 65.051486 lineto
+193.169224 65.051486 lineto
+195.853772 65.051486 lineto
+198.538320 65.051486 lineto
+201.222868 65.051486 lineto
+203.907416 65.051486 lineto
+206.591964 65.051486 lineto
+209.276512 65.051486 lineto
+211.961060 65.051486 lineto
+214.645608 65.051486 lineto
+217.330156 65.051486 lineto
+220.014704 65.051486 lineto
+222.699252 65.051486 lineto
+225.383800 65.051486 lineto
+228.068348 65.051486 lineto
+230.752896 65.051486 lineto
+233.437444 65.051486 lineto
+236.121992 65.051486 lineto
+238.806540 65.051486 lineto
+241.491088 65.051486 lineto
+244.175636 65.051486 lineto
+246.860184 65.051486 lineto
+249.544732 65.051486 lineto
+252.229280 65.051486 lineto
+254.913828 65.051486 lineto
+257.598376 65.051486 lineto
+260.282924 65.051486 lineto
+262.967472 65.051486 lineto
+265.653331 65.051486 lineto
+268.337879 65.051486 lineto
+271.022427 65.051486 lineto
+273.706975 65.051486 lineto
+276.391523 65.051486 lineto
+279.076071 65.051486 lineto
+281.760619 65.051486 lineto
+284.445167 65.051486 lineto
+287.129715 65.051486 lineto
+289.814263 65.051486 lineto
+292.498811 65.051486 lineto
+295.183359 65.051486 lineto
+297.867907 65.051486 lineto
+300.552455 65.051486 lineto
+303.237003 65.051486 lineto
+305.921551 65.051486 lineto
+308.606099 65.051486 lineto
+311.290647 65.051486 lineto
+313.975195 65.051486 lineto
+316.659743 65.051486 lineto
+319.344291 65.051486 lineto
+322.028839 65.051486 lineto
+324.713387 65.051486 lineto
+327.397935 65.051486 lineto
+330.082483 65.051486 lineto
+332.767031 65.051486 lineto
+335.451579 65.051486 lineto
+338.136127 65.051486 lineto
+340.820675 65.051486 lineto
+343.505223 65.051486 lineto
+346.189771 65.051486 lineto
+348.874319 65.051486 lineto
+351.558867 65.051486 lineto
+354.243415 65.051486 lineto
+356.927963 65.051486 lineto
+359.612511 65.051486 lineto
+362.297059 65.051486 lineto
+364.981607 65.051486 lineto
+367.666155 65.051486 lineto
+370.350704 65.051486 lineto
+373.035252 65.051486 lineto
+375.719800 65.051486 lineto
+378.404348 65.051486 lineto
+381.088896 65.051486 lineto
+383.773444 65.051486 lineto
+386.457992 65.051486 lineto
+389.142540 65.051486 lineto
+391.827088 65.051486 lineto
+394.511636 65.051486 lineto
+397.196184 65.051486 lineto
+399.880732 65.051486 lineto
+402.565280 65.051486 lineto
+405.249828 65.051486 lineto
+407.934376 65.051486 lineto
+410.618924 65.051486 lineto
+413.303472 65.051486 lineto
+415.988020 65.051486 lineto
+418.672568 65.051486 lineto
+421.357116 65.051486 lineto
+424.041664 65.051486 lineto
+426.726212 65.051486 lineto
+429.410760 65.051486 lineto
+432.095308 65.051486 lineto
+434.779856 65.051486 lineto
+437.464404 65.051486 lineto
+440.148952 65.051486 lineto
+442.833500 65.051486 lineto
+445.518048 65.051486 lineto
+448.202596 65.051486 lineto
+450.887144 65.051486 lineto
+453.571692 65.051486 lineto
+456.256240 65.051486 lineto
+458.940788 65.051486 lineto
+461.625336 65.051486 lineto
+464.309884 65.051486 lineto
+466.994432 65.051486 lineto
+469.678980 65.051486 lineto
+472.363528 65.051486 lineto
+475.354807 65.051486 lineto
+478.039355 36.290833 lineto
+478.039355 36.290833 lineto
+478.039355 36.290833 lineto
+475.354807 89.167660 lineto
+472.363528 89.159787 lineto
+469.678980 89.173766 lineto
+466.994432 89.161072 lineto
+464.309884 89.174087 lineto
+461.625336 89.161233 lineto
+458.940788 89.161675 lineto
+456.256240 89.159787 lineto
+453.571692 89.159787 lineto
+450.887144 89.174479 lineto
+448.202596 89.161655 lineto
+445.518048 89.159787 lineto
+442.833500 89.159787 lineto
+440.148952 89.159787 lineto
+437.464404 89.159787 lineto
+434.779856 89.171878 lineto
+432.095308 89.161072 lineto
+429.410760 89.171878 lineto
+426.726212 89.161072 lineto
+424.041664 89.161233 lineto
+421.357116 89.160108 lineto
+418.672568 89.159787 lineto
+415.988020 89.161675 lineto
+413.303472 89.159787 lineto
+410.618924 89.159787 lineto
+407.934376 89.161675 lineto
+405.249828 89.173766 lineto
+402.565280 89.160912 lineto
+399.880732 89.159787 lineto
+397.196184 89.173766 lineto
+394.511636 89.163894 lineto
+391.827088 89.164929 lineto
+389.142540 89.163563 lineto
+386.457992 89.160108 lineto
+383.773444 89.161333 lineto
+381.088896 89.173766 lineto
+378.404348 89.161233 lineto
+375.719800 89.161263 lineto
+373.035252 89.174128 lineto
+370.350704 89.160118 lineto
+367.666155 89.173766 lineto
+364.981607 89.173766 lineto
+362.297059 89.159787 lineto
+359.612511 89.161635 lineto
+356.927963 89.159787 lineto
+354.243415 89.173766 lineto
+351.558867 89.160108 lineto
+348.874319 89.164316 lineto
+346.189771 89.159787 lineto
+343.505223 89.160912 lineto
+340.820675 89.160108 lineto
+338.136127 89.159787 lineto
+335.451579 89.163914 lineto
+332.767031 89.160108 lineto
+330.082483 89.171878 lineto
+327.397935 89.159787 lineto
+324.713387 89.163563 lineto
+322.028839 89.162800 lineto
+319.344291 89.174650 lineto
+316.659743 89.161675 lineto
+313.975195 89.161836 lineto
+311.290647 89.159787 lineto
+308.606099 89.160912 lineto
+305.921551 89.161072 lineto
+303.237003 89.159787 lineto
+300.552455 89.159787 lineto
+297.867907 89.173766 lineto
+295.183359 89.163563 lineto
+292.498811 89.173766 lineto
+289.814263 89.173766 lineto
+287.129715 89.161072 lineto
+284.445167 89.171878 lineto
+281.760619 89.159787 lineto
+279.076071 89.159787 lineto
+276.391523 89.159787 lineto
+273.706975 89.161072 lineto
+271.022427 89.161675 lineto
+268.337879 89.163563 lineto
+265.653331 89.163563 lineto
+262.967472 89.161072 lineto
+260.282924 89.159787 lineto
+257.598376 89.173766 lineto
+254.913828 89.160912 lineto
+252.229280 89.160912 lineto
+249.544732 89.159787 lineto
+246.860184 89.173766 lineto
+244.175636 89.161675 lineto
+241.491088 89.159787 lineto
+238.806540 89.161675 lineto
+236.121992 89.159787 lineto
+233.437444 89.163563 lineto
+230.752896 89.161072 lineto
+228.068348 89.159787 lineto
+225.383800 89.161072 lineto
+222.699252 89.159787 lineto
+220.014704 89.159787 lineto
+217.330156 89.161675 lineto
+214.645608 87.944081 lineto
+211.961060 85.746460 lineto
+209.276512 83.642354 lineto
+206.591964 81.423643 lineto
+203.907416 79.284067 lineto
+201.222868 77.126695 lineto
+198.538320 74.904249 lineto
+195.853772 65.051486 lineto
+193.169224 65.051486 lineto
+190.484675 65.051486 lineto
+187.800127 65.051486 lineto
+183.758231 63.985494 lineto
+181.073683 63.224874 lineto
+179.060272 62.586573 lineto
+176.375724 61.964901 lineto
+173.691176 61.158207 lineto
+171.006628 60.108002 lineto
+168.322080 59.185698 lineto
+165.637532 58.204425 lineto
+162.952984 57.244200 lineto
+160.268436 56.405370 lineto
+157.583888 55.450448 lineto
+154.899340 54.496772 lineto
+152.214792 53.507424 lineto
+149.530244 52.558006 lineto
+146.845696 51.846434 lineto
+144.161148 51.221187 lineto
+141.476600 50.353434 lineto
+138.792052 49.709469 lineto
+136.107504 48.985404 lineto
+133.422956 48.126328 lineto
+130.738408 47.153249 lineto
+128.053860 46.177319 lineto
+125.369312 45.210265 lineto
+122.684764 44.405700 lineto
+120.000216 43.351719 lineto
+117.315668 41.963885 lineto
+114.631120 40.752919 lineto
+110.939866 39.627636 lineto
+108.255318 38.830502 lineto
+105.570770 38.211322 lineto
+102.886222 37.398320 lineto
+100.201674 36.454767 lineto
+97.517126 35.522581 lineto
+94.832578 34.682345 lineto
+92.148030 33.600405 lineto
+89.463482 32.702244 lineto
+86.778934 31.918567 lineto
+84.094386 30.907487 lineto
+81.409838 29.867606 lineto
+78.221937 28.802257 lineto
+75.537389 27.985238 lineto
+72.852841 27.447402 lineto
+70.168293 26.516703 lineto
+67.483745 25.834817 lineto
+64.799197 25.243915 lineto
+61.862973 24.248502 lineto
+59.178425 23.420879 lineto
+56.493877 22.425064 lineto
+55.025764 21.904019 lineto
+52.341216 21.018913 lineto
+50.264886 20.377920 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+1.000000 0.000000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 20.377920 lineto
+52.341216 21.018913 lineto
+55.025764 21.904019 lineto
+56.493877 22.425064 lineto
+59.178425 23.420879 lineto
+61.862973 24.248502 lineto
+64.799197 25.243915 lineto
+67.483745 25.834817 lineto
+70.168293 26.516703 lineto
+72.852841 27.447402 lineto
+75.537389 27.985238 lineto
+78.221937 28.802257 lineto
+81.409838 29.867606 lineto
+84.094386 30.907487 lineto
+86.778934 31.918567 lineto
+89.463482 32.702244 lineto
+92.148030 33.600405 lineto
+94.832578 34.682345 lineto
+97.517126 35.522581 lineto
+100.201674 36.454767 lineto
+102.886222 37.398320 lineto
+105.570770 38.211322 lineto
+108.255318 38.830502 lineto
+110.939866 39.627636 lineto
+114.631120 40.752919 lineto
+117.315668 41.963885 lineto
+120.000216 43.351719 lineto
+122.684764 44.405700 lineto
+125.369312 45.210265 lineto
+128.053860 46.177319 lineto
+130.738408 47.153249 lineto
+133.422956 48.126328 lineto
+136.107504 48.985404 lineto
+138.792052 49.709469 lineto
+141.476600 50.353434 lineto
+144.161148 51.221187 lineto
+146.845696 51.846434 lineto
+149.530244 52.558006 lineto
+152.214792 53.507424 lineto
+154.899340 54.496772 lineto
+157.583888 55.450448 lineto
+160.268436 56.405370 lineto
+162.952984 57.244200 lineto
+165.637532 58.204425 lineto
+168.322080 59.185698 lineto
+171.006628 60.108002 lineto
+173.691176 61.158207 lineto
+176.375724 61.964901 lineto
+179.060272 62.586573 lineto
+181.073683 63.224874 lineto
+183.758231 63.985494 lineto
+187.800127 65.051486 lineto
+190.484675 65.051486 lineto
+193.169224 65.051486 lineto
+195.853772 65.051486 lineto
+198.538320 74.904249 lineto
+201.222868 77.126695 lineto
+203.907416 79.284067 lineto
+206.591964 81.423643 lineto
+209.276512 83.642354 lineto
+211.961060 85.746460 lineto
+214.645608 87.944081 lineto
+217.330156 89.161675 lineto
+220.014704 89.159787 lineto
+222.699252 89.159787 lineto
+225.383800 89.161072 lineto
+228.068348 89.159787 lineto
+230.752896 89.161072 lineto
+233.437444 89.163563 lineto
+236.121992 89.159787 lineto
+238.806540 89.161675 lineto
+241.491088 89.159787 lineto
+244.175636 89.161675 lineto
+246.860184 89.173766 lineto
+249.544732 89.159787 lineto
+252.229280 89.160912 lineto
+254.913828 89.160912 lineto
+257.598376 89.173766 lineto
+260.282924 89.159787 lineto
+262.967472 89.161072 lineto
+265.653331 89.163563 lineto
+268.337879 89.163563 lineto
+271.022427 89.161675 lineto
+273.706975 89.161072 lineto
+276.391523 89.159787 lineto
+279.076071 89.159787 lineto
+281.760619 89.159787 lineto
+284.445167 89.171878 lineto
+287.129715 89.161072 lineto
+289.814263 89.173766 lineto
+292.498811 89.173766 lineto
+295.183359 89.163563 lineto
+297.867907 89.173766 lineto
+300.552455 89.159787 lineto
+303.237003 89.159787 lineto
+305.921551 89.161072 lineto
+308.606099 89.160912 lineto
+311.290647 89.159787 lineto
+313.975195 89.161836 lineto
+316.659743 89.161675 lineto
+319.344291 89.174650 lineto
+322.028839 89.162800 lineto
+324.713387 89.163563 lineto
+327.397935 89.159787 lineto
+330.082483 89.171878 lineto
+332.767031 89.160108 lineto
+335.451579 89.163914 lineto
+338.136127 89.159787 lineto
+340.820675 89.160108 lineto
+343.505223 89.160912 lineto
+346.189771 89.159787 lineto
+348.874319 89.164316 lineto
+351.558867 89.160108 lineto
+354.243415 89.173766 lineto
+356.927963 89.159787 lineto
+359.612511 89.161635 lineto
+362.297059 89.159787 lineto
+364.981607 89.173766 lineto
+367.666155 89.173766 lineto
+370.350704 89.160118 lineto
+373.035252 89.174128 lineto
+375.719800 89.161263 lineto
+378.404348 89.161233 lineto
+381.088896 89.173766 lineto
+383.773444 89.161333 lineto
+386.457992 89.160108 lineto
+389.142540 89.163563 lineto
+391.827088 89.164929 lineto
+394.511636 89.163894 lineto
+397.196184 89.173766 lineto
+399.880732 89.159787 lineto
+402.565280 89.160912 lineto
+405.249828 89.173766 lineto
+407.934376 89.161675 lineto
+410.618924 89.159787 lineto
+413.303472 89.159787 lineto
+415.988020 89.161675 lineto
+418.672568 89.159787 lineto
+421.357116 89.160108 lineto
+424.041664 89.161233 lineto
+426.726212 89.161072 lineto
+429.410760 89.171878 lineto
+432.095308 89.161072 lineto
+434.779856 89.171878 lineto
+437.464404 89.159787 lineto
+440.148952 89.159787 lineto
+442.833500 89.159787 lineto
+445.518048 89.159787 lineto
+448.202596 89.161655 lineto
+450.887144 89.174479 lineto
+453.571692 89.159787 lineto
+456.256240 89.159787 lineto
+458.940788 89.161675 lineto
+461.625336 89.161233 lineto
+464.309884 89.174087 lineto
+466.994432 89.161072 lineto
+469.678980 89.173766 lineto
+472.363528 89.159787 lineto
+475.354807 89.167660 lineto
+478.039355 36.290833 lineto
+478.039355 45.395489 lineto
+478.039355 45.395489 lineto
+475.354807 113.031708 lineto
+472.363528 113.023834 lineto
+469.678980 113.037814 lineto
+466.994432 113.025120 lineto
+464.309884 113.038135 lineto
+461.625336 113.025280 lineto
+458.940788 113.025722 lineto
+456.256240 113.023834 lineto
+453.571692 113.023834 lineto
+450.887144 113.038527 lineto
+448.202596 113.025702 lineto
+445.518048 113.023834 lineto
+442.833500 113.023834 lineto
+440.148952 113.023834 lineto
+437.464404 113.023834 lineto
+434.779856 113.035926 lineto
+432.095308 113.025120 lineto
+429.410760 113.035926 lineto
+426.726212 113.025120 lineto
+424.041664 113.025280 lineto
+421.357116 113.024156 lineto
+418.672568 113.023834 lineto
+415.988020 113.025722 lineto
+413.303472 113.023834 lineto
+410.618924 113.023834 lineto
+407.934376 113.025722 lineto
+405.249828 113.037814 lineto
+402.565280 113.024959 lineto
+399.880732 113.023834 lineto
+397.196184 113.037814 lineto
+394.511636 113.027942 lineto
+391.827088 113.028976 lineto
+389.142540 113.027610 lineto
+386.457992 113.024156 lineto
+383.773444 113.025381 lineto
+381.088896 113.037814 lineto
+378.404348 113.025280 lineto
+375.719800 113.025311 lineto
+373.035252 113.038175 lineto
+370.350704 113.024166 lineto
+367.666155 113.037814 lineto
+364.981607 113.037814 lineto
+362.297059 113.023834 lineto
+359.612511 113.025682 lineto
+356.927963 113.023834 lineto
+354.243415 113.037814 lineto
+351.558867 113.024156 lineto
+348.874319 113.028364 lineto
+346.189771 113.023834 lineto
+343.505223 113.024959 lineto
+340.820675 113.024156 lineto
+338.136127 113.023834 lineto
+335.451579 113.027962 lineto
+332.767031 113.024156 lineto
+330.082483 113.035926 lineto
+327.397935 113.023834 lineto
+324.713387 113.027610 lineto
+322.028839 113.026847 lineto
+319.344291 113.038697 lineto
+316.659743 113.025722 lineto
+313.975195 113.025883 lineto
+311.290647 113.023834 lineto
+308.606099 113.024959 lineto
+305.921551 113.025120 lineto
+303.237003 113.023834 lineto
+300.552455 113.023834 lineto
+297.867907 113.037814 lineto
+295.183359 113.027610 lineto
+292.498811 113.037814 lineto
+289.814263 113.037814 lineto
+287.129715 113.025120 lineto
+284.445167 113.035926 lineto
+281.760619 113.023834 lineto
+279.076071 113.023834 lineto
+276.391523 113.023834 lineto
+273.706975 113.025120 lineto
+271.022427 113.025722 lineto
+268.337879 113.027610 lineto
+265.653331 113.027610 lineto
+262.967472 113.025120 lineto
+260.282924 113.023834 lineto
+257.598376 113.037814 lineto
+254.913828 113.024959 lineto
+252.229280 113.024959 lineto
+249.544732 113.023834 lineto
+246.860184 113.037814 lineto
+244.175636 113.025722 lineto
+241.491088 113.023834 lineto
+238.806540 113.025722 lineto
+236.121992 113.023834 lineto
+233.437444 113.027610 lineto
+230.752896 113.025120 lineto
+228.068348 113.023834 lineto
+225.383800 113.025120 lineto
+222.699252 113.023834 lineto
+220.014704 113.023834 lineto
+217.330156 113.025722 lineto
+214.645608 111.808129 lineto
+211.961060 109.610507 lineto
+209.276512 107.506401 lineto
+206.591964 105.287690 lineto
+203.907416 103.148114 lineto
+201.222868 100.990743 lineto
+198.538320 98.768296 lineto
+195.853772 88.915533 lineto
+193.169224 88.915533 lineto
+190.484675 88.915533 lineto
+187.800127 88.915533 lineto
+183.758231 87.300377 lineto
+181.073683 86.152558 lineto
+179.060272 85.195106 lineto
+176.375724 84.267500 lineto
+173.691176 83.051392 lineto
+171.006628 81.425310 lineto
+168.322080 80.019640 lineto
+165.637532 78.395004 lineto
+162.952984 76.856934 lineto
+160.268436 75.600817 lineto
+157.583888 74.081828 lineto
+154.899340 72.656595 lineto
+152.214792 71.176290 lineto
+149.530244 69.748567 lineto
+146.845696 68.573312 lineto
+144.161148 67.615418 lineto
+141.476600 66.319694 lineto
+138.792052 65.352078 lineto
+136.107504 64.265559 lineto
+133.422956 62.968670 lineto
+130.738408 61.511663 lineto
+128.053860 60.065863 lineto
+125.369312 58.585076 lineto
+122.684764 57.363787 lineto
+120.000216 55.778918 lineto
+117.315668 53.710323 lineto
+114.631120 51.888612 lineto
+110.939866 50.203480 lineto
+108.255318 48.996933 lineto
+105.570770 48.066475 lineto
+102.886222 46.836750 lineto
+100.201674 45.368214 lineto
+97.517126 43.950413 lineto
+94.832578 42.590256 lineto
+92.148030 40.832335 lineto
+89.463482 39.446028 lineto
+86.778934 38.228193 lineto
+84.094386 36.639549 lineto
+81.409838 35.078622 lineto
+78.221937 33.476200 lineto
+75.537389 32.088647 lineto
+72.852841 31.277212 lineto
+70.168293 29.840371 lineto
+67.483745 28.812058 lineto
+64.799197 27.926751 lineto
+61.862973 26.424914 lineto
+59.178425 25.176912 lineto
+56.493877 23.690701 lineto
+55.025764 22.899995 lineto
+52.341216 21.537709 lineto
+50.264886 20.571941 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+1.000000 1.000000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 20.571941 lineto
+52.341216 21.537709 lineto
+55.025764 22.899995 lineto
+56.493877 23.690701 lineto
+59.178425 25.176912 lineto
+61.862973 26.424914 lineto
+64.799197 27.926751 lineto
+67.483745 28.812058 lineto
+70.168293 29.840371 lineto
+72.852841 31.277212 lineto
+75.537389 32.088647 lineto
+78.221937 33.476200 lineto
+81.409838 35.078622 lineto
+84.094386 36.639549 lineto
+86.778934 38.228193 lineto
+89.463482 39.446028 lineto
+92.148030 40.832335 lineto
+94.832578 42.590256 lineto
+97.517126 43.950413 lineto
+100.201674 45.368214 lineto
+102.886222 46.836750 lineto
+105.570770 48.066475 lineto
+108.255318 48.996933 lineto
+110.939866 50.203480 lineto
+114.631120 51.888612 lineto
+117.315668 53.710323 lineto
+120.000216 55.778918 lineto
+122.684764 57.363787 lineto
+125.369312 58.585076 lineto
+128.053860 60.065863 lineto
+130.738408 61.511663 lineto
+133.422956 62.968670 lineto
+136.107504 64.265559 lineto
+138.792052 65.352078 lineto
+141.476600 66.319694 lineto
+144.161148 67.615418 lineto
+146.845696 68.573312 lineto
+149.530244 69.748567 lineto
+152.214792 71.176290 lineto
+154.899340 72.656595 lineto
+157.583888 74.081828 lineto
+160.268436 75.600817 lineto
+162.952984 76.856934 lineto
+165.637532 78.395004 lineto
+168.322080 80.019640 lineto
+171.006628 81.425310 lineto
+173.691176 83.051392 lineto
+176.375724 84.267500 lineto
+179.060272 85.195106 lineto
+181.073683 86.152558 lineto
+183.758231 87.300377 lineto
+187.800127 88.915533 lineto
+190.484675 88.915533 lineto
+193.169224 88.915533 lineto
+195.853772 88.915533 lineto
+198.538320 98.768296 lineto
+201.222868 100.990743 lineto
+203.907416 103.148114 lineto
+206.591964 105.287690 lineto
+209.276512 107.506401 lineto
+211.961060 109.610507 lineto
+214.645608 111.808129 lineto
+217.330156 113.025722 lineto
+220.014704 113.023834 lineto
+222.699252 113.023834 lineto
+225.383800 113.025120 lineto
+228.068348 113.023834 lineto
+230.752896 113.025120 lineto
+233.437444 113.027610 lineto
+236.121992 113.023834 lineto
+238.806540 113.025722 lineto
+241.491088 113.023834 lineto
+244.175636 113.025722 lineto
+246.860184 113.037814 lineto
+249.544732 113.023834 lineto
+252.229280 113.024959 lineto
+254.913828 113.024959 lineto
+257.598376 113.037814 lineto
+260.282924 113.023834 lineto
+262.967472 113.025120 lineto
+265.653331 113.027610 lineto
+268.337879 113.027610 lineto
+271.022427 113.025722 lineto
+273.706975 113.025120 lineto
+276.391523 113.023834 lineto
+279.076071 113.023834 lineto
+281.760619 113.023834 lineto
+284.445167 113.035926 lineto
+287.129715 113.025120 lineto
+289.814263 113.037814 lineto
+292.498811 113.037814 lineto
+295.183359 113.027610 lineto
+297.867907 113.037814 lineto
+300.552455 113.023834 lineto
+303.237003 113.023834 lineto
+305.921551 113.025120 lineto
+308.606099 113.024959 lineto
+311.290647 113.023834 lineto
+313.975195 113.025883 lineto
+316.659743 113.025722 lineto
+319.344291 113.038697 lineto
+322.028839 113.026847 lineto
+324.713387 113.027610 lineto
+327.397935 113.023834 lineto
+330.082483 113.035926 lineto
+332.767031 113.024156 lineto
+335.451579 113.027962 lineto
+338.136127 113.023834 lineto
+340.820675 113.024156 lineto
+343.505223 113.024959 lineto
+346.189771 113.023834 lineto
+348.874319 113.028364 lineto
+351.558867 113.024156 lineto
+354.243415 113.037814 lineto
+356.927963 113.023834 lineto
+359.612511 113.025682 lineto
+362.297059 113.023834 lineto
+364.981607 113.037814 lineto
+367.666155 113.037814 lineto
+370.350704 113.024166 lineto
+373.035252 113.038175 lineto
+375.719800 113.025311 lineto
+378.404348 113.025280 lineto
+381.088896 113.037814 lineto
+383.773444 113.025381 lineto
+386.457992 113.024156 lineto
+389.142540 113.027610 lineto
+391.827088 113.028976 lineto
+394.511636 113.027942 lineto
+397.196184 113.037814 lineto
+399.880732 113.023834 lineto
+402.565280 113.024959 lineto
+405.249828 113.037814 lineto
+407.934376 113.025722 lineto
+410.618924 113.023834 lineto
+413.303472 113.023834 lineto
+415.988020 113.025722 lineto
+418.672568 113.023834 lineto
+421.357116 113.024156 lineto
+424.041664 113.025280 lineto
+426.726212 113.025120 lineto
+429.410760 113.035926 lineto
+432.095308 113.025120 lineto
+434.779856 113.035926 lineto
+437.464404 113.023834 lineto
+440.148952 113.023834 lineto
+442.833500 113.023834 lineto
+445.518048 113.023834 lineto
+448.202596 113.025702 lineto
+450.887144 113.038527 lineto
+453.571692 113.023834 lineto
+456.256240 113.023834 lineto
+458.940788 113.025722 lineto
+461.625336 113.025280 lineto
+464.309884 113.038135 lineto
+466.994432 113.025120 lineto
+469.678980 113.037814 lineto
+472.363528 113.023834 lineto
+475.354807 113.031708 lineto
+478.039355 45.395489 lineto
+478.039355 56.338447 lineto
+478.039355 56.338447 lineto
+475.354807 140.193071 lineto
+472.363528 140.185198 lineto
+469.678980 140.199177 lineto
+466.994432 140.186483 lineto
+464.309884 140.199499 lineto
+461.625336 140.186644 lineto
+458.940788 140.187086 lineto
+456.256240 140.185198 lineto
+453.571692 140.185198 lineto
+450.887144 140.199890 lineto
+448.202596 140.187066 lineto
+445.518048 140.185198 lineto
+442.833500 140.185198 lineto
+440.148952 140.185198 lineto
+437.464404 140.185198 lineto
+434.779856 140.197289 lineto
+432.095308 140.186483 lineto
+429.410760 140.197289 lineto
+426.726212 140.186483 lineto
+424.041664 140.186644 lineto
+421.357116 140.185519 lineto
+418.672568 140.185198 lineto
+415.988020 140.187086 lineto
+413.303472 140.185198 lineto
+410.618924 140.185198 lineto
+407.934376 140.187086 lineto
+405.249828 140.199177 lineto
+402.565280 140.186323 lineto
+399.880732 140.185198 lineto
+397.196184 140.199177 lineto
+394.511636 140.189305 lineto
+391.827088 140.190340 lineto
+389.142540 140.188974 lineto
+386.457992 140.185519 lineto
+383.773444 140.186745 lineto
+381.088896 140.199177 lineto
+378.404348 140.186644 lineto
+375.719800 140.186674 lineto
+373.035252 140.199539 lineto
+370.350704 140.185529 lineto
+367.666155 140.199177 lineto
+364.981607 140.199177 lineto
+362.297059 140.185198 lineto
+359.612511 140.187046 lineto
+356.927963 140.185198 lineto
+354.243415 140.199177 lineto
+351.558867 140.185519 lineto
+348.874319 140.189727 lineto
+346.189771 140.185198 lineto
+343.505223 140.186323 lineto
+340.820675 140.185519 lineto
+338.136127 140.185198 lineto
+335.451579 140.189325 lineto
+332.767031 140.185519 lineto
+330.082483 140.197289 lineto
+327.397935 140.185198 lineto
+324.713387 140.188974 lineto
+322.028839 140.188211 lineto
+319.344291 140.200061 lineto
+316.659743 140.187086 lineto
+313.975195 140.187247 lineto
+311.290647 140.185198 lineto
+308.606099 140.186323 lineto
+305.921551 140.186483 lineto
+303.237003 140.185198 lineto
+300.552455 140.185198 lineto
+297.867907 140.199177 lineto
+295.183359 140.188974 lineto
+292.498811 140.199177 lineto
+289.814263 140.199177 lineto
+287.129715 140.186483 lineto
+284.445167 140.197289 lineto
+281.760619 140.185198 lineto
+279.076071 140.185198 lineto
+276.391523 140.185198 lineto
+273.706975 140.186483 lineto
+271.022427 140.187086 lineto
+268.337879 140.188974 lineto
+265.653331 140.188974 lineto
+262.967472 140.186483 lineto
+260.282924 140.185198 lineto
+257.598376 140.199177 lineto
+254.913828 140.186323 lineto
+252.229280 140.186323 lineto
+249.544732 140.185198 lineto
+246.860184 140.199177 lineto
+244.175636 140.187086 lineto
+241.491088 140.185198 lineto
+238.806540 140.187086 lineto
+236.121992 140.185198 lineto
+233.437444 140.188974 lineto
+230.752896 140.186483 lineto
+228.068348 140.185198 lineto
+225.383800 140.186483 lineto
+222.699252 140.185198 lineto
+220.014704 140.185198 lineto
+217.330156 140.187086 lineto
+214.645608 138.969492 lineto
+211.961060 136.771871 lineto
+209.276512 134.667765 lineto
+206.591964 132.449054 lineto
+203.907416 130.309478 lineto
+201.222868 128.152107 lineto
+198.538320 125.929660 lineto
+195.853772 116.076897 lineto
+193.169224 116.076897 lineto
+190.484675 116.076897 lineto
+187.800127 116.076897 lineto
+183.758231 113.853727 lineto
+181.073683 112.122319 lineto
+179.060272 110.733119 lineto
+176.375724 109.089683 lineto
+173.691176 107.315533 lineto
+171.006628 105.262845 lineto
+168.322080 103.374171 lineto
+165.637532 101.327107 lineto
+162.952984 99.330938 lineto
+160.268436 97.535257 lineto
+157.583888 95.554634 lineto
+154.899340 93.655716 lineto
+152.214792 91.688390 lineto
+149.530244 89.752275 lineto
+146.845696 88.011105 lineto
+144.161148 86.354092 lineto
+141.476600 84.529890 lineto
+138.792052 82.863156 lineto
+136.107504 81.122669 lineto
+133.422956 79.300516 lineto
+130.738408 77.376091 lineto
+128.053860 75.478138 lineto
+125.369312 73.522058 lineto
+122.684764 71.707217 lineto
+120.000216 69.738805 lineto
+117.315668 67.438188 lineto
+114.631120 65.305079 lineto
+110.939866 62.796300 lineto
+108.255318 60.997487 lineto
+105.570770 59.369837 lineto
+102.886222 57.535313 lineto
+100.201674 55.607071 lineto
+97.517126 53.666417 lineto
+94.832578 51.774248 lineto
+92.148030 49.679703 lineto
+89.463482 47.763311 lineto
+86.778934 45.975545 lineto
+84.094386 43.944709 lineto
+81.409838 41.924076 lineto
+78.221937 39.710266 lineto
+75.537389 37.823641 lineto
+72.852841 36.329316 lineto
+70.168293 34.388099 lineto
+67.483745 32.720280 lineto
+64.799197 31.114323 lineto
+61.862973 29.051230 lineto
+59.178425 27.286481 lineto
+56.493877 25.313570 lineto
+55.025764 24.255492 lineto
+52.341216 22.419200 lineto
+50.264886 21.024255 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+1.000000 1.000000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 21.024255 lineto
+52.341216 22.419200 lineto
+55.025764 24.255492 lineto
+56.493877 25.313570 lineto
+59.178425 27.286481 lineto
+61.862973 29.051230 lineto
+64.799197 31.114323 lineto
+67.483745 32.720280 lineto
+70.168293 34.388099 lineto
+72.852841 36.329316 lineto
+75.537389 37.823641 lineto
+78.221937 39.710266 lineto
+81.409838 41.924076 lineto
+84.094386 43.944709 lineto
+86.778934 45.975545 lineto
+89.463482 47.763311 lineto
+92.148030 49.679703 lineto
+94.832578 51.774248 lineto
+97.517126 53.666417 lineto
+100.201674 55.607071 lineto
+102.886222 57.535313 lineto
+105.570770 59.369837 lineto
+108.255318 60.997487 lineto
+110.939866 62.796300 lineto
+114.631120 65.305079 lineto
+117.315668 67.438188 lineto
+120.000216 69.738805 lineto
+122.684764 71.707217 lineto
+125.369312 73.522058 lineto
+128.053860 75.478138 lineto
+130.738408 77.376091 lineto
+133.422956 79.300516 lineto
+136.107504 81.122669 lineto
+138.792052 82.863156 lineto
+141.476600 84.529890 lineto
+144.161148 86.354092 lineto
+146.845696 88.011105 lineto
+149.530244 89.752275 lineto
+152.214792 91.688390 lineto
+154.899340 93.655716 lineto
+157.583888 95.554634 lineto
+160.268436 97.535257 lineto
+162.952984 99.330938 lineto
+165.637532 101.327107 lineto
+168.322080 103.374171 lineto
+171.006628 105.262845 lineto
+173.691176 107.315533 lineto
+176.375724 109.089683 lineto
+179.060272 110.733119 lineto
+181.073683 112.122319 lineto
+183.758231 113.853727 lineto
+187.800127 116.076897 lineto
+190.484675 116.076897 lineto
+193.169224 116.076897 lineto
+195.853772 116.076897 lineto
+198.538320 125.929660 lineto
+201.222868 128.152107 lineto
+203.907416 130.309478 lineto
+206.591964 132.449054 lineto
+209.276512 134.667765 lineto
+211.961060 136.771871 lineto
+214.645608 138.969492 lineto
+217.330156 140.187086 lineto
+220.014704 140.185198 lineto
+222.699252 140.185198 lineto
+225.383800 140.186483 lineto
+228.068348 140.185198 lineto
+230.752896 140.186483 lineto
+233.437444 140.188974 lineto
+236.121992 140.185198 lineto
+238.806540 140.187086 lineto
+241.491088 140.185198 lineto
+244.175636 140.187086 lineto
+246.860184 140.199177 lineto
+249.544732 140.185198 lineto
+252.229280 140.186323 lineto
+254.913828 140.186323 lineto
+257.598376 140.199177 lineto
+260.282924 140.185198 lineto
+262.967472 140.186483 lineto
+265.653331 140.188974 lineto
+268.337879 140.188974 lineto
+271.022427 140.187086 lineto
+273.706975 140.186483 lineto
+276.391523 140.185198 lineto
+279.076071 140.185198 lineto
+281.760619 140.185198 lineto
+284.445167 140.197289 lineto
+287.129715 140.186483 lineto
+289.814263 140.199177 lineto
+292.498811 140.199177 lineto
+295.183359 140.188974 lineto
+297.867907 140.199177 lineto
+300.552455 140.185198 lineto
+303.237003 140.185198 lineto
+305.921551 140.186483 lineto
+308.606099 140.186323 lineto
+311.290647 140.185198 lineto
+313.975195 140.187247 lineto
+316.659743 140.187086 lineto
+319.344291 140.200061 lineto
+322.028839 140.188211 lineto
+324.713387 140.188974 lineto
+327.397935 140.185198 lineto
+330.082483 140.197289 lineto
+332.767031 140.185519 lineto
+335.451579 140.189325 lineto
+338.136127 140.185198 lineto
+340.820675 140.185519 lineto
+343.505223 140.186323 lineto
+346.189771 140.185198 lineto
+348.874319 140.189727 lineto
+351.558867 140.185519 lineto
+354.243415 140.199177 lineto
+356.927963 140.185198 lineto
+359.612511 140.187046 lineto
+362.297059 140.185198 lineto
+364.981607 140.199177 lineto
+367.666155 140.199177 lineto
+370.350704 140.185529 lineto
+373.035252 140.199539 lineto
+375.719800 140.186674 lineto
+378.404348 140.186644 lineto
+381.088896 140.199177 lineto
+383.773444 140.186745 lineto
+386.457992 140.185519 lineto
+389.142540 140.188974 lineto
+391.827088 140.190340 lineto
+394.511636 140.189305 lineto
+397.196184 140.199177 lineto
+399.880732 140.185198 lineto
+402.565280 140.186323 lineto
+405.249828 140.199177 lineto
+407.934376 140.187086 lineto
+410.618924 140.185198 lineto
+413.303472 140.185198 lineto
+415.988020 140.187086 lineto
+418.672568 140.185198 lineto
+421.357116 140.185519 lineto
+424.041664 140.186644 lineto
+426.726212 140.186483 lineto
+429.410760 140.197289 lineto
+432.095308 140.186483 lineto
+434.779856 140.197289 lineto
+437.464404 140.185198 lineto
+440.148952 140.185198 lineto
+442.833500 140.185198 lineto
+445.518048 140.185198 lineto
+448.202596 140.187066 lineto
+450.887144 140.199890 lineto
+453.571692 140.185198 lineto
+456.256240 140.185198 lineto
+458.940788 140.187086 lineto
+461.625336 140.186644 lineto
+464.309884 140.199499 lineto
+466.994432 140.186483 lineto
+469.678980 140.199177 lineto
+472.363528 140.185198 lineto
+475.354807 140.193071 lineto
+478.039355 56.338447 lineto
+478.039355 69.079615 lineto
+478.039355 69.079615 lineto
+475.354807 172.554485 lineto
+472.363528 172.546612 lineto
+469.678980 172.560591 lineto
+466.994432 172.547897 lineto
+464.309884 172.560912 lineto
+461.625336 172.548058 lineto
+458.940788 172.548499 lineto
+456.256240 172.546612 lineto
+453.571692 172.546612 lineto
+450.887144 172.561304 lineto
+448.202596 172.548479 lineto
+445.518048 172.546612 lineto
+442.833500 172.546612 lineto
+440.148952 172.546612 lineto
+437.464404 172.546612 lineto
+434.779856 172.558703 lineto
+432.095308 172.547897 lineto
+429.410760 172.558703 lineto
+426.726212 172.547897 lineto
+424.041664 172.548058 lineto
+421.357116 172.546933 lineto
+418.672568 172.546612 lineto
+415.988020 172.548499 lineto
+413.303472 172.546612 lineto
+410.618924 172.546612 lineto
+407.934376 172.548499 lineto
+405.249828 172.560591 lineto
+402.565280 172.547736 lineto
+399.880732 172.546612 lineto
+397.196184 172.560591 lineto
+394.511636 172.550719 lineto
+391.827088 172.551753 lineto
+389.142540 172.550387 lineto
+386.457992 172.546933 lineto
+383.773444 172.548158 lineto
+381.088896 172.560591 lineto
+378.404348 172.548058 lineto
+375.719800 172.548088 lineto
+373.035252 172.560952 lineto
+370.350704 172.546943 lineto
+367.666155 172.560591 lineto
+364.981607 172.560591 lineto
+362.297059 172.546612 lineto
+359.612511 172.548459 lineto
+356.927963 172.546612 lineto
+354.243415 172.560591 lineto
+351.558867 172.546933 lineto
+348.874319 172.551141 lineto
+346.189771 172.546612 lineto
+343.505223 172.547736 lineto
+340.820675 172.546933 lineto
+338.136127 172.546612 lineto
+335.451579 172.550739 lineto
+332.767031 172.546933 lineto
+330.082483 172.558703 lineto
+327.397935 172.546612 lineto
+324.713387 172.550387 lineto
+322.028839 172.549624 lineto
+319.344291 172.561474 lineto
+316.659743 172.548499 lineto
+313.975195 172.548660 lineto
+311.290647 172.546612 lineto
+308.606099 172.547736 lineto
+305.921551 172.547897 lineto
+303.237003 172.546612 lineto
+300.552455 172.546612 lineto
+297.867907 172.560591 lineto
+295.183359 172.550387 lineto
+292.498811 172.560591 lineto
+289.814263 172.560591 lineto
+287.129715 172.547897 lineto
+284.445167 172.558703 lineto
+281.760619 172.546612 lineto
+279.076071 172.546612 lineto
+276.391523 172.546612 lineto
+273.706975 172.547897 lineto
+271.022427 172.548499 lineto
+268.337879 172.550387 lineto
+265.653331 172.550387 lineto
+262.967472 172.547897 lineto
+260.282924 172.546612 lineto
+257.598376 172.560591 lineto
+254.913828 172.547736 lineto
+252.229280 172.547736 lineto
+249.544732 172.546612 lineto
+246.860184 172.560591 lineto
+244.175636 172.548499 lineto
+241.491088 172.546612 lineto
+238.806540 172.548499 lineto
+236.121992 172.546612 lineto
+233.437444 172.550387 lineto
+230.752896 172.547897 lineto
+228.068348 172.546612 lineto
+225.383800 172.547897 lineto
+222.699252 172.546612 lineto
+220.014704 172.546612 lineto
+217.330156 172.548499 lineto
+214.645608 171.330906 lineto
+211.961060 169.133284 lineto
+209.276512 167.029178 lineto
+206.591964 164.810467 lineto
+203.907416 162.670891 lineto
+201.222868 160.513520 lineto
+198.538320 158.291073 lineto
+195.853772 148.438310 lineto
+193.169224 148.438310 lineto
+190.484675 148.438310 lineto
+187.800127 148.438310 lineto
+183.758231 145.483042 lineto
+181.073683 143.125584 lineto
+179.060272 141.250246 lineto
+176.375724 138.912792 lineto
+173.691176 136.506568 lineto
+171.006628 133.857957 lineto
+168.322080 131.368179 lineto
+165.637532 128.722782 lineto
+162.952984 126.102973 lineto
+160.268436 123.685581 lineto
+157.583888 121.084090 lineto
+154.899340 118.582743 lineto
+152.214792 116.005876 lineto
+149.530244 113.462029 lineto
+146.845696 111.066610 lineto
+144.161148 108.712446 lineto
+141.476600 106.270510 lineto
+138.792052 103.909155 lineto
+136.107504 101.488992 lineto
+133.422956 99.050551 lineto
+130.738408 96.522490 lineto
+128.053860 94.028253 lineto
+125.369312 91.458296 lineto
+122.684764 88.990651 lineto
+120.000216 86.438971 lineto
+117.315668 83.609675 lineto
+114.631120 80.918003 lineto
+110.939866 77.512629 lineto
+108.255318 75.064869 lineto
+105.570770 72.755012 lineto
+102.886222 70.257200 lineto
+100.201674 67.720623 lineto
+97.517126 65.150424 lineto
+94.832578 62.626662 lineto
+92.148030 59.975119 lineto
+89.463482 57.405925 lineto
+86.778934 54.978009 lineto
+84.094386 52.318231 lineto
+81.409838 49.699507 lineto
+78.221937 46.763480 lineto
+75.537389 44.236825 lineto
+72.852841 42.085359 lineto
+70.168293 39.506162 lineto
+67.483745 37.184817 lineto
+64.799197 34.876527 lineto
+61.862973 32.139783 lineto
+59.178425 29.769711 lineto
+56.493877 27.170751 lineto
+55.025764 25.774642 lineto
+52.341216 23.348935 lineto
+50.264886 21.465202 lineto
+47.887724 20.000000 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+0.000000 0.000000 0.500000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000000 lineto
+50.264886 21.465202 lineto
+52.341216 23.348935 lineto
+55.025764 25.774642 lineto
+56.493877 27.170751 lineto
+59.178425 29.769711 lineto
+61.862973 32.139783 lineto
+64.799197 34.876527 lineto
+67.483745 37.184817 lineto
+70.168293 39.506162 lineto
+72.852841 42.085359 lineto
+75.537389 44.236825 lineto
+78.221937 46.763480 lineto
+81.409838 49.699507 lineto
+84.094386 52.318231 lineto
+86.778934 54.978009 lineto
+89.463482 57.405925 lineto
+92.148030 59.975119 lineto
+94.832578 62.626662 lineto
+97.517126 65.150424 lineto
+100.201674 67.720623 lineto
+102.886222 70.257200 lineto
+105.570770 72.755012 lineto
+108.255318 75.064869 lineto
+110.939866 77.512629 lineto
+114.631120 80.918003 lineto
+117.315668 83.609675 lineto
+120.000216 86.438971 lineto
+122.684764 88.990651 lineto
+125.369312 91.458296 lineto
+128.053860 94.028253 lineto
+130.738408 96.522490 lineto
+133.422956 99.050551 lineto
+136.107504 101.488992 lineto
+138.792052 103.909155 lineto
+141.476600 106.270510 lineto
+144.161148 108.712446 lineto
+146.845696 111.066610 lineto
+149.530244 113.462029 lineto
+152.214792 116.005876 lineto
+154.899340 118.582743 lineto
+157.583888 121.084090 lineto
+160.268436 123.685581 lineto
+162.952984 126.102973 lineto
+165.637532 128.722782 lineto
+168.322080 131.368179 lineto
+171.006628 133.857957 lineto
+173.691176 136.506568 lineto
+176.375724 138.912792 lineto
+179.060272 141.250246 lineto
+181.073683 143.125584 lineto
+183.758231 145.483042 lineto
+187.800127 148.438310 lineto
+190.484675 148.438310 lineto
+193.169224 148.438310 lineto
+195.853772 148.438310 lineto
+198.538320 158.291073 lineto
+201.222868 160.513520 lineto
+203.907416 162.670891 lineto
+206.591964 164.810467 lineto
+209.276512 167.029178 lineto
+211.961060 169.133284 lineto
+214.645608 171.330906 lineto
+217.330156 172.548499 lineto
+220.014704 172.546612 lineto
+222.699252 172.546612 lineto
+225.383800 172.547897 lineto
+228.068348 172.546612 lineto
+230.752896 172.547897 lineto
+233.437444 172.550387 lineto
+236.121992 172.546612 lineto
+238.806540 172.548499 lineto
+241.491088 172.546612 lineto
+244.175636 172.548499 lineto
+246.860184 172.560591 lineto
+249.544732 172.546612 lineto
+252.229280 172.547736 lineto
+254.913828 172.547736 lineto
+257.598376 172.560591 lineto
+260.282924 172.546612 lineto
+262.967472 172.547897 lineto
+265.653331 172.550387 lineto
+268.337879 172.550387 lineto
+271.022427 172.548499 lineto
+273.706975 172.547897 lineto
+276.391523 172.546612 lineto
+279.076071 172.546612 lineto
+281.760619 172.546612 lineto
+284.445167 172.558703 lineto
+287.129715 172.547897 lineto
+289.814263 172.560591 lineto
+292.498811 172.560591 lineto
+295.183359 172.550387 lineto
+297.867907 172.560591 lineto
+300.552455 172.546612 lineto
+303.237003 172.546612 lineto
+305.921551 172.547897 lineto
+308.606099 172.547736 lineto
+311.290647 172.546612 lineto
+313.975195 172.548660 lineto
+316.659743 172.548499 lineto
+319.344291 172.561474 lineto
+322.028839 172.549624 lineto
+324.713387 172.550387 lineto
+327.397935 172.546612 lineto
+330.082483 172.558703 lineto
+332.767031 172.546933 lineto
+335.451579 172.550739 lineto
+338.136127 172.546612 lineto
+340.820675 172.546933 lineto
+343.505223 172.547736 lineto
+346.189771 172.546612 lineto
+348.874319 172.551141 lineto
+351.558867 172.546933 lineto
+354.243415 172.560591 lineto
+356.927963 172.546612 lineto
+359.612511 172.548459 lineto
+362.297059 172.546612 lineto
+364.981607 172.560591 lineto
+367.666155 172.560591 lineto
+370.350704 172.546943 lineto
+373.035252 172.560952 lineto
+375.719800 172.548088 lineto
+378.404348 172.548058 lineto
+381.088896 172.560591 lineto
+383.773444 172.548158 lineto
+386.457992 172.546933 lineto
+389.142540 172.550387 lineto
+391.827088 172.551753 lineto
+394.511636 172.550719 lineto
+397.196184 172.560591 lineto
+399.880732 172.546612 lineto
+402.565280 172.547736 lineto
+405.249828 172.560591 lineto
+407.934376 172.548499 lineto
+410.618924 172.546612 lineto
+413.303472 172.546612 lineto
+415.988020 172.548499 lineto
+418.672568 172.546612 lineto
+421.357116 172.546933 lineto
+424.041664 172.548058 lineto
+426.726212 172.547897 lineto
+429.410760 172.558703 lineto
+432.095308 172.547897 lineto
+434.779856 172.558703 lineto
+437.464404 172.546612 lineto
+440.148952 172.546612 lineto
+442.833500 172.546612 lineto
+445.518048 172.546612 lineto
+448.202596 172.548479 lineto
+450.887144 172.561304 lineto
+453.571692 172.546612 lineto
+456.256240 172.546612 lineto
+458.940788 172.548499 lineto
+461.625336 172.548058 lineto
+464.309884 172.560912 lineto
+466.994432 172.547897 lineto
+469.678980 172.560591 lineto
+472.363528 172.546612 lineto
+475.354807 172.554485 lineto
+478.039355 69.079615 lineto
+478.039355 108.655445 lineto
+478.039355 108.655445 lineto
+475.354807 274.068234 lineto
+472.363528 274.060441 lineto
+469.678980 274.074741 lineto
+466.994432 274.061807 lineto
+464.309884 274.075143 lineto
+461.625336 274.061967 lineto
+458.940788 274.062409 lineto
+456.256240 274.060441 lineto
+453.571692 274.060441 lineto
+450.887144 274.075615 lineto
+448.202596 274.062630 lineto
+445.518048 274.060441 lineto
+442.833500 274.060441 lineto
+440.148952 274.060601 lineto
+437.464404 274.060441 lineto
+434.779856 274.072693 lineto
+432.095308 274.061807 lineto
+429.410760 274.072693 lineto
+426.726212 274.061807 lineto
+424.041664 274.061967 lineto
+421.357116 274.060842 lineto
+418.672568 274.060441 lineto
+415.988020 274.062409 lineto
+413.303472 274.060441 lineto
+410.618924 274.060360 lineto
+407.934376 274.062409 lineto
+405.249828 274.074741 lineto
+402.565280 274.061566 lineto
+399.880732 274.060360 lineto
+397.196184 274.074741 lineto
+394.511636 274.064869 lineto
+391.827088 274.066306 lineto
+389.142540 274.064458 lineto
+386.457992 274.060842 lineto
+383.773444 274.062068 lineto
+381.088896 274.074741 lineto
+378.404348 274.061967 lineto
+375.719800 274.061997 lineto
+373.035252 274.075183 lineto
+370.350704 274.060852 lineto
+367.666155 274.074741 lineto
+364.981607 274.074741 lineto
+362.297059 274.060360 lineto
+359.612511 274.062449 lineto
+356.927963 274.060441 lineto
+354.243415 274.074741 lineto
+351.558867 274.060842 lineto
+348.874319 274.065372 lineto
+346.189771 274.060441 lineto
+343.505223 274.061566 lineto
+340.820675 274.060762 lineto
+338.136127 274.060923 lineto
+335.451579 274.064890 lineto
+332.767031 274.060762 lineto
+330.082483 274.072693 lineto
+327.397935 274.060441 lineto
+324.713387 274.064458 lineto
+322.028839 274.063614 lineto
+319.344291 274.075786 lineto
+316.659743 274.062409 lineto
+313.975195 274.062650 lineto
+311.290647 274.060682 lineto
+308.606099 274.061566 lineto
+305.921551 274.061807 lineto
+303.237003 274.060601 lineto
+300.552455 274.060601 lineto
+297.867907 274.074741 lineto
+295.183359 274.064458 lineto
+292.498811 274.074741 lineto
+289.814263 274.074741 lineto
+287.129715 274.061967 lineto
+284.445167 274.072853 lineto
+281.760619 274.060441 lineto
+279.076071 274.060360 lineto
+276.391523 274.060441 lineto
+273.706975 274.061967 lineto
+271.022427 274.062409 lineto
+268.337879 274.064458 lineto
+265.653331 274.064458 lineto
+262.967472 274.061807 lineto
+260.282924 274.060441 lineto
+257.598376 274.074902 lineto
+254.913828 274.061566 lineto
+252.229280 274.061566 lineto
+249.544732 274.060441 lineto
+246.860184 274.074741 lineto
+244.175636 274.062409 lineto
+241.491088 274.060601 lineto
+238.806540 274.062409 lineto
+236.121992 274.060441 lineto
+233.437444 274.064458 lineto
+230.752896 274.061807 lineto
+228.068348 274.060360 lineto
+225.383800 274.061807 lineto
+222.699252 274.060360 lineto
+220.014704 274.060441 lineto
+217.330156 274.062409 lineto
+214.645608 272.836299 lineto
+211.961060 270.623574 lineto
+209.276512 268.505087 lineto
+206.591964 266.271513 lineto
+203.907416 264.117074 lineto
+201.222868 261.945001 lineto
+198.538320 259.707209 lineto
+195.853772 249.839824 lineto
+193.169224 249.824479 lineto
+190.484675 249.807045 lineto
+187.800127 249.793468 lineto
+183.758231 244.371037 lineto
+181.073683 240.143262 lineto
+179.060272 236.784446 lineto
+176.375724 232.563420 lineto
+173.691176 228.250565 lineto
+171.006628 223.551998 lineto
+168.322080 219.114616 lineto
+165.637532 214.437741 lineto
+162.952984 209.792318 lineto
+160.268436 205.463958 lineto
+157.583888 200.845851 lineto
+154.899340 196.386296 lineto
+152.214792 191.795545 lineto
+149.530244 187.256212 lineto
+146.845696 182.981960 lineto
+144.161148 178.727593 lineto
+141.476600 174.359103 lineto
+138.792052 170.098670 lineto
+136.107504 165.743758 lineto
+133.422956 161.382538 lineto
+130.738408 156.874578 lineto
+128.053860 152.426310 lineto
+125.369312 147.854841 lineto
+122.684764 143.434772 lineto
+120.000216 138.877644 lineto
+117.315668 133.893146 lineto
+114.631120 129.139466 lineto
+110.939866 123.024142 lineto
+108.255318 118.635768 lineto
+105.570770 114.467083 lineto
+102.886222 109.988567 lineto
+100.201674 105.476911 lineto
+97.517126 100.888651 lineto
+94.832578 96.397280 lineto
+92.148030 91.724703 lineto
+89.463482 87.139536 lineto
+86.778934 82.794867 lineto
+84.094386 78.077178 lineto
+81.409838 73.418701 lineto
+78.221937 68.176754 lineto
+75.537389 63.697515 lineto
+72.852841 59.796323 lineto
+70.168293 55.196092 lineto
+67.483745 51.016481 lineto
+64.799197 46.845346 lineto
+61.862973 41.952356 lineto
+59.178425 37.713253 lineto
+56.493877 33.075423 lineto
+55.025764 30.587332 lineto
+52.341216 26.268492 lineto
+50.264886 22.897102 lineto
+47.887724 20.000080 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+0.000000 0.500000 0.000000 setrgbcolor
+fill
+grestore
+stroke
+45.000000 20.000000 moveto
+45.000000 20.000000 lineto
+47.887724 20.000080 lineto
+50.264886 22.897102 lineto
+52.341216 26.268492 lineto
+55.025764 30.587332 lineto
+56.493877 33.075423 lineto
+59.178425 37.713253 lineto
+61.862973 41.952356 lineto
+64.799197 46.845346 lineto
+67.483745 51.016481 lineto
+70.168293 55.196092 lineto
+72.852841 59.796323 lineto
+75.537389 63.697515 lineto
+78.221937 68.176754 lineto
+81.409838 73.418701 lineto
+84.094386 78.077178 lineto
+86.778934 82.794867 lineto
+89.463482 87.139536 lineto
+92.148030 91.724703 lineto
+94.832578 96.397280 lineto
+97.517126 100.888651 lineto
+100.201674 105.476911 lineto
+102.886222 109.988567 lineto
+105.570770 114.467083 lineto
+108.255318 118.635768 lineto
+110.939866 123.024142 lineto
+114.631120 129.139466 lineto
+117.315668 133.893146 lineto
+120.000216 138.877644 lineto
+122.684764 143.434772 lineto
+125.369312 147.854841 lineto
+128.053860 152.426310 lineto
+130.738408 156.874578 lineto
+133.422956 161.382538 lineto
+136.107504 165.743758 lineto
+138.792052 170.098670 lineto
+141.476600 174.359103 lineto
+144.161148 178.727593 lineto
+146.845696 182.981960 lineto
+149.530244 187.256212 lineto
+152.214792 191.795545 lineto
+154.899340 196.386296 lineto
+157.583888 200.845851 lineto
+160.268436 205.463958 lineto
+162.952984 209.792318 lineto
+165.637532 214.437741 lineto
+168.322080 219.114616 lineto
+171.006628 223.551998 lineto
+173.691176 228.250565 lineto
+176.375724 232.563420 lineto
+179.060272 236.784446 lineto
+181.073683 240.143262 lineto
+183.758231 244.371037 lineto
+187.800127 249.793468 lineto
+190.484675 249.807045 lineto
+193.169224 249.824479 lineto
+195.853772 249.839824 lineto
+198.538320 259.707209 lineto
+201.222868 261.945001 lineto
+203.907416 264.117074 lineto
+206.591964 266.271513 lineto
+209.276512 268.505087 lineto
+211.961060 270.623574 lineto
+214.645608 272.836299 lineto
+217.330156 274.062409 lineto
+220.014704 274.060441 lineto
+222.699252 274.060360 lineto
+225.383800 274.061807 lineto
+228.068348 274.060360 lineto
+230.752896 274.061807 lineto
+233.437444 274.064458 lineto
+236.121992 274.060441 lineto
+238.806540 274.062409 lineto
+241.491088 274.060601 lineto
+244.175636 274.062409 lineto
+246.860184 274.074741 lineto
+249.544732 274.060441 lineto
+252.229280 274.061566 lineto
+254.913828 274.061566 lineto
+257.598376 274.074902 lineto
+260.282924 274.060441 lineto
+262.967472 274.061807 lineto
+265.653331 274.064458 lineto
+268.337879 274.064458 lineto
+271.022427 274.062409 lineto
+273.706975 274.061967 lineto
+276.391523 274.060441 lineto
+279.076071 274.060360 lineto
+281.760619 274.060441 lineto
+284.445167 274.072853 lineto
+287.129715 274.061967 lineto
+289.814263 274.074741 lineto
+292.498811 274.074741 lineto
+295.183359 274.064458 lineto
+297.867907 274.074741 lineto
+300.552455 274.060601 lineto
+303.237003 274.060601 lineto
+305.921551 274.061807 lineto
+308.606099 274.061566 lineto
+311.290647 274.060682 lineto
+313.975195 274.062650 lineto
+316.659743 274.062409 lineto
+319.344291 274.075786 lineto
+322.028839 274.063614 lineto
+324.713387 274.064458 lineto
+327.397935 274.060441 lineto
+330.082483 274.072693 lineto
+332.767031 274.060762 lineto
+335.451579 274.064890 lineto
+338.136127 274.060923 lineto
+340.820675 274.060762 lineto
+343.505223 274.061566 lineto
+346.189771 274.060441 lineto
+348.874319 274.065372 lineto
+351.558867 274.060842 lineto
+354.243415 274.074741 lineto
+356.927963 274.060441 lineto
+359.612511 274.062449 lineto
+362.297059 274.060360 lineto
+364.981607 274.074741 lineto
+367.666155 274.074741 lineto
+370.350704 274.060852 lineto
+373.035252 274.075183 lineto
+375.719800 274.061997 lineto
+378.404348 274.061967 lineto
+381.088896 274.074741 lineto
+383.773444 274.062068 lineto
+386.457992 274.060842 lineto
+389.142540 274.064458 lineto
+391.827088 274.066306 lineto
+394.511636 274.064869 lineto
+397.196184 274.074741 lineto
+399.880732 274.060360 lineto
+402.565280 274.061566 lineto
+405.249828 274.074741 lineto
+407.934376 274.062409 lineto
+410.618924 274.060360 lineto
+413.303472 274.060441 lineto
+415.988020 274.062409 lineto
+418.672568 274.060441 lineto
+421.357116 274.060842 lineto
+424.041664 274.061967 lineto
+426.726212 274.061807 lineto
+429.410760 274.072693 lineto
+432.095308 274.061807 lineto
+434.779856 274.072693 lineto
+437.464404 274.060441 lineto
+440.148952 274.060601 lineto
+442.833500 274.060441 lineto
+445.518048 274.060441 lineto
+448.202596 274.062630 lineto
+450.887144 274.075615 lineto
+453.571692 274.060441 lineto
+456.256240 274.060441 lineto
+458.940788 274.062409 lineto
+461.625336 274.061967 lineto
+464.309884 274.075143 lineto
+466.994432 274.061807 lineto
+469.678980 274.074741 lineto
+472.363528 274.060441 lineto
+475.354807 274.068234 lineto
+478.039355 108.655445 lineto
+478.039355 161.034927 lineto
+478.039355 161.034927 lineto
+475.354807 401.992147 lineto
+472.363528 401.984946 lineto
+469.678980 401.998956 lineto
+466.994432 401.986021 lineto
+464.309884 401.999357 lineto
+461.625336 401.986182 lineto
+458.940788 401.986623 lineto
+456.256240 401.984926 lineto
+453.571692 401.984926 lineto
+450.887144 401.999829 lineto
+448.202596 401.987126 lineto
+445.518048 401.984866 lineto
+442.833500 401.984876 lineto
+440.148952 401.985278 lineto
+437.464404 401.984846 lineto
+434.779856 401.996907 lineto
+432.095308 401.986021 lineto
+429.410760 401.996907 lineto
+426.726212 401.986021 lineto
+424.041664 401.986182 lineto
+421.357116 401.985238 lineto
+418.672568 401.984866 lineto
+415.988020 401.986623 lineto
+413.303472 401.984876 lineto
+410.618924 401.984575 lineto
+407.934376 401.986623 lineto
+405.249828 401.998956 lineto
+402.565280 401.985780 lineto
+399.880732 401.984575 lineto
+397.196184 401.998956 lineto
+394.511636 401.989084 lineto
+391.827088 401.990801 lineto
+389.142540 401.988672 lineto
+386.457992 401.985268 lineto
+383.773444 401.986282 lineto
+381.088896 401.998956 lineto
+378.404348 401.986182 lineto
+375.719800 401.986212 lineto
+373.035252 401.999397 lineto
+370.350704 401.985258 lineto
+367.666155 401.998956 lineto
+364.981607 401.998956 lineto
+362.297059 401.984575 lineto
+359.612511 401.986664 lineto
+356.927963 401.984926 lineto
+354.243415 401.998956 lineto
+351.558867 401.985238 lineto
+348.874319 401.989586 lineto
+346.189771 401.984926 lineto
+343.505223 401.985780 lineto
+340.820675 401.984976 lineto
+338.136127 401.985830 lineto
+335.451579 401.989104 lineto
+332.767031 401.984976 lineto
+330.082483 401.996907 lineto
+327.397935 401.984876 lineto
+324.713387 401.988672 lineto
+322.028839 401.987828 lineto
+319.344291 402.000000 lineto
+316.659743 401.986623 lineto
+313.975195 401.986864 lineto
+311.290647 401.985258 lineto
+308.606099 401.985780 lineto
+305.921551 401.986021 lineto
+303.237003 401.985278 lineto
+300.552455 401.985278 lineto
+297.867907 401.998956 lineto
+295.183359 401.988672 lineto
+292.498811 401.998956 lineto
+289.814263 401.998956 lineto
+287.129715 401.986463 lineto
+284.445167 401.997349 lineto
+281.760619 401.984926 lineto
+279.076071 401.984575 lineto
+276.391523 401.984836 lineto
+273.706975 401.986744 lineto
+271.022427 401.986623 lineto
+268.337879 401.988672 lineto
+265.653331 401.988672 lineto
+262.967472 401.986021 lineto
+260.282924 401.984846 lineto
+257.598376 401.999397 lineto
+254.913828 401.985780 lineto
+252.229280 401.985780 lineto
+249.544732 401.984866 lineto
+246.860184 401.998956 lineto
+244.175636 401.986623 lineto
+241.491088 401.985278 lineto
+238.806540 401.986623 lineto
+236.121992 401.984946 lineto
+233.437444 401.988672 lineto
+230.752896 401.986021 lineto
+228.068348 401.984575 lineto
+225.383800 401.986021 lineto
+222.699252 401.984575 lineto
+220.014704 401.984906 lineto
+217.330156 401.986623 lineto
+214.645608 400.760514 lineto
+211.961060 398.547788 lineto
+209.276512 396.429512 lineto
+206.591964 394.196009 lineto
+203.907416 392.041570 lineto
+201.222868 389.869215 lineto
+198.538320 387.631644 lineto
+195.853772 377.764310 lineto
+193.169224 377.748693 lineto
+190.484675 377.731260 lineto
+187.800127 377.718717 lineto
+183.758231 369.237218 lineto
+181.073683 362.446395 lineto
+179.060272 357.112870 lineto
+176.375724 350.250173 lineto
+173.691176 343.390006 lineto
+171.006628 336.082446 lineto
+168.322080 329.146861 lineto
+165.637532 321.819587 lineto
+162.952984 314.569219 lineto
+160.268436 307.716785 lineto
+157.583888 300.472925 lineto
+154.899340 293.471771 lineto
+152.214792 286.295025 lineto
+149.530244 279.141186 lineto
+146.845696 272.230706 lineto
+144.161148 265.383354 lineto
+141.476600 258.510835 lineto
+138.792052 251.636549 lineto
+136.107504 244.714922 lineto
+133.422956 237.818452 lineto
+130.738408 230.772399 lineto
+128.053860 223.782513 lineto
+125.369312 216.666082 lineto
+122.684764 209.590394 lineto
+120.000216 202.516794 lineto
+117.315668 194.994294 lineto
+114.631120 187.832862 lineto
+110.939866 178.442316 lineto
+108.255318 171.679823 lineto
+105.570770 165.111170 lineto
+102.886222 158.241483 lineto
+100.201674 151.328343 lineto
+97.517126 144.353159 lineto
+94.832578 137.354145 lineto
+92.148030 130.233376 lineto
+89.463482 123.183034 lineto
+86.778934 116.513234 lineto
+84.094386 109.304150 lineto
+81.409838 102.198615 lineto
+78.221937 94.200392 lineto
+75.537389 87.261020 lineto
+72.852841 81.179048 lineto
+70.168293 74.161917 lineto
+67.483745 67.747105 lineto
+64.799197 61.342256 lineto
+61.862973 53.876607 lineto
+59.178425 47.390604 lineto
+56.493877 40.281082 lineto
+55.025764 36.505973 lineto
+52.341216 29.952776 lineto
+50.264886 24.754554 lineto
+47.887724 20.000603 lineto
+45.000000 20.000000 lineto
+closepath
+gsave
+0.000000 0.500000 1.000000 setrgbcolor
+fill
+grestore
+stroke
+41.000000 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+43.887724 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+46.264886 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+48.341216 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+51.025764 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+52.493877 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+55.178425 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+57.862973 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+60.799197 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+63.483745 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+66.168293 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+68.852841 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+71.537389 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+74.221937 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+77.409838 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+80.094386 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+82.778934 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+85.463482 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+88.148030 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+90.832578 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+93.517126 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+96.201674 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+98.886222 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+101.570770 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+104.255318 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+106.939866 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+110.631120 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+113.315668 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+116.000216 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+118.684764 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+121.369312 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+124.053860 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+126.738408 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+129.422956 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+132.107504 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+134.792052 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+137.476600 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+140.161148 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+142.845696 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+145.530244 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+148.214792 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+150.899340 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+153.583888 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+156.268436 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+158.952984 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+161.637532 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+164.322080 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+167.006628 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+169.691176 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+172.375724 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+175.060272 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+177.073683 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+179.758231 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+183.800127 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+186.484675 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+189.169224 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+191.853772 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+194.538320 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+197.222868 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+199.907416 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+202.591964 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+205.276512 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+207.961060 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+210.645608 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+213.330156 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+216.014704 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+218.699252 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+221.383800 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+224.068348 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+226.752896 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+229.437444 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+232.121992 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+234.806540 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+237.491088 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+240.175636 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+242.860184 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+245.544732 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+248.229280 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+250.913828 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+253.598376 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+256.282924 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+258.967472 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+261.653331 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+264.337879 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+267.022427 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+269.706975 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+272.391523 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+275.076071 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+277.760619 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+280.445167 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+283.129715 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+285.814263 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+288.498811 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+291.183359 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+293.867907 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+296.552455 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+299.237003 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+301.921551 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+304.606099 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+307.290647 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+309.975195 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+312.659743 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+315.344291 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+318.028839 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+320.713387 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+323.397935 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+326.082483 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+328.767031 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+331.451579 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+334.136127 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+336.820675 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+339.505223 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+342.189771 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+344.874319 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+347.558867 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+350.243415 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+352.927963 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+355.612511 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+358.297059 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+360.981607 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+363.666155 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+366.350704 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+369.035252 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+371.719800 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+374.404348 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+377.088896 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+379.773444 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+382.457992 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+385.142540 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+387.827088 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+390.511636 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+393.196184 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+395.880732 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+398.565280 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+401.249828 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+403.934376 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+406.618924 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+409.303472 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+411.988020 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+414.672568 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+417.357116 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+420.041664 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+422.726212 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+425.410760 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+428.095308 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+430.779856 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+433.464404 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+436.148952 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+438.833500 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+441.518048 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+444.202596 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+446.887144 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+449.571692 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+452.256240 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+454.940788 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+457.625336 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+460.309884 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+462.994432 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+465.678980 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+468.363528 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+471.354807 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+474.039355 20.000000 moveto
+4.000000 -4.000000 rlineto
+4.000000 4.000000 rlineto
+closepath
+gsave
+1.0 setgray
+fill
+grestore
+stroke
+showpage
index 13ef0ad..18df997 100644 (file)
@@ -66,6 +66,7 @@ namespace zypp
         */
         PatchesFileReader( const Pathname &patches_file, ProcessResource callback );
         
+        private:
         /**
         * Callback provided to the XML parser. Don't use it.
         */
index 84d56da..2eace0d 100644 (file)
@@ -1,5 +1,6 @@
 
 #include <sqlite3.h>
+#include <map>
 #include "zypp2/cache/sqlite3x/sqlite3x.hpp"
 
 #include "zypp/base/Measure.h"
@@ -30,8 +31,13 @@ typedef shared_ptr<sqlite3_command> sqlite3_command_ptr;
 struct CacheStore::Impl
 {
   Impl()
+  : name_cache_hits(0)
   {}
 
+ /**
+  * SQL statements
+  * (we precompile them
+  */
   sqlite3_connection con;
   
   sqlite3_command_ptr update_catalog_cmd;
@@ -58,6 +64,9 @@ struct CacheStore::Impl
   sqlite3_command_ptr append_versioned_dependency_cmd;
   
   sqlite3_command_ptr append_resolvable_cmd;
+  
+  map<string, data::RecordId> name_cache;
+  int name_cache_hits;
 };
 
 
@@ -119,6 +128,7 @@ CacheStore::CacheStore()
 CacheStore::~CacheStore()
 {
   _pimpl->con.executenonquery("COMMIT;");
+  MIL << "name cache hits: " << _pimpl->name_cache_hits << " | cache size: " << _pimpl->name_cache.size() << endl;
 }
 
 void CacheStore::consumePackage( const data::Package &package )
@@ -310,10 +320,17 @@ data::RecordId CacheStore::lookupOrAppendCatalog( const Url &url, const Pathname
 
 data::RecordId CacheStore::lookupOrAppendName( const std::string &name )
 {
+  if ( _pimpl->name_cache.find(name) != _pimpl->name_cache.end() )
+  {
+    _pimpl->name_cache_hits++;
+    return _pimpl->name_cache[name];
+  }
+  
   _pimpl->select_name_cmd->bind(":name", name);
   long long id = 0;
   try {
     id = _pimpl->select_name_cmd->executeint64();
+    _pimpl->name_cache[name] = id;
   }
   catch ( const sqlite3x::database_error &e )
   {