From: Duncan Mac-Vicar P Date: Tue, 17 Apr 2007 17:19:39 +0000 (+0000) Subject: misc improvements, speed research, etc X-Git-Tag: BASE-SuSE-Linux-10_3-Branch~853 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=73ce96ce0392e9468c63aaa8db7349f033c15eec;p=platform%2Fupstream%2Flibzypp.git misc improvements, speed research, etc --- diff --git a/devel/devel.dmacvicar/SUSETagsParser.cc b/devel/devel.dmacvicar/SUSETagsParser.cc index 00a2e71..e965eee 100644 --- a/devel/devel.dmacvicar/SUSETagsParser.cc +++ b/devel/devel.dmacvicar/SUSETagsParser.cc @@ -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.' 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 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.' 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 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::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::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 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 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 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 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 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 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::kind, nvra, deps ); - _idmap[single] = pkgid; - } - - void PackagesParser::collectDeps( zypp::Dep deptype, const std::list &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::kind, nvra, deps ); + _idmap[single] = pkgid; +} + +void PackagesParser::collectDeps( zypp::Dep deptype, const std::list &depstrlist, data::Dependencies &deps ) +{ + for ( list::const_iterator it = depstrlist.begin(); it != depstrlist.end(); ++it ) { - for ( list::const_iterator it = depstrlist.begin(); it != depstrlist.end(); ++it ) - { - capability::CapabilityImpl::Ptr cap = zypp::capability::parse( ResTraits::kind, *it); - if (cap) - deps[deptype].push_back(cap); - else - ZYPP_THROW(ParseException("Invalid capability: [" + *it + "]")); - } + capability::CapabilityImpl::Ptr cap = zypp::capability::parse( ResTraits::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. + + 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. - - 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 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 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 diff --git a/devel/devel.dmacvicar/SUSETagsParser.h b/devel/devel.dmacvicar/SUSETagsParser.h index 8a71b79..cde57fd 100644 --- a/devel/devel.dmacvicar/SUSETagsParser.h +++ b/devel/devel.dmacvicar/SUSETagsParser.h @@ -5,7 +5,7 @@ // #include // #include #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 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 &depstrlist, data::Dependencies &deps ); void fromPathLocale (const zypp::Pathname& path); diff --git a/devel/devel.dmacvicar/SUSETagsParser_tp.cc b/devel/devel.dmacvicar/SUSETagsParser_tp.cc index cd853eb..fdbcaa6 100644 --- a/devel/devel.dmacvicar/SUSETagsParser_tp.cc +++ b/devel/devel.dmacvicar/SUSETagsParser_tp.cc @@ -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 ) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 22ce55f..620536a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -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 index 0000000..3d26e17 --- /dev/null +++ b/tests/README @@ -0,0 +1,3 @@ + +You can find here unit tests for lot of zypp classes. + diff --git a/tests/cache/CMakeLists.txt b/tests/cache/CMakeLists.txt index 1061001..1aad09a 100644 --- a/tests/cache/CMakeLists.txt +++ b/tests/cache/CMakeLists.txt @@ -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/CacheInitializer.cc b/tests/cache/CacheInitializer_test.cc similarity index 100% rename from tests/cache/CacheInitializer.cc rename to tests/cache/CacheInitializer_test.cc diff --git a/tests/cache/CacheStore_test.cc b/tests/cache/CacheStore_test.cc new file mode 100644 index 0000000..b42ddc7 --- /dev/null +++ b/tests/cache/CacheStore_test.cc @@ -0,0 +1,150 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#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::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 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 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::iterator it = res_list.begin(); it != res_list.end(); it++) + { + data::RecordId id = store.appendResolvable( catalog_id, + ResTraits::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 index 0000000..9873492 --- /dev/null +++ b/tests/cache/TIMING.txt @@ -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 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 index 0000000..bd03523 --- /dev/null +++ b/tests/cache/dump-nvra.rb @@ -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 index 0000000..07cee0b --- /dev/null +++ b/tests/cache/ram-cachestore-1.ps @@ -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 diff --git a/zypp/parser/yum/PatchesFileReader.h b/zypp/parser/yum/PatchesFileReader.h index 13ef0ad..18df997 100644 --- a/zypp/parser/yum/PatchesFileReader.h +++ b/zypp/parser/yum/PatchesFileReader.h @@ -66,6 +66,7 @@ namespace zypp */ PatchesFileReader( const Pathname &patches_file, ProcessResource callback ); + private: /** * Callback provided to the XML parser. Don't use it. */ diff --git a/zypp2/cache/CacheStore.cpp b/zypp2/cache/CacheStore.cpp index 84d56da..2eace0d 100644 --- a/zypp2/cache/CacheStore.cpp +++ b/zypp2/cache/CacheStore.cpp @@ -1,5 +1,6 @@ #include +#include #include "zypp2/cache/sqlite3x/sqlite3x.hpp" #include "zypp/base/Measure.h" @@ -30,8 +31,13 @@ typedef shared_ptr 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 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 ) {