diff --git a/.gitignore b/.gitignore index 0df17521f..6074b2662 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,8 @@ BuildTools/macosx/temp1/boost_1_57_0/b2 BuildTools/temp/CLAPACK-3.1.1-VisualStudio/BLAS/blas.vcproj *.sqlite-journal osm/ +internationalization/.vscode/launch.json +*.swo +internationalization/pofiles/new_zh_CN.mo +internationalization/.vscode/settings.json +internationalization/~$zh_CN.xlsx diff --git a/BuildTools/macosx/GNUmakefile b/BuildTools/macosx/GNUmakefile index 4eb8c9d7e..9fb020ab0 100644 --- a/BuildTools/macosx/GNUmakefile +++ b/BuildTools/macosx/GNUmakefile @@ -106,6 +106,10 @@ build-geoda-mac: cp libraries/lib/libgeos-3.3.8.dylib build/GeoDa.app/Contents/Resources/plugins/ cp libraries/lib/libcurl.4.dylib build/GeoDa.app/Contents/Resources/plugins/ cp libraries/lib/libcares.2.dylib build/GeoDa.app/Contents/Resources/plugins/ + cp /usr/local/opt/openssl/lib/libssl.1.0.0.dylib build/GeoDa.app/Contents/Resources/plugins/ + cp /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib build/GeoDa.app/Contents/Resources/plugins/ + chmod +w build/GeoDa.app/Contents/Resources/plugins/libssl.1.0.0.dylib + chmod +w build/GeoDa.app/Contents/Resources/plugins/libcrypto.1.0.0.dylib #cp libraries/lib/libmysqlclient.18.dylib build/GeoDa.app/Contents/Resources/plugins/ cp plugins/ogr_OCI.so build/GeoDa.app/Contents/Resources/plugins/ogr_OCI.so cp plugins/ogr_FileGDB.so build/GeoDa.app/Contents/Resources/plugins/ogr_FileGDB.so @@ -132,6 +136,9 @@ build-geoda-mac: install_name_tool -change "$(GEODA_HOME)/libraries/lib/libcurl.4.dylib" "@executable_path/../Resources/plugins/libcurl.4.dylib" build/GeoDa.app/Contents/Resources/plugins/libgdal.20.dylib install_name_tool -change "$(GEODA_HOME)/libraries/lib/libcares.2.dylib" "@executable_path/../Resources/plugins/libcares.2.dylib" build/GeoDa.app/Contents/Resources/plugins/libgdal.20.dylib install_name_tool -change "$(GEODA_HOME)/libraries/lib/libcares.2.dylib" "@executable_path/../Resources/plugins/libcares.2.dylib" build/GeoDa.app/Contents/Resources/plugins/libcurl.4.dylib + install_name_tool -change "/usr/local/opt/openssl/lib/libssl.1.0.0.dylib" "@executable_path/../Resources/plugins/libssl.1.0.0.dylib" build/GeoDa.app/Contents/Resources/plugins/libcurl.4.dylib + install_name_tool -change "/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib" "@executable_path/../Resources/plugins/libcrypto.1.0.0.dylib" build/GeoDa.app/Contents/Resources/plugins/libcurl.4.dylib + install_name_tool -change "/usr/local/Cellar/openssl/1.0.2q/lib/libcrypto.1.0.0.dylib" "@executable_path/../Resources/plugins/libcrypto.1.0.0.dylib" build/GeoDa.app/Contents/Resources/plugins/libssl.1.0.0.dylib install_name_tool -change "$(GEODA_HOME)/libraries/lib/libcares.2.dylib" "@executable_path/../Resources/plugins/libcares.2.dylib" build/GeoDa.app/Contents/Resources/plugins/libxerces-c-3.1.dylib install_name_tool -change "$(GEODA_HOME)/libraries/lib/libkmlengine.0.dylib" "@executable_path/../Resources/plugins/libkmlengine.0.dylib" build/GeoDa.app/Contents/Resources/plugins/libkmlengine.0.dylib install_name_tool -change "$(GEODA_HOME)/libraries/lib/libkmlbase.0.dylib" "@executable_path/../Resources/plugins/libkmlbase.0.dylib" build/GeoDa.app/Contents/Resources/plugins/libkmlengine.0.dylib diff --git a/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj b/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj index 362be0838..e83e8ed73 100644 --- a/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj +++ b/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj @@ -30,6 +30,9 @@ A14735BC21A65F1800CA69B2 /* brute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735B321A65F1700CA69B2 /* brute.cpp */; }; A14C496F1D76174000D9831C /* CsvFieldConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */; }; A16BA470183D626200D3B7DA /* DatasourceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A16BA46E183D626200D3B7DA /* DatasourceDlg.cpp */; }; + A178F773227381CB00EB9CB7 /* DissolveDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F772227381CB00EB9CB7 /* DissolveDlg.cpp */; }; + A178F776227772FD00EB9CB7 /* GdaListBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F774227772FC00EB9CB7 /* GdaListBox.cpp */; }; + A178F779227773C500EB9CB7 /* GdaChoice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F777227773C500EB9CB7 /* GdaChoice.cpp */; }; A186F0A11C16508A00AEBA13 /* GdaCartoDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */; }; A1894C3F213F29DC00718FFC /* SpatialJoinDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1894C3D213F29DC00718FFC /* SpatialJoinDlg.cpp */; }; A19483932118BAAA009A87A2 /* composit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A194837A2118BAA7009A87A2 /* composit.cpp */; }; @@ -125,6 +128,7 @@ A4A763F41F69FB3B00EE79DD /* ColocationMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4A763F21F69FB3B00EE79DD /* ColocationMapView.cpp */; }; A4B1F994207730FA00905246 /* matlab_mat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4B1F992207730FA00905246 /* matlab_mat.cpp */; }; A4C4ABFB1F97DA2D00085D47 /* MLJCMapNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4C4ABF91F97DA2D00085D47 /* MLJCMapNewView.cpp */; }; + A4C76B0E225BC4BB00A0729A /* GroupingMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4C76B0D225BC4BB00A0729A /* GroupingMapView.cpp */; }; A4D5423D1F45037B00572878 /* redcap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4D5423B1F45037B00572878 /* redcap.cpp */; }; A4D9A31F1E4D5F3800EF584C /* gdaldata in Resources */ = {isa = PBXBuildFile; fileRef = A4D9A31E1E4D5F3800EF584C /* gdaldata */; }; A4DB2CBC1EEA3A3E00BD4A54 /* Guerry.png in Resources */ = {isa = PBXBuildFile; fileRef = A4DB2CBB1EEA3A3E00BD4A54 /* Guerry.png */; }; @@ -351,6 +355,12 @@ A16BA46F183D626200D3B7DA /* DatasourceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatasourceDlg.h; sourceTree = ""; }; A171FBFE1792332A000DD5A0 /* GdaException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaException.h; sourceTree = ""; }; A17336821C06917B00579354 /* WeightsManInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightsManInterface.h; path = VarCalc/WeightsManInterface.h; sourceTree = ""; }; + A178F771227381CA00EB9CB7 /* DissolveDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DissolveDlg.h; sourceTree = ""; }; + A178F772227381CB00EB9CB7 /* DissolveDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DissolveDlg.cpp; sourceTree = ""; }; + A178F774227772FC00EB9CB7 /* GdaListBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaListBox.cpp; sourceTree = ""; }; + A178F775227772FC00EB9CB7 /* GdaListBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaListBox.h; sourceTree = ""; }; + A178F777227773C500EB9CB7 /* GdaChoice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaChoice.cpp; sourceTree = ""; }; + A178F778227773C500EB9CB7 /* GdaChoice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaChoice.h; sourceTree = ""; }; A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaCartoDB.cpp; sourceTree = ""; }; A186F0A01C16508A00AEBA13 /* GdaCartoDB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaCartoDB.h; sourceTree = ""; }; A1894C3D213F29DC00718FFC /* SpatialJoinDlg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SpatialJoinDlg.cpp; sourceTree = ""; }; @@ -520,6 +530,8 @@ A4B1F99620783CC100905246 /* weights_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = weights_interface.h; path = io/weights_interface.h; sourceTree = ""; }; A4C4ABF91F97DA2D00085D47 /* MLJCMapNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MLJCMapNewView.cpp; sourceTree = ""; }; A4C4ABFA1F97DA2D00085D47 /* MLJCMapNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLJCMapNewView.h; sourceTree = ""; }; + A4C76B0C225BC4BA00A0729A /* GroupingMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupingMapView.h; sourceTree = ""; }; + A4C76B0D225BC4BB00A0729A /* GroupingMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GroupingMapView.cpp; sourceTree = ""; }; A4D5423B1F45037B00572878 /* redcap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = redcap.cpp; path = Algorithms/redcap.cpp; sourceTree = ""; }; A4D5423C1F45037B00572878 /* redcap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = redcap.h; path = Algorithms/redcap.h; sourceTree = ""; }; A4D9A31E1E4D5F3800EF584C /* gdaldata */ = {isa = PBXFileReference; lastKnownFileType = folder; name = gdaldata; path = BuildTools/CommonDistFiles/gdaldata; sourceTree = ""; }; @@ -1220,6 +1232,12 @@ DD7974FE0F1D296F00496A84 /* DialogTools */ = { isa = PBXGroup; children = ( + A178F777227773C500EB9CB7 /* GdaChoice.cpp */, + A178F778227773C500EB9CB7 /* GdaChoice.h */, + A178F774227772FC00EB9CB7 /* GdaListBox.cpp */, + A178F775227772FC00EB9CB7 /* GdaListBox.h */, + A178F772227381CB00EB9CB7 /* DissolveDlg.cpp */, + A178F771227381CA00EB9CB7 /* DissolveDlg.h */, A11EF98D21ED569A00B77413 /* MultiVarSettingsDlg.cpp */, A11EF98C21ED569A00B77413 /* MultiVarSettingsDlg.h */, A4ED7D59209A6B81008685D6 /* HDBScanDlg.cpp */, @@ -1357,6 +1375,8 @@ DD7975B70F1D2A9000496A84 /* Explore */ = { isa = PBXGroup; children = ( + A4C76B0D225BC4BB00A0729A /* GroupingMapView.cpp */, + A4C76B0C225BC4BA00A0729A /* GroupingMapView.h */, A4596B502033DDFF00C9BCC8 /* AbstractClusterMap.cpp */, A4596B4F2033DDFF00C9BCC8 /* AbstractClusterMap.h */, A4596B4D2033DB8E00C9BCC8 /* AbstractCoordinator.cpp */, @@ -1775,6 +1795,7 @@ DD7976BD0F1D2CA800496A84 /* ML_im.cpp in Sources */, DD7976BE0F1D2CA800496A84 /* PowerLag.cpp in Sources */, A414C88B207BED2700520546 /* MatfileReader.cpp in Sources */, + A178F776227772FD00EB9CB7 /* GdaListBox.cpp in Sources */, DD7976BF0F1D2CA800496A84 /* PowerSymLag.cpp in Sources */, DD7976C10F1D2CA800496A84 /* smile2.cpp in Sources */, DD7976C20F1D2CA800496A84 /* SparseMatrix.cpp in Sources */, @@ -1788,6 +1809,7 @@ DD27ECBC0F2E43B5009C5C42 /* GenUtils.cpp in Sources */, DDD13F060F2F8BE1009F7F13 /* GenGeomAlgs.cpp in Sources */, A42018031FB3C0AC0029709C /* skater.cpp in Sources */, + A178F773227381CB00EB9CB7 /* DissolveDlg.cpp in Sources */, A186F0A11C16508A00AEBA13 /* GdaCartoDB.cpp in Sources */, A1B13EE31C3EDFF90064AD87 /* BasemapConfDlg.cpp in Sources */, A1EBC88F1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp in Sources */, @@ -1804,6 +1826,7 @@ A1AC05BF1C8645F300B6FE5F /* AdjustYAxisDlg.cpp in Sources */, A194839A2118BAAA009A87A2 /* lines.cpp in Sources */, DDD593C712E9F90000F7A7C4 /* GalWeight.cpp in Sources */, + A4C76B0E225BC4BB00A0729A /* GroupingMapView.cpp in Sources */, DDD593CA12E9F90C00F7A7C4 /* GwtWeight.cpp in Sources */, DD694685130307C00072386B /* RateSmoothing.cpp in Sources */, A4E00F1020FD8ECD0038BA80 /* localjc_kernel.cl in Sources */, @@ -1928,6 +1951,7 @@ DDA4F0AD196315AF007645E2 /* WeightUtils.cpp in Sources */, DD817EA819676AF100228B0A /* WeightsManState.cpp in Sources */, DD8183C3197054CA00228B0A /* WeightsMapCanvas.cpp in Sources */, + A178F779227773C500EB9CB7 /* GdaChoice.cpp in Sources */, DD8183C81970619800228B0A /* WeightsManDlg.cpp in Sources */, A47614AE20759EAD00D9F3BE /* arcgis_swm.cpp in Sources */, A14735BC21A65F1800CA69B2 /* brute.cpp in Sources */, diff --git a/BuildTools/macosx/build10.7.sh b/BuildTools/macosx/build10.7.sh index d804b7b7a..5559c6d30 100755 --- a/BuildTools/macosx/build10.7.sh +++ b/BuildTools/macosx/build10.7.sh @@ -131,7 +131,8 @@ fi if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then cd $LIB_NAME - ./configure --enable-ares=$PREFIX CC="$GDA_CC" CFLAGS="$GDA_CFLAGS" CXX="$GDA_CXX" CXXFLAGS="$GDA_CXXFLAGS" LDFLAGS="$GDA_LDFLAGS" --prefix=$PREFIX + #./configure --enable-static --enable-ares=$PREFIX --with-ssl=/usr/local/etc/openssl --disable-ldap --disable-ldaps --disable-shared CC="$GDA_CC" CFLAGS="$GDA_CFLAGS" CXX="$GDA_CXX" CXXFLAGS="$GDA_CXXFLAGS" LDFLAGS="$GDA_LDFLAGS" --prefix=$PREFIX + ./configure --with-ssl=/usr/local/opt/openssl --disable-ldap --disable-ldaps LDFLAGS="-L/usr/local/opt/openssl/lib -L/usr/lib" CPPFLAGS="-I/usr/local/opt/openssl/include -mmacosx-version-min=10.7" --without-brotli --prefix=$PREFIX $MAKER make install fi diff --git a/BuildTools/macosx/dep/wxWidgets-3.1.0/include/wx/osx/core/private.h b/BuildTools/macosx/dep/wxWidgets-3.1.0/include/wx/osx/core/private.h new file mode 100644 index 000000000..60c6b8449 --- /dev/null +++ b/BuildTools/macosx/dep/wxWidgets-3.1.0/include/wx/osx/core/private.h @@ -0,0 +1,936 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/osx/core/private.h +// Purpose: Private declarations: as this header is only included by +// wxWidgets itself, it may contain identifiers which don't start +// with "wx". +// Author: Stefan Csomor +// Modified by: +// Created: 1998-01-01 +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_PRIVATE_CORE_H_ +#define _WX_PRIVATE_CORE_H_ + +#include "wx/defs.h" + +#include + +#include "wx/osx/core/cfstring.h" +#include "wx/osx/core/cfdataref.h" + +// platform specific Clang analyzer support +#ifndef NS_RETURNS_RETAINED +# if WX_HAS_CLANG_FEATURE(attribute_ns_returns_retained) +# define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) +# else +# define NS_RETURNS_RETAINED +# endif +#endif + +#ifndef CF_RETURNS_RETAINED +# if WX_HAS_CLANG_FEATURE(attribute_cf_returns_retained) +# define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) +# else +# define CF_RETURNS_RETAINED +# endif +#endif + +#if ( !wxUSE_GUI && !wxOSX_USE_IPHONE ) || wxOSX_USE_COCOA_OR_CARBON + +// Carbon functions are currently still used in wxOSX/Cocoa too (including +// wxBase part of it). +#include + +void WXDLLIMPEXP_CORE wxMacStringToPascal( const wxString&from , unsigned char * to ); +wxString WXDLLIMPEXP_CORE wxMacMakeStringFromPascal( const unsigned char * from ); + +WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL ); +WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef ); +WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname ); + +// keycode utils from app.cpp + +WXDLLIMPEXP_BASE CGKeyCode wxCharCodeWXToOSX(wxKeyCode code); +WXDLLIMPEXP_BASE long wxMacTranslateKey(unsigned char key, unsigned char code); + +#endif + +#if wxUSE_GUI + +#if wxOSX_USE_IPHONE +#include +#else +#include +#endif + +#include "wx/bitmap.h" +#include "wx/window.h" + +class WXDLLIMPEXP_CORE wxMacCGContextStateSaver +{ + wxDECLARE_NO_COPY_CLASS(wxMacCGContextStateSaver); + +public: + wxMacCGContextStateSaver( CGContextRef cg ) + { + m_cg = cg; + CGContextSaveGState( cg ); + } + ~wxMacCGContextStateSaver() + { + CGContextRestoreGState( m_cg ); + } +private: + CGContextRef m_cg; +}; + +class WXDLLIMPEXP_CORE wxDeferredObjectDeleter : public wxObject +{ +public : + wxDeferredObjectDeleter( wxObject* obj ) : m_obj(obj) + { + } + virtual ~wxDeferredObjectDeleter() + { + delete m_obj; + } +protected : + wxObject* m_obj ; +} ; + +// Quartz + +WXDLLIMPEXP_CORE CGImageRef wxMacCreateCGImageFromBitmap( const wxBitmap& bitmap ); + +WXDLLIMPEXP_CORE CGDataProviderRef wxMacCGDataProviderCreateWithCFData( CFDataRef data ); +WXDLLIMPEXP_CORE CGDataConsumerRef wxMacCGDataConsumerCreateWithCFData( CFMutableDataRef data ); +WXDLLIMPEXP_CORE CGDataProviderRef wxMacCGDataProviderCreateWithMemoryBuffer( const wxMemoryBuffer& buf ); + +WXDLLIMPEXP_CORE CGColorSpaceRef wxMacGetGenericRGBColorSpace(void); + +WXDLLIMPEXP_CORE double wxOSXGetMainScreenContentScaleFactor(); + +class wxWindowMac; +// to +extern wxWindow* g_MacLastWindow; +class wxNonOwnedWindow; + +// temporary typedef so that no additional casts are necessary within carbon code at the moment + +class wxMacControl; +class wxWidgetImpl; +class wxComboBox; +class wxNotebook; +class wxTextCtrl; +class wxSearchCtrl; + +WXDLLIMPEXP_CORE wxWindowMac * wxFindWindowFromWXWidget(WXWidget inControl ); + +typedef wxWidgetImpl wxWidgetImplType; + +#if wxUSE_MENUS +class wxMenuItemImpl : public wxObject +{ +public : + wxMenuItemImpl( wxMenuItem* peer ) : m_peer(peer) + { + } + + virtual ~wxMenuItemImpl() ; + virtual void SetBitmap( const wxBitmap& bitmap ) = 0; + virtual void Enable( bool enable ) = 0; + virtual void Check( bool check ) = 0; + virtual void SetLabel( const wxString& text, wxAcceleratorEntry *entry ) = 0; + virtual void Hide( bool hide = true ) = 0; + + virtual void * GetHMenuItem() = 0; + + wxMenuItem* GetWXPeer() { return m_peer ; } + + static wxMenuItemImpl* Create( wxMenuItem* peer, wxMenu *pParentMenu, + int id, + const wxString& text, + wxAcceleratorEntry *entry, + const wxString& strHelp, + wxItemKind kind, + wxMenu *pSubMenu ); + + // handle OS specific menu items if they weren't handled during normal processing + virtual bool DoDefault() { return false; } +protected : + wxMenuItem* m_peer; + + wxDECLARE_ABSTRACT_CLASS(wxMenuItemImpl); +} ; + +class wxMenuImpl : public wxObject +{ +public : + wxMenuImpl( wxMenu* peer ) : m_peer(peer) + { + } + + virtual ~wxMenuImpl() ; + virtual void InsertOrAppend(wxMenuItem *pItem, size_t pos) = 0; + virtual void Remove( wxMenuItem *pItem ) = 0; + + virtual void MakeRoot() = 0; + + virtual void SetTitle( const wxString& text ) = 0; + + virtual WXHMENU GetHMenu() = 0; + + wxMenu* GetWXPeer() { return m_peer ; } + + virtual void PopUp( wxWindow *win, int x, int y ) = 0; + + virtual void GetMenuBarDimensions(int &x, int &y, int &width, int &height) const + { + x = y = width = height = -1; + } + + static wxMenuImpl* Create( wxMenu* peer, const wxString& title ); + static wxMenuImpl* CreateRootMenu( wxMenu* peer ); +protected : + wxMenu* m_peer; + + wxDECLARE_ABSTRACT_CLASS(wxMenuItemImpl); +} ; +#endif + + +class WXDLLIMPEXP_CORE wxWidgetImpl : public wxObject +{ +public : + wxWidgetImpl( wxWindowMac* peer , bool isRootControl = false, bool isUserPane = false ); + wxWidgetImpl(); + virtual ~wxWidgetImpl(); + + void Init(); + + bool IsRootControl() const { return m_isRootControl; } + + bool IsUserPane() const { return m_isUserPane; } + + wxWindowMac* GetWXPeer() const { return m_wxPeer; } + + bool IsOk() const { return GetWXWidget() != NULL; } + + // not only the control itself, but also all its parents must be visible + // in order for this function to return true + virtual bool IsVisible() const = 0; + // set the visibility of this widget (maybe latent) + virtual void SetVisibility( bool visible ) = 0; + + virtual bool ShowWithEffect(bool WXUNUSED(show), + wxShowEffect WXUNUSED(effect), + unsigned WXUNUSED(timeout)) + { + return false; + } + + virtual void Raise() = 0; + + virtual void Lower() = 0; + + virtual void ScrollRect( const wxRect *rect, int dx, int dy ) = 0; + + virtual WXWidget GetWXWidget() const = 0; + + virtual void SetBackgroundColour( const wxColour& col ) = 0; + virtual bool SetBackgroundStyle(wxBackgroundStyle style) = 0; + + // all coordinates in native parent widget relative coordinates + virtual void GetContentArea( int &left , int &top , int &width , int &height ) const = 0; + virtual void Move(int x, int y, int width, int height) = 0; + virtual void GetPosition( int &x, int &y ) const = 0; + virtual void GetSize( int &width, int &height ) const = 0; + virtual void SetControlSize( wxWindowVariant variant ) = 0; + virtual double GetContentScaleFactor() const + { + return 1.0; + } + + // the native coordinates may have an 'aura' for shadows etc, if this is the case the layout + // inset indicates on which insets the real control is drawn + virtual void GetLayoutInset(int &left , int &top , int &right, int &bottom) const + { + left = top = right = bottom = 0; + } + + // native view coordinates are topleft to bottom right (flipped regarding CoreGraphics origin) + virtual bool IsFlipped() const { return true; } + + virtual void SetNeedsDisplay( const wxRect* where = NULL ) = 0; + virtual bool GetNeedsDisplay() const = 0; + + virtual bool NeedsFocusRect() const; + virtual void SetNeedsFocusRect( bool needs ); + + virtual bool NeedsFrame() const; + virtual void SetNeedsFrame( bool needs ); + + virtual void SetDrawingEnabled(bool enabled); + + virtual bool CanFocus() const = 0; + // return true if successful + virtual bool SetFocus() = 0; + virtual bool HasFocus() const = 0; + + virtual void RemoveFromParent() = 0; + virtual void Embed( wxWidgetImpl *parent ) = 0; + + virtual void SetDefaultButton( bool isDefault ) = 0; + virtual void PerformClick() = 0; + virtual void SetLabel( const wxString& title, wxFontEncoding encoding ) = 0; +#if wxUSE_MARKUP && wxOSX_USE_COCOA + virtual void SetLabelMarkup( const wxString& WXUNUSED(markup) ) { } +#endif + virtual void SetInitialLabel( const wxString& title, wxFontEncoding encoding ) + { SetLabel(title, encoding); } + virtual void SetCursor( const wxCursor & cursor ) = 0; + virtual void CaptureMouse() = 0; + virtual void ReleaseMouse() = 0; + + virtual void SetDropTarget( wxDropTarget * WXUNUSED(dropTarget) ) {} + + virtual wxInt32 GetValue() const = 0; + virtual void SetValue( wxInt32 v ) = 0; + virtual wxBitmap GetBitmap() const = 0; + virtual void SetBitmap( const wxBitmap& bitmap ) = 0; + virtual void SetBitmapPosition( wxDirection dir ) = 0; + virtual void SetupTabs( const wxNotebook& WXUNUSED(notebook) ) {} + virtual int TabHitTest( const wxPoint & WXUNUSED(pt), long *flags ) {*flags=1; return -1;} + virtual void GetBestRect( wxRect *r ) const = 0; + virtual bool IsEnabled() const = 0; + virtual void Enable( bool enable ) = 0; + virtual void SetMinimum( wxInt32 v ) = 0; + virtual void SetMaximum( wxInt32 v ) = 0; + virtual wxInt32 GetMinimum() const = 0; + virtual wxInt32 GetMaximum() const = 0; + virtual void PulseGauge() = 0; + virtual void SetScrollThumb( wxInt32 value, wxInt32 thumbSize ) = 0; + + virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true ) = 0; + + virtual void SetToolTip(wxToolTip* WXUNUSED(tooltip)) { } + + // is the clicked event sent AFTER the state already changed, so no additional + // state changing logic is required from the outside + virtual bool ButtonClickDidStateChange() = 0; + + virtual void InstallEventHandler( WXWidget control = NULL ) = 0; + + // Mechanism used to keep track of whether a change should send an event + // Do SendEvents(false) when starting actions that would trigger programmatic events + // and SendEvents(true) at the end of the block. + virtual void SendEvents(bool shouldSendEvents) { m_shouldSendEvents = shouldSendEvents; } + virtual bool ShouldSendEvents() { return m_shouldSendEvents; } + + // static methods for associating native controls and their implementations + + // finds the impl associated with this native control + static wxWidgetImpl* + FindFromWXWidget(WXWidget control); + + // finds the impl associated with this native control, if the native control itself is not known + // also checks whether its parent is eg a registered scrollview, ie whether the control is a native subpart + // of a known control + static wxWidgetImpl* + FindBestFromWXWidget(WXWidget control); + + static void RemoveAssociations( wxWidgetImpl* impl); + + static void Associate( WXWidget control, wxWidgetImpl *impl ); + + static WXWidget FindFocus(); + + // static creation methods, must be implemented by all toolkits + + static wxWidgetImplType* CreateUserPane( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) ; + static wxWidgetImplType* CreateContentView( wxNonOwnedWindow* now ) ; + + static wxWidgetImplType* CreateButton( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) ; + + static wxWidgetImplType* CreateDisclosureTriangle( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) ; + + static wxWidgetImplType* CreateStaticLine( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) ; + + static wxWidgetImplType* CreateGroupBox( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) ; + + static wxWidgetImplType* CreateStaticText( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) ; + + static wxWidgetImplType* CreateTextControl( wxTextCtrl* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& content, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) ; + + static wxWidgetImplType* CreateSearchControl( wxSearchCtrl* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& content, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle) ; + + static wxWidgetImplType* CreateCheckBox( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateRadioButton( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateToggleButton( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateBitmapToggleButton( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxBitmap& bitmap, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateBitmapButton( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxBitmap& bitmap, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateTabView( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateGauge( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + wxInt32 value, + wxInt32 minimum, + wxInt32 maximum, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateSlider( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + wxInt32 value, + wxInt32 minimum, + wxInt32 maximum, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateSpinButton( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + wxInt32 value, + wxInt32 minimum, + wxInt32 maximum, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateScrollBar( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateChoice( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + wxMenu* menu, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + + static wxWidgetImplType* CreateListBox( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); + +#if wxOSX_USE_COCOA + static wxWidgetImplType* CreateComboBox( wxComboBox* wxpeer, + wxWindowMac* parent, + wxWindowID id, + wxMenu* menu, + const wxPoint& pos, + const wxSize& size, + long style, + long extraStyle); +#endif + + // converts from Toplevel-Content relative to local + static void Convert( wxPoint *pt , wxWidgetImpl *from , wxWidgetImpl *to ); +protected : + bool m_isRootControl; + bool m_isUserPane; + wxWindowMac* m_wxPeer; + bool m_needsFocusRect; + bool m_needsFrame; + bool m_shouldSendEvents; + + wxDECLARE_ABSTRACT_CLASS(wxWidgetImpl); +}; + +// +// the interface to be implemented eg by a listbox +// + +class WXDLLIMPEXP_CORE wxListWidgetColumn +{ +public : + virtual ~wxListWidgetColumn() {} +} ; + +class WXDLLIMPEXP_CORE wxListWidgetCellValue +{ +public : + wxListWidgetCellValue() {} + virtual ~wxListWidgetCellValue() {} + + virtual void Set( CFStringRef value ) = 0; + virtual void Set( const wxString& value ) = 0; + virtual void Set( int value ) = 0; + virtual void Check( bool check ); + + virtual bool IsChecked() const; + virtual int GetIntValue() const = 0; + virtual wxString GetStringValue() const = 0; +} ; + +class WXDLLIMPEXP_CORE wxListWidgetImpl +{ +public: + wxListWidgetImpl() {} + virtual ~wxListWidgetImpl() { } + + virtual wxListWidgetColumn* InsertTextColumn( unsigned pos, const wxString& title, bool editable = false, + wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) = 0 ; + virtual wxListWidgetColumn* InsertCheckColumn( unsigned pos , const wxString& title, bool editable = false, + wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) = 0 ; + + // add and remove + + // TODO will be replaced + virtual void ListDelete( unsigned int n ) = 0; + virtual void ListInsert( unsigned int n ) = 0; + virtual void ListClear() = 0; + + // selecting + + virtual void ListDeselectAll() = 0; + virtual void ListSetSelection( unsigned int n, bool select, bool multi ) = 0; + virtual int ListGetSelection() const = 0; + virtual int ListGetSelections( wxArrayInt& aSelections ) const = 0; + virtual bool ListIsSelected( unsigned int n ) const = 0; + + // display + + virtual void ListScrollTo( unsigned int n ) = 0; + virtual int ListGetTopItem() const = 0; + virtual void UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL ) = 0; + virtual void UpdateLineToEnd( unsigned int n) = 0; + + // accessing content + + virtual unsigned int ListGetCount() const = 0; + + virtual int DoListHitTest( const wxPoint& inpoint ) const = 0; +}; + +// +// interface to be implemented by a textcontrol +// + +class WXDLLIMPEXP_FWD_CORE wxTextAttr; +class WXDLLIMPEXP_FWD_CORE wxTextEntry; + +// common interface for all implementations +class WXDLLIMPEXP_CORE wxTextWidgetImpl + +{ +public : + // Any widgets implementing this interface must be associated with a + // wxTextEntry so instead of requiring the derived classes to implement + // another (pure) virtual function, just take the pointer to this entry in + // our ctor and implement GetTextEntry() ourselves. + wxTextWidgetImpl(wxTextEntry *entry) : m_entry(entry) {} + + virtual ~wxTextWidgetImpl() {} + + wxTextEntry *GetTextEntry() const { return m_entry; } + + virtual bool CanFocus() const { return true; } + + virtual wxString GetStringValue() const = 0 ; + virtual void SetStringValue( const wxString &val ) = 0 ; + virtual void SetSelection( long from, long to ) = 0 ; + virtual void GetSelection( long* from, long* to ) const = 0 ; + virtual void WriteText( const wxString& str ) = 0 ; + + virtual bool CanClipMaxLength() const { return false; } + virtual void SetMaxLength(unsigned long WXUNUSED(len)) {} + + virtual bool CanForceUpper() { return false; } + virtual void ForceUpper() {} + + virtual bool GetStyle( long position, wxTextAttr& style); + virtual void SetStyle( long start, long end, const wxTextAttr& style ) ; + virtual void Copy() ; + virtual void Cut() ; + virtual void Paste() ; + virtual bool CanPaste() const ; + virtual void SetEditable( bool editable ) ; + virtual long GetLastPosition() const ; + virtual void Replace( long from, long to, const wxString &str ) ; + virtual void Remove( long from, long to ) ; + + + virtual bool HasOwnContextMenu() const + { return false ; } + + virtual bool SetupCursor( const wxPoint& WXUNUSED(pt) ) + { return false ; } + + virtual void Clear() ; + virtual bool CanUndo() const; + virtual void Undo() ; + virtual bool CanRedo() const; + virtual void Redo() ; + virtual int GetNumberOfLines() const ; + virtual long XYToPosition(long x, long y) const; + virtual bool PositionToXY(long pos, long *x, long *y) const ; + virtual void ShowPosition(long WXUNUSED(pos)) ; + virtual int GetLineLength(long lineNo) const ; + virtual wxString GetLineText(long lineNo) const ; + virtual void CheckSpelling(bool WXUNUSED(check)) { } + + virtual wxSize GetBestSize() const { return wxDefaultSize; } + + virtual bool SetHint(const wxString& WXUNUSED(hint)) { return false; } +private: + wxTextEntry * const m_entry; + + wxDECLARE_NO_COPY_CLASS(wxTextWidgetImpl); +}; + +// common interface for all implementations +class WXDLLIMPEXP_CORE wxComboWidgetImpl + +{ +public : + wxComboWidgetImpl() {} + + virtual ~wxComboWidgetImpl() {} + + virtual int GetSelectedItem() const { return -1; } + virtual void SetSelectedItem(int WXUNUSED(item)) {} + + virtual int GetNumberOfItems() const { return -1; } + + virtual void InsertItem(int WXUNUSED(pos), const wxString& WXUNUSED(item)) {} + + virtual void RemoveItem(int WXUNUSED(pos)) {} + + virtual void Clear() {} + virtual void Popup() {} + virtual void Dismiss() {} + + virtual wxString GetStringAtIndex(int WXUNUSED(pos)) const { return wxEmptyString; } + + virtual int FindString(const wxString& WXUNUSED(text)) const { return -1; } +}; + +// +// common interface for buttons +// + +class wxButtonImpl +{ + public : + wxButtonImpl(){} + virtual ~wxButtonImpl(){} + + virtual void SetPressedBitmap( const wxBitmap& bitmap ) = 0; +} ; + +// +// common interface for search controls +// + +class wxSearchWidgetImpl +{ +public : + wxSearchWidgetImpl(){} + virtual ~wxSearchWidgetImpl(){} + + // search field options + virtual void ShowSearchButton( bool show ) = 0; + virtual bool IsSearchButtonVisible() const = 0; + + virtual void ShowCancelButton( bool show ) = 0; + virtual bool IsCancelButtonVisible() const = 0; + + virtual void SetSearchMenu( wxMenu* menu ) = 0; + + virtual void SetDescriptiveText(const wxString& text) = 0; +} ; + +// +// toplevel window implementation class +// + +class wxNonOwnedWindowImpl : public wxObject +{ +public : + wxNonOwnedWindowImpl( wxNonOwnedWindow* nonownedwnd) : m_wxPeer(nonownedwnd) + { + } + wxNonOwnedWindowImpl() + { + } + virtual ~wxNonOwnedWindowImpl() + { + } + + virtual void WillBeDestroyed() + { + } + + virtual void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size, + long style, long extraStyle, const wxString& name ) = 0; + + + virtual WXWindow GetWXWindow() const = 0; + + virtual void Raise() + { + } + + virtual void Lower() + { + } + + virtual bool Show(bool WXUNUSED(show)) + { + return false; + } + + virtual bool ShowWithEffect(bool show, wxShowEffect WXUNUSED(effect), unsigned WXUNUSED(timeout)) + { + return Show(show); + } + + virtual void Update() + { + } + + virtual bool SetTransparent(wxByte WXUNUSED(alpha)) + { + return false; + } + + virtual bool SetBackgroundColour(const wxColour& WXUNUSED(col) ) + { + return false; + } + + virtual void SetExtraStyle( long WXUNUSED(exStyle) ) + { + } + + virtual void SetWindowStyleFlag( long WXUNUSED(style) ) + { + } + + virtual bool SetBackgroundStyle(wxBackgroundStyle WXUNUSED(style)) + { + return false ; + } + + virtual bool CanSetTransparent() + { + return false; + } + + virtual void GetContentArea( int &left , int &top , int &width , int &height ) const = 0; + virtual void MoveWindow(int x, int y, int width, int height) = 0; + virtual void GetPosition( int &x, int &y ) const = 0; + virtual void GetSize( int &width, int &height ) const = 0; + + virtual bool SetShape(const wxRegion& WXUNUSED(region)) + { + return false; + } + + virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) = 0; + + virtual bool EnableCloseButton(bool enable) = 0; + virtual bool EnableMaximizeButton(bool enable) = 0; + virtual bool EnableMinimizeButton(bool enable) = 0; + + virtual bool IsMaximized() const = 0; + + virtual bool IsIconized() const= 0; + + virtual void Iconize( bool iconize )= 0; + + virtual void Maximize(bool maximize) = 0; + + virtual bool IsFullScreen() const= 0; + + virtual void ShowWithoutActivating() { Show(true); } + + virtual bool EnableFullScreenView(bool enable) = 0; + + virtual bool ShowFullScreen(bool show, long style)= 0; + + virtual void RequestUserAttention(int flags) = 0; + + virtual void ScreenToWindow( int *x, int *y ) = 0; + + virtual void WindowToScreen( int *x, int *y ) = 0; + + virtual bool IsActive() = 0; + + wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; } + + static wxNonOwnedWindowImpl* + FindFromWXWindow(WXWindow window); + + static void RemoveAssociations( wxNonOwnedWindowImpl* impl); + + static void Associate( WXWindow window, wxNonOwnedWindowImpl *impl ); + + // static creation methods, must be implemented by all toolkits + + static wxNonOwnedWindowImpl* CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, WXWindow native) ; + + static wxNonOwnedWindowImpl* CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, const wxPoint& pos, const wxSize& size, + long style, long extraStyle, const wxString& name ) ; + + virtual void SetModified(bool WXUNUSED(modified)) { } + virtual bool IsModified() const { return false; } + + virtual void SetRepresentedFilename(const wxString& WXUNUSED(filename)) { } + +#if wxOSX_USE_IPHONE + virtual CGFloat GetWindowLevel() const { return 0.0; } +#else + virtual CGWindowLevel GetWindowLevel() const { return kCGNormalWindowLevel; } +#endif + virtual void RestoreWindowLevel() {} +protected : + wxNonOwnedWindow* m_wxPeer; + wxDECLARE_ABSTRACT_CLASS(wxNonOwnedWindowImpl); +}; + +#endif // wxUSE_GUI + +//--------------------------------------------------------------------------- +// cocoa bridging utilities +//--------------------------------------------------------------------------- + +bool wxMacInitCocoa(); + +class WXDLLIMPEXP_CORE wxMacAutoreleasePool +{ +public : + wxMacAutoreleasePool(); + ~wxMacAutoreleasePool(); +private : + void* m_pool; +}; + +// NSObject + +void wxMacCocoaRelease( void* obj ); +void wxMacCocoaAutorelease( void* obj ); +void* wxMacCocoaRetain( void* obj ); + + +#endif + // _WX_PRIVATE_CORE_H_ diff --git a/BuildTools/macosx/dep/wxWidgets-3.1.0/src/osx/cocoa/nativewin.mm b/BuildTools/macosx/dep/wxWidgets-3.1.0/src/osx/cocoa/nativewin.mm new file mode 100644 index 000000000..1055c8009 --- /dev/null +++ b/BuildTools/macosx/dep/wxWidgets-3.1.0/src/osx/cocoa/nativewin.mm @@ -0,0 +1,96 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/osx/cocoa/nativewin.mm +// Purpose: wxNativeWindow implementation for wxOSX/Cocoa +// Author: Vadim Zeitlin +// Created: 2015-08-01 +// Copyright: (c) 2015 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#include "wx/nativewin.h" + +#include "wx/osx/private.h" + +// ============================================================================ +// implementation +// ============================================================================ +namespace +{ + + class wxNativeWidgetCocoaImpl : public wxWidgetCocoaImpl +{ +public: + wxNativeWidgetCocoaImpl(wxWindowMac* peer, WXWidget w) : wxWidgetCocoaImpl(peer, w) + {} + + virtual void SetInitialLabel(const wxString& WXUNUSED(title), wxFontEncoding WXUNUSED(encoding)) wxOVERRIDE + { + // Don't set initial label, because the control was created by the + // caller and is already fully setup. And some controls (notably + // NSPathControl) assert if an unexpected string value, such as an empty + // string, is set. + } +}; + + } // anonymous namespace + + +bool +wxNativeWindow::Create(wxWindow* parent, + wxWindowID winid, + wxNativeWindowHandle view) +{ + wxCHECK_MSG( view, false, wxS("NULL NSView pointer") ); + + DontCreatePeer(); + + if ( !wxWindow::Create(parent, winid) ) + return false; + + // We have to ensure that the internal label is synchronized with the label + // at the native window, otherwise calling SetLabel() later might not work + // and, even worse, the native label would be reset to match the (empty) wx + // label by SetPeer(). + // + // Notice that the selectors tested here are the same ones currently used + // by wxWidgetCocoaImpl::SetLabel() and this code would need to be updated + // if that method is. + // + // Also note the casts to "id" needed to suppress the "NSView may not + // respond to selector" warnings: we do test that it responds to them, so + // these warnings are not useful here. + if ( [view respondsToSelector:@selector(title)] ) + m_label = wxCFStringRef::AsString([(id)view title]); + else if ( [view respondsToSelector:@selector(stringValue)] ) + m_label = wxCFStringRef::AsString([(id)view stringValue]); + + // As wxWidgets will release the view when this object is destroyed, retain + // it here to avoid destroying the view owned by the user code. + [view retain]; + SetPeer(new wxNativeWidgetCocoaImpl(this, view)); + + // It doesn't seem necessary to use MacPostControlCreate() here as we never + // change the native control geometry here. + + return true; +} + +void wxNativeWindow::DoDisown() +{ + [GetPeer()->GetWXWidget() release]; +} diff --git a/BuildTools/macosx/dep/wxWidgets-3.1.0/src/osx/window_osx.cpp b/BuildTools/macosx/dep/wxWidgets-3.1.0/src/osx/window_osx.cpp new file mode 100644 index 000000000..97acee559 --- /dev/null +++ b/BuildTools/macosx/dep/wxWidgets-3.1.0/src/osx/window_osx.cpp @@ -0,0 +1,2793 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/osx/window_osx.cpp +// Purpose: wxWindowMac +// Author: Stefan Csomor +// Modified by: +// Created: 1998-01-01 +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" + +#include "wx/window.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/app.h" + #include "wx/utils.h" + #include "wx/panel.h" + #include "wx/frame.h" + #include "wx/dc.h" + #include "wx/dcclient.h" + #include "wx/button.h" + #include "wx/menu.h" + #include "wx/dialog.h" + #include "wx/settings.h" + #include "wx/msgdlg.h" + #include "wx/scrolbar.h" + #include "wx/statbox.h" + #include "wx/textctrl.h" + #include "wx/toolbar.h" + #include "wx/layout.h" + #include "wx/statusbr.h" + #include "wx/menuitem.h" + #include "wx/treectrl.h" + #include "wx/listctrl.h" + #include "wx/platinfo.h" +#endif + +#include "wx/tooltip.h" +#include "wx/spinctrl.h" +#include "wx/geometry.h" +#include "wx/weakref.h" + +#if wxUSE_LISTCTRL + #include "wx/listctrl.h" +#endif + +#if wxUSE_TREECTRL + #include "wx/treectrl.h" +#endif + +#if wxUSE_CARET + #include "wx/caret.h" +#endif + +#if wxUSE_POPUPWIN + #include "wx/popupwin.h" +#endif + +#if wxUSE_DRAG_AND_DROP + #include "wx/dnd.h" +#endif + +#include "wx/graphics.h" + +#include "wx/osx/private.h" + +#define MAC_SCROLLBAR_SIZE 15 +#define MAC_SMALL_SCROLLBAR_SIZE 11 + +#include + +#ifdef __WXUNIVERSAL__ + wxIMPLEMENT_ABSTRACT_CLASS(wxWindowMac, wxWindowBase); +#endif + +wxBEGIN_EVENT_TABLE(wxWindowMac, wxWindowBase) + EVT_MOUSE_EVENTS(wxWindowMac::OnMouseEvent) +wxEND_EVENT_TABLE() + +#define wxMAC_DEBUG_REDRAW 0 +#ifndef wxMAC_DEBUG_REDRAW +#define wxMAC_DEBUG_REDRAW 0 +#endif + +wxWidgetImplType* kOSXNoWidgetImpl = (wxWidgetImplType*) -1L; + +#if wxUSE_HOTKEY && wxOSX_USE_COCOA_OR_CARBON + +typedef struct { + EventHotKeyRef ref; + int keyId; + wxWindow* window; +} wxHotKeyRec; + +wxVector s_hotkeys; + +#endif + +// =========================================================================== +// implementation +// =========================================================================== + +// the grow box has to be implemented as an inactive window, so that nothing can direct +// the focus to it + +class WXDLLIMPEXP_CORE wxBlindPlateWindow : public wxWindow +{ +public: + wxBlindPlateWindow() { Init(); } + + // Old-style constructor (no default values for coordinates to avoid + // ambiguity with the new one) + wxBlindPlateWindow(wxWindow *parent, + int x, int y, int width, int height, + long style = wxTAB_TRAVERSAL | wxNO_BORDER, + const wxString& name = wxPanelNameStr) + { + Init(); + + Create(parent, wxID_ANY, wxPoint(x, y), wxSize(width, height), style, name); + } + + // Constructor + wxBlindPlateWindow(wxWindow *parent, + wxWindowID winid = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL | wxNO_BORDER, + const wxString& name = wxPanelNameStr) + { + Init(); + + Create(parent, winid, pos, size, style, name); + } + + // Pseudo ctor + bool Create(wxWindow *parent, + wxWindowID winid = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL | wxNO_BORDER, + const wxString& name = wxPanelNameStr) + { + if ( !wxWindow::Create(parent, winid, pos, size, style, name) ) + return false; + + // so that non-solid background renders correctly under GTK+: + SetThemeEnabled(true); + return true; + } + + virtual ~wxBlindPlateWindow(); + + virtual bool AcceptsFocus() const wxOVERRIDE + { + return false; + } + +protected: + // common part of all ctors + void Init() + { + } + + wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxBlindPlateWindow); + wxDECLARE_EVENT_TABLE(); +}; + +wxBlindPlateWindow::~wxBlindPlateWindow() +{ +} + +wxIMPLEMENT_DYNAMIC_CLASS(wxBlindPlateWindow, wxWindow); + +wxBEGIN_EVENT_TABLE(wxBlindPlateWindow, wxWindow) +wxEND_EVENT_TABLE() + + +// ---------------------------------------------------------------------------- + // constructors and such +// ---------------------------------------------------------------------------- + +wxWindowMac::wxWindowMac() +{ + Init(); +} + +wxWindowMac::wxWindowMac(wxWindowMac *parent, + wxWindowID id, + const wxPoint& pos , + const wxSize& size , + long style , + const wxString& name ) +{ + Init(); + Create(parent, id, pos, size, style, name); +} + +void wxWindowMac::Init() +{ + m_peer = NULL ; + m_macAlpha = 255 ; + m_cgContextRef = NULL ; + + // as all windows are created with WS_VISIBLE style... + m_isShown = true; + + m_hScrollBar = NULL ; + m_vScrollBar = NULL ; + m_hScrollBarAlwaysShown = false; + m_vScrollBarAlwaysShown = false; + m_growBox = NULL ; + + m_clipChildren = false ; + m_cachedClippedRectValid = false ; + m_isNativeWindowWrapper = false; +} + +wxWindowMac::~wxWindowMac() +{ + SendDestroyEvent(); + +#if wxUSE_HOTKEY && wxOSX_USE_COCOA_OR_CARBON + for ( int i = s_hotkeys.size()-1; i>=0; -- i ) + { + if ( s_hotkeys[i].window == this ) + { + EventHotKeyRef ref = s_hotkeys[i].ref; + s_hotkeys.erase(s_hotkeys.begin() + i); + if ( UnregisterEventHotKey(ref) != noErr ) + { + wxLogLastError(wxT("UnregisterHotKey")); + } + } + } +#endif + + MacInvalidateBorders() ; + +#ifndef __WXUNIVERSAL__ + // VS: make sure there's no wxFrame with last focus set to us: + for ( wxWindow *win = GetParent(); win; win = win->GetParent() ) + { + wxFrame *frame = wxDynamicCast(win, wxFrame); + if ( frame ) + { + if ( frame->GetLastFocus() == this ) + frame->SetLastFocus(NULL); + break; + } + } +#endif + + // destroy children before destroying this window itself + DestroyChildren(); + + // wxRemoveMacControlAssociation( this ) ; + // If we delete an item, we should initialize the parent panel, + // because it could now be invalid. + wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent((wxWindow*)this), wxTopLevelWindow); + if ( tlw ) + { + if ( tlw->GetDefaultItem() == (wxButton*) this) + tlw->SetDefaultItem(NULL); + } + + if ( g_MacLastWindow == this ) + g_MacLastWindow = NULL ; + +#ifndef __WXUNIVERSAL__ + wxFrame* frame = wxDynamicCast( wxGetTopLevelParent( (wxWindow*)this ) , wxFrame ) ; + if ( frame ) + { + if ( frame->GetLastFocus() == this ) + frame->SetLastFocus( NULL ) ; + } +#endif + + // delete our drop target if we've got one +#if wxUSE_DRAG_AND_DROP + wxDELETE(m_dropTarget); +#endif + + delete GetPeer() ; +} + +WXWidget wxWindowMac::GetHandle() const +{ + if ( GetPeer() ) + return (WXWidget) GetPeer()->GetWXWidget() ; + return NULL; +} + +wxOSXWidgetImpl* wxWindowMac::GetPeer() const +{ + return m_peer == kOSXNoWidgetImpl ? NULL : m_peer ; +} + +bool wxWindowMac::ShouldCreatePeer() const +{ + return m_peer != kOSXNoWidgetImpl; +} + +void wxWindowMac::DontCreatePeer() +{ + m_peer = kOSXNoWidgetImpl; +} + +void wxWindowMac::SetWrappingPeer(wxOSXWidgetImpl* wrapper) +{ + wxOSXWidgetImpl* inner = GetPeer(); + wxASSERT_MSG( inner != NULL && inner->IsOk(), "missing or incomplete inner peer" ); + wxASSERT_MSG( wrapper != NULL && wrapper->IsOk(), "missing or incomplete wrapper" ); + + if ( !(inner != NULL && inner->IsOk() && wrapper != NULL && wrapper->IsOk()) ) + return; + + inner->RemoveFromParent(); + wrapper->InstallEventHandler(); + wrapper->Embed(inner); + m_peer = wrapper; +} + +void wxWindowMac::SetPeer(wxOSXWidgetImpl* peer) +{ + if ( GetPeer() ) + { + if ( !GetPeer()->IsRootControl() ) + GetPeer()->RemoveFromParent(); + wxDELETE(m_peer); + } + + m_peer = peer; + + if ( GetPeer() && !GetPeer()->IsRootControl()) + { + wxASSERT_MSG( GetPeer()->IsOk() , wxT("The native control must exist already") ) ; + + if (!GetParent()->GetChildren().Find((wxWindow*)this)) + GetParent()->AddChild( this ); + + GetPeer()->InstallEventHandler(); + GetPeer()->Embed(GetParent()->GetPeer()); + + GetParent()->MacChildAdded() ; + + // adjust font, controlsize etc + GetPeer()->SetControlSize( m_windowVariant ); + InheritAttributes(); + // in case nothing has been set, use the variant default fonts + if ( !m_hasFont ) + DoSetWindowVariant( m_windowVariant ); + + GetPeer()->SetInitialLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ; + + // for controls we want to use best size for wxDefaultSize params ) + if ( !GetPeer()->IsUserPane() ) + SetInitialSize(GetMinSize()); + + SetCursor( *wxSTANDARD_CURSOR ) ; + } +} + +#if WXWIN_COMPATIBILITY_2_8 + +bool wxWindowMac::MacIsUserPane() +{ + return GetPeer() == NULL || GetPeer()->IsUserPane(); +} + +#endif + +bool wxWindowMac::MacIsUserPane() const +{ + return GetPeer() == NULL || GetPeer()->IsUserPane(); +} + +// --------------------------------------------------------------------------- +// Utility Routines to move between different coordinate systems +// --------------------------------------------------------------------------- + +/* + * Right now we have the following setup : + * a border that is not part of the native control is always outside the + * control's border (otherwise we lose all native intelligence, future ways + * may be to have a second embedding control responsible for drawing borders + * and backgrounds eventually) + * so all this border calculations have to be taken into account when calling + * native methods or getting native oriented data + * so we have three coordinate systems here + * wx client coordinates + * wx window coordinates (including window frames) + * native coordinates + */ + +// +// + +// Constructor +bool wxWindowMac::Create(wxWindowMac *parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) +{ + wxCHECK_MSG( parent, false, wxT("can't create wxWindowMac without parent") ); + + if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) ) + return false; + + m_windowVariant = parent->GetWindowVariant() ; + + m_hScrollBarAlwaysShown = + m_vScrollBarAlwaysShown = HasFlag(wxALWAYS_SHOW_SB); + + if ( m_peer != kOSXNoWidgetImpl ) + { + SetPeer(wxWidgetImpl::CreateUserPane( this, parent, id, pos, size , style, GetExtraStyle() )); + MacPostControlCreate(pos, size) ; + } + +#ifndef __WXUNIVERSAL__ + // Don't give scrollbars to wxControls unless they ask for them + if ( (! IsKindOf(CLASSINFO(wxControl)) +#if wxUSE_STATUSBAR + && ! IsKindOf(CLASSINFO(wxStatusBar)) +#endif + ) + || (IsKindOf(CLASSINFO(wxControl)) && ((style & wxHSCROLL) || (style & wxVSCROLL)))) + { + MacCreateScrollBars( style ) ; + } +#endif + + wxWindowCreateEvent event((wxWindow*)this); + GetEventHandler()->AddPendingEvent(event); + + return true; +} + +void wxWindowMac::MacChildAdded() +{ +#if wxUSE_SCROLLBAR + if ( m_vScrollBar ) + m_vScrollBar->Raise() ; + if ( m_hScrollBar ) + m_hScrollBar->Raise() ; + if ( m_growBox ) + m_growBox->Raise() ; +#endif +} + +void wxWindowMac::MacPostControlCreate(const wxPoint& pos, + const wxSize& WXUNUSED(size)) +{ + // Some controls may have a nonzero layout inset, + // so we may need to adjust control position. + if ( pos.IsFullySpecified() && GetPosition() != pos ) + { + SetPosition(pos); + } +} + +void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant ) +{ + // Don't assert, in case we set the window variant before + // the window is created + // wxASSERT( GetPeer()->IsOk() ) ; + + m_windowVariant = variant ; + + if (GetPeer() == NULL || !GetPeer()->IsOk()) + return; + + GetPeer()->SetControlSize( variant ); + + switch ( variant ) + { + case wxWINDOW_VARIANT_NORMAL : + static wxFont sysNormal(wxOSX_SYSTEM_FONT_NORMAL); + SetFont(sysNormal) ; + break ; + + case wxWINDOW_VARIANT_SMALL : + static wxFont sysSmall(wxOSX_SYSTEM_FONT_SMALL); + SetFont(sysSmall) ; + break ; + + case wxWINDOW_VARIANT_MINI : + static wxFont sysMini(wxOSX_SYSTEM_FONT_MINI); + SetFont(sysMini) ; + break ; + + case wxWINDOW_VARIANT_LARGE : + static wxFont sysLarge(wxOSX_SYSTEM_FONT_NORMAL); + SetFont(sysLarge) ; + break ; + + default: + wxFAIL_MSG(wxT("unexpected window variant")); + break ; + } +} + +void wxWindowMac::MacUpdateControlFont() +{ + if ( GetPeer() ) + GetPeer()->SetFont( GetFont() , GetForegroundColour() , GetWindowStyle() ) ; + + // do not trigger refreshes upon invisible and possible partly created objects + if ( IsShownOnScreen() ) + Refresh() ; +} + +bool wxWindowMac::SetFont(const wxFont& font) +{ + bool retval = wxWindowBase::SetFont( font ); + + MacUpdateControlFont() ; + + return retval; +} + +bool wxWindowMac::SetForegroundColour(const wxColour& col ) +{ + bool retval = wxWindowBase::SetForegroundColour( col ); + + if (retval) + MacUpdateControlFont(); + + return retval; +} + +bool wxWindowMac::SetBackgroundStyle(wxBackgroundStyle style) +{ + if ( !wxWindowBase::SetBackgroundStyle(style) ) + return false; + + if ( GetPeer() ) + GetPeer()->SetBackgroundStyle(style); + return true; +} + +bool wxWindowMac::SetBackgroundColour(const wxColour& col ) +{ + if (m_growBox) + { + if ( m_backgroundColour.IsOk() ) + m_growBox->SetBackgroundColour(m_backgroundColour); + else + m_growBox->SetBackgroundColour(*wxWHITE); + } + + if ( !wxWindowBase::SetBackgroundColour(col) && m_hasBgCol ) + return false ; + + if ( GetPeer() ) + GetPeer()->SetBackgroundColour( col ) ; + + return true ; +} + +static bool wxIsWindowOrParentDisabled(wxWindow* w) +{ + while (w && !w->IsTopLevel()) + { + if (!w->IsEnabled()) + return true; + w = w->GetParent(); + } + return false; +} + +void wxWindowMac::SetFocus() +{ + if ( !AcceptsFocus() ) + return ; + + if (wxIsWindowOrParentDisabled((wxWindow*) this)) + return; + + wxWindow* former = FindFocus() ; + if ( former == this ) + return ; + + GetPeer()->SetFocus() ; +} + +void wxWindowMac::OSXSimulateFocusEvents() +{ + wxWeakRef former = FindFocus() ; + if ( former != NULL && former != this ) + { + { + wxFocusEvent event( wxEVT_KILL_FOCUS, former->GetId()); + event.SetEventObject(former); + event.SetWindow(this); + former->HandleWindowEvent(event) ; + } + + // 'former' could have been destroyed by a wxEVT_KILL_FOCUS handler, + // so we must test it for non-NULL again + if ( former ) + { + wxFocusEvent event(wxEVT_SET_FOCUS, former->GetId()); + event.SetEventObject(former); + event.SetWindow(this); + former->HandleWindowEvent(event); + } + } +} + +void wxWindowMac::DoCaptureMouse() +{ + wxApp::s_captureWindow = (wxWindow*) this ; + GetPeer()->CaptureMouse() ; +} + +wxWindow * wxWindowBase::GetCapture() +{ + return wxApp::s_captureWindow ; +} + +void wxWindowMac::DoReleaseMouse() +{ + wxApp::s_captureWindow = NULL ; + + GetPeer()->ReleaseMouse() ; +} + +#if wxUSE_DRAG_AND_DROP + +void wxWindowMac::SetDropTarget(wxDropTarget *pDropTarget) +{ + delete m_dropTarget; + + m_dropTarget = pDropTarget; + + GetPeer()->SetDropTarget(m_dropTarget) ; +} + +#endif + +// Old-style File Manager Drag & Drop +void wxWindowMac::DragAcceptFiles(bool WXUNUSED(accept)) +{ + // TODO: +} + +// From a wx position / size calculate the appropriate size of the native control + +bool wxWindowMac::MacGetBoundsForControl( + const wxPoint& pos, + const wxSize& size, + int& x, int& y, + int& w, int& h , bool adjustOrigin ) const +{ + // the desired size, minus the border pixels gives the correct size of the control + x = (int)pos.x; + y = (int)pos.y; + + w = WidthDefault( size.x ); + h = HeightDefault( size.y ); + + x += MacGetLeftBorderSize() ; + y += MacGetTopBorderSize() ; + w -= MacGetLeftBorderSize() + MacGetRightBorderSize() ; + h -= MacGetTopBorderSize() + MacGetBottomBorderSize() ; + + if ( adjustOrigin ) + AdjustForParentClientOrigin( x , y ) ; + + // this is in window relative coordinate, as this parent may have a border, its physical position is offset by this border + if ( GetParent() && !GetParent()->IsTopLevel() ) + { + x -= GetParent()->MacGetLeftBorderSize() ; + y -= GetParent()->MacGetTopBorderSize() ; + } + + return true ; +} + +// Get window size (not client size) +void wxWindowMac::DoGetSize(int *x, int *y) const +{ + int width, height; + GetPeer()->GetSize( width, height ); + + if (x) + *x = width + MacGetLeftBorderSize() + MacGetRightBorderSize() ; + if (y) + *y = height + MacGetTopBorderSize() + MacGetBottomBorderSize() ; +} + +// get the position of the bounds of this window in client coordinates of its parent +void wxWindowMac::DoGetPosition(int *x, int *y) const +{ + int x1, y1; + + GetPeer()->GetPosition( x1, y1 ) ; + + // get the wx window position from the native one + x1 -= MacGetLeftBorderSize() ; + y1 -= MacGetTopBorderSize() ; + + if ( !IsTopLevel() ) + { + wxWindow *parent = GetParent(); + if ( parent ) + { + // we must first adjust it to be in window coordinates of the parent, + // as otherwise it gets lost by the ClientAreaOrigin fix + x1 += parent->MacGetLeftBorderSize() ; + y1 += parent->MacGetTopBorderSize() ; + + // and now to client coordinates + wxPoint pt(parent->GetClientAreaOrigin()); + x1 -= pt.x ; + y1 -= pt.y ; + } + } + + if (x) + *x = x1 ; + if (y) + *y = y1 ; +} + +void wxWindowMac::DoScreenToClient(int *x, int *y) const +{ + wxNonOwnedWindow* tlw = MacGetTopLevelWindow() ; + wxCHECK_RET( tlw , wxT("TopLevel Window missing") ) ; + tlw->GetNonOwnedPeer()->ScreenToWindow( x, y); + MacRootWindowToWindow( x , y ) ; + + wxPoint origin = GetClientAreaOrigin() ; + if (x) + *x -= origin.x ; + if (y) + *y -= origin.y ; +} + +void wxWindowMac::DoClientToScreen(int *x, int *y) const +{ + wxNonOwnedWindow* tlw = MacGetTopLevelWindow() ; + wxCHECK_RET( tlw , wxT("TopLevel window missing") ) ; + + wxPoint origin = GetClientAreaOrigin() ; + if (x) + *x += origin.x ; + if (y) + *y += origin.y ; + + MacWindowToRootWindow( x , y ) ; + tlw->GetNonOwnedPeer()->WindowToScreen( x , y ); +} + +void wxWindowMac::MacClientToRootWindow( int *x , int *y ) const +{ + wxPoint origin = GetClientAreaOrigin() ; + if (x) + *x += origin.x ; + if (y) + *y += origin.y ; + + MacWindowToRootWindow( x , y ) ; +} + +void wxWindowMac::MacWindowToRootWindow( int *x , int *y ) const +{ + wxPoint pt ; + + if (x) + pt.x = *x ; + if (y) + pt.y = *y ; + + if ( !IsTopLevel() ) + { + wxNonOwnedWindow* top = MacGetTopLevelWindow(); + if (top) + { + pt.x -= MacGetLeftBorderSize() ; + pt.y -= MacGetTopBorderSize() ; + wxWidgetImpl::Convert( &pt , GetPeer() , top->GetPeer() ) ; + } + } + + if (x) + *x = (int) pt.x ; + if (y) + *y = (int) pt.y ; +} + +void wxWindowMac::MacRootWindowToWindow( int *x , int *y ) const +{ + wxPoint pt ; + + if (x) + pt.x = *x ; + if (y) + pt.y = *y ; + + if ( !IsTopLevel() ) + { + wxNonOwnedWindow* top = MacGetTopLevelWindow(); + if (top) + { + wxWidgetImpl::Convert( &pt , top->GetPeer() , GetPeer() ) ; + pt.x += MacGetLeftBorderSize() ; + pt.y += MacGetTopBorderSize() ; + } + } + + if (x) + *x = (int) pt.x ; + if (y) + *y = (int) pt.y ; +} + +wxSize wxWindowMac::DoGetSizeFromClientSize( const wxSize & size ) const +{ + wxSize sizeTotal = size; + + int innerwidth, innerheight; + int left, top; + int outerwidth, outerheight; + + GetPeer()->GetContentArea( left, top, innerwidth, innerheight ); + GetPeer()->GetSize( outerwidth, outerheight ); + + sizeTotal.x += outerwidth-innerwidth; + sizeTotal.y += outerheight-innerheight; + + sizeTotal.x += MacGetLeftBorderSize() + MacGetRightBorderSize() ; + sizeTotal.y += MacGetTopBorderSize() + MacGetBottomBorderSize() ; + + return sizeTotal; +} + +// Get size *available for subwindows* i.e. excluding menu bar etc. +void wxWindowMac::DoGetClientSize( int *x, int *y ) const +{ + int ww, hh; + + int left, top; + + GetPeer()->GetContentArea( left, top, ww, hh ); +#if wxUSE_SCROLLBAR + if (m_hScrollBar && m_hScrollBar->IsShown() ) + hh -= m_hScrollBar->GetSize().y ; + + if (m_vScrollBar && m_vScrollBar->IsShown() ) + ww -= m_vScrollBar->GetSize().x ; + +#endif + if (x) + { + // we shouldn't return invalid width + if ( ww < 0 ) + ww = 0; + + *x = ww; + } + + if (y) + { + // we shouldn't return invalid height + if ( hh < 0 ) + hh = 0; + + *y = hh; + } +} + +bool wxWindowMac::SetCursor(const wxCursor& cursor) +{ + if (m_cursor.IsSameAs(cursor)) + return false; + + if (!cursor.IsOk()) + { + if ( ! wxWindowBase::SetCursor( *wxSTANDARD_CURSOR ) ) + return false ; + } + else + { + if ( ! wxWindowBase::SetCursor( cursor ) ) + return false ; + } + + wxASSERT_MSG( m_cursor.IsOk(), + wxT("cursor must be valid after call to the base version")); + + if ( GetPeer() != NULL ) + GetPeer()->SetCursor( m_cursor ); + + return true ; +} + +#if wxUSE_MENUS +bool wxWindowMac::DoPopupMenu(wxMenu *menu, int x, int y) +{ +#ifndef __WXUNIVERSAL__ + if ( x == wxDefaultCoord && y == wxDefaultCoord ) + { + wxPoint mouse = wxGetMousePosition(); + x = mouse.x; + y = mouse.y; + } + else + { + ClientToScreen( &x , &y ) ; + } + menu->GetPeer()->PopUp(this, x, y); + return true; +#else + // actually this shouldn't be called, because universal is having its own implementation + return false; +#endif +} +#endif + +// ---------------------------------------------------------------------------- +// tooltips +// ---------------------------------------------------------------------------- + +#if wxUSE_TOOLTIPS + +void wxWindowMac::DoSetToolTip(wxToolTip *tooltip) +{ + wxWindowBase::DoSetToolTip(tooltip); + + if ( m_tooltip ) + m_tooltip->SetWindow(this); + + if (GetPeer()) + GetPeer()->SetToolTip(tooltip); +} + +#endif + +void wxWindowMac::MacInvalidateBorders() +{ + if ( GetPeer() == NULL ) + return ; + + bool vis = IsShownOnScreen() ; + if ( !vis ) + return ; + + int outerBorder = MacGetLeftBorderSize() ; + + if ( GetPeer()->NeedsFocusRect() ) + outerBorder += 4 ; + + if ( outerBorder == 0 ) + return ; + + // now we know that we have something to do at all + + int tx,ty,tw,th; + + GetPeer()->GetSize( tw, th ); + GetPeer()->GetPosition( tx, ty ); + + wxRect leftupdate( tx-outerBorder,ty,outerBorder,th ); + wxRect rightupdate( tx+tw, ty, outerBorder, th ); + wxRect topupdate( tx-outerBorder, ty-outerBorder, tw + 2 * outerBorder, outerBorder ); + wxRect bottomupdate( tx-outerBorder, ty + th, tw + 2 * outerBorder, outerBorder ); + + if (GetParent()) { + GetParent()->GetPeer()->SetNeedsDisplay(&leftupdate); + GetParent()->GetPeer()->SetNeedsDisplay(&rightupdate); + GetParent()->GetPeer()->SetNeedsDisplay(&topupdate); + GetParent()->GetPeer()->SetNeedsDisplay(&bottomupdate); + } +} + +void wxWindowMac::DoMoveWindow(int x, int y, int width, int height) +{ + // this is never called for a toplevel window, so we know we have a parent + int former_x , former_y , former_w, former_h ; + + // Get true coordinates of former position + DoGetPosition( &former_x , &former_y ) ; + DoGetSize( &former_w , &former_h ) ; + + wxWindow *parent = GetParent(); + if ( parent ) + { + wxPoint pt(parent->GetClientAreaOrigin()); + former_x += pt.x ; + former_y += pt.y ; + } + + int actualWidth = width ; + int actualHeight = height ; + int actualX = x; + int actualY = y; + +#if 0 + // min and max sizes are only for sizers, not for explicit size setting + if ((m_minWidth != -1) && (actualWidth < m_minWidth)) + actualWidth = m_minWidth; + if ((m_minHeight != -1) && (actualHeight < m_minHeight)) + actualHeight = m_minHeight; + if ((m_maxWidth != -1) && (actualWidth > m_maxWidth)) + actualWidth = m_maxWidth; + if ((m_maxHeight != -1) && (actualHeight > m_maxHeight)) + actualHeight = m_maxHeight; +#endif + + bool doMove = false, doResize = false ; + + if ( actualX != former_x || actualY != former_y ) + doMove = true ; + + if ( actualWidth != former_w || actualHeight != former_h ) + doResize = true ; + + if ( doMove || doResize ) + { + // as the borders are drawn outside the native control, we adjust now + + wxRect bounds( wxPoint( actualX + MacGetLeftBorderSize() ,actualY + MacGetTopBorderSize() ), + wxSize( actualWidth - (MacGetLeftBorderSize() + MacGetRightBorderSize()) , + actualHeight - (MacGetTopBorderSize() + MacGetBottomBorderSize()) ) ) ; + + if ( parent && !parent->IsTopLevel() ) + { + bounds.Offset( -parent->MacGetLeftBorderSize(), -parent->MacGetTopBorderSize() ); + } + + MacInvalidateBorders() ; + + m_cachedClippedRectValid = false ; + + GetPeer()->Move( bounds.x, bounds.y, bounds.width, bounds.height); + + wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified + + MacInvalidateBorders() ; + + MacRepositionScrollBars() ; + if ( doMove ) + { + wxPoint point(actualX, actualY); + wxMoveEvent event(point, m_windowId); + event.SetEventObject(this); + HandleWindowEvent(event) ; + } + + if ( doResize ) + { + MacRepositionScrollBars() ; + SendSizeEvent(); + } + } +} + +wxSize wxWindowMac::DoGetBestSize() const +{ + if ( GetPeer() == NULL || GetPeer()->IsUserPane() || IsTopLevel() ) + { + return wxWindowBase::DoGetBestSize() ; + } + else + { + wxRect r ; + + GetPeer()->GetBestRect(&r); + + if ( r.GetWidth() == 0 && r.GetHeight() == 0 ) + { + r.x = + r.y = 0 ; + r.width = + r.height = 16 ; + +#if wxUSE_SCROLLBAR + if ( IsKindOf( CLASSINFO( wxScrollBar ) ) ) + { + r.height = 16 ; + } + else +#endif +#if wxUSE_SPINBTN + if ( IsKindOf( CLASSINFO( wxSpinButton ) ) ) + { + r.height = 24 ; + } + else +#endif + { + // return wxWindowBase::DoGetBestSize() ; + } + } + + int bestWidth = r.width + MacGetLeftBorderSize() + + MacGetRightBorderSize(); + int bestHeight = r.height + MacGetTopBorderSize() + + MacGetBottomBorderSize(); + if ( bestHeight < 10 ) + bestHeight = 13 ; + + return wxSize(bestWidth, bestHeight); + } +} + +void wxWindowMac::SendSizeEvent(int flags) +{ + MacOnInternalSize(); + wxWindowBase::SendSizeEvent(flags); +} + +// set the size of the window: if the dimensions are positive, just use them, +// but if any of them is equal to -1, it means that we must find the value for +// it ourselves (unless sizeFlags contains wxSIZE_ALLOW_MINUS_ONE flag, in +// which case -1 is a valid value for x and y) +// +// If sizeFlags contains wxSIZE_AUTO_WIDTH/HEIGHT flags (default), we calculate +// the width/height to best suit our contents, otherwise we reuse the current +// width/height +void wxWindowMac::DoSetSize(int x, int y, int width, int height, int sizeFlags) +{ + // get the current size and position... + int currentX, currentY; + int currentW, currentH; + + GetPosition(¤tX, ¤tY); + GetSize(¤tW, ¤tH); + + // ... and don't do anything (avoiding flicker) if it's already ok + if ( x == currentX && y == currentY && + width == currentW && height == currentH && ( height != -1 && width != -1 ) ) + { + // TODO: REMOVE + MacRepositionScrollBars() ; // we might have a real position shift + + if (sizeFlags & wxSIZE_FORCE_EVENT) + { + SendSizeEvent(); + } + + return; + } + + if ( !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) ) + { + if ( x == wxDefaultCoord ) + x = currentX; + if ( y == wxDefaultCoord ) + y = currentY; + } + + AdjustForParentClientOrigin( x, y, sizeFlags ); + + wxSize size = wxDefaultSize; + if ( width == wxDefaultCoord ) + { + if ( sizeFlags & wxSIZE_AUTO_WIDTH ) + { + size = DoGetBestSize(); + width = size.x; + } + else + { + // just take the current one + width = currentW; + } + } + + if ( height == wxDefaultCoord ) + { + if ( sizeFlags & wxSIZE_AUTO_HEIGHT ) + { + if ( size.x == wxDefaultCoord ) + size = DoGetBestSize(); + // else: already called DoGetBestSize() above + + height = size.y; + } + else + { + // just take the current one + height = currentH; + } + } + + DoMoveWindow( x, y, width, height ); +} + +wxPoint wxWindowMac::GetClientAreaOrigin() const +{ + int left,top,width,height; + GetPeer()->GetContentArea( left , top , width , height); + return wxPoint( left + MacGetLeftBorderSize() , top + MacGetTopBorderSize() ); +} + +void wxWindowMac::DoSetClientSize(int clientwidth, int clientheight) +{ + if ( clientwidth != wxDefaultCoord || clientheight != wxDefaultCoord ) + { + int currentclientwidth , currentclientheight ; + int currentwidth , currentheight ; + + GetClientSize( ¤tclientwidth , ¤tclientheight ) ; + GetSize( ¤twidth , ¤theight ) ; + + DoSetSize( wxDefaultCoord , wxDefaultCoord , currentwidth + clientwidth - currentclientwidth , + currentheight + clientheight - currentclientheight , wxSIZE_USE_EXISTING ) ; + } +} + +double wxWindowMac::GetContentScaleFactor() const +{ + return GetPeer()->GetContentScaleFactor(); +} + +void wxWindowMac::SetLabel(const wxString& title) +{ + if ( title == m_label ) + return; + + m_label = title ; + + InvalidateBestSize(); + + if ( GetPeer() && GetPeer()->IsOk() ) + GetPeer()->SetLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ; + + // do not trigger refreshes upon invisible and possible partly created objects + if ( IsShownOnScreen() ) + Refresh() ; +} + +wxString wxWindowMac::GetLabel() const +{ + return m_label ; +} + +bool wxWindowMac::Show(bool show) +{ + if ( !show ) + MacInvalidateBorders(); + + if ( !wxWindowBase::Show(show) ) + return false; + + if ( GetPeer() ) + GetPeer()->SetVisibility( show ) ; + + if ( show ) + MacInvalidateBorders(); + +#ifdef __WXOSX_IPHONE__ + // only when there's no native event support + if ( !IsTopLevel() ) +#endif + { + wxShowEvent eventShow(GetId(), show); + eventShow.SetEventObject(this); + + HandleWindowEvent(eventShow); + } + + return true; +} + +bool wxWindowMac::OSXShowWithEffect(bool show, + wxShowEffect effect, + unsigned timeout) +{ + if ( effect == wxSHOW_EFFECT_NONE || + !GetPeer() || !GetPeer()->ShowWithEffect(show, effect, timeout) ) + return Show(show); + + return true; +} + +void wxWindowMac::DoEnable(bool enable) +{ + GetPeer()->Enable( enable ) ; + MacInvalidateBorders(); +} + +// +// status change notifications +// + +void wxWindowMac::MacVisibilityChanged() +{ +} + +void wxWindowMac::MacHiliteChanged() +{ +} + +void wxWindowMac::MacEnabledStateChanged() +{ +} + +// +// status queries on the inherited window's state +// + +bool wxWindowMac::MacIsReallyEnabled() +{ + return GetPeer()->IsEnabled() ; +} + +bool wxWindowMac::MacIsReallyHilited() +{ + return true; // TODO +} + +int wxWindowMac::GetCharHeight() const +{ + wxCoord height; + GetTextExtent( wxT("g") , NULL , &height , NULL , NULL , NULL ); + + return height; +} + +int wxWindowMac::GetCharWidth() const +{ + wxCoord width; + GetTextExtent( wxT("g") , &width , NULL , NULL , NULL , NULL ); + + return width; +} + +void wxWindowMac::DoGetTextExtent(const wxString& str, + int *x, int *y, + int *descent, + int *externalLeading, + const wxFont *theFont) const +{ + const wxFont *fontToUse = theFont; + wxFont tempFont; + if ( !fontToUse ) + { + tempFont = GetFont(); + fontToUse = &tempFont; + } + + wxGraphicsContext* ctx = wxGraphicsContext::Create(); + ctx->SetFont( *fontToUse, *wxBLACK ); + + wxDouble h , d , e , w; + ctx->GetTextExtent( str, &w, &h, &d, &e ); + + delete ctx; + + if ( externalLeading ) + *externalLeading = (wxCoord)(e+0.5); + if ( descent ) + *descent = (wxCoord)(d+0.5); + if ( x ) + *x = (wxCoord)(w+0.5); + if ( y ) + *y = (wxCoord)(h+0.5); +} + +/* + * Rect is given in client coordinates, for further reading, read wxTopLevelWindowMac::InvalidateRect + * we always intersect with the entire window, not only with the client area + */ + +void wxWindowMac::Refresh(bool WXUNUSED(eraseBack), const wxRect *rect) +{ + if ( GetPeer() == NULL ) + return ; + + if ( !IsShownOnScreen() ) + return ; + + if ( IsFrozen() ) + return; + + GetPeer()->SetNeedsDisplay( rect ) ; +} + +void wxWindowMac::DoFreeze() +{ + if ( GetPeer() && GetPeer()->IsOk() ) + GetPeer()->SetDrawingEnabled( false ) ; +} + +void wxWindowMac::DoThaw() +{ + if ( GetPeer() && GetPeer()->IsOk() ) + GetPeer()->SetDrawingEnabled( true ) ; +} + +wxWindow *wxGetActiveWindow() +{ + // actually this is a windows-only concept + return NULL; +} + +// Coordinates relative to the window +void wxWindowMac::WarpPointer(int x_pos, int y_pos) +{ +#if wxOSX_USE_COCOA_OR_CARBON + int x = x_pos; + int y = y_pos; + DoClientToScreen(&x, &y); + CGPoint cgpoint = CGPointMake( x, y ); + CGWarpMouseCursorPosition( cgpoint ); + CGAssociateMouseAndMouseCursorPosition(true); + + // At least GTK sends a mouse moved event after WarpMouse + wxMouseEvent event(wxEVT_MOTION); + event.m_x = x_pos; + event.m_y = y_pos; + wxMouseState mState = ::wxGetMouseState(); + + event.m_altDown = mState.AltDown(); + event.m_controlDown = mState.ControlDown(); + event.m_leftDown = mState.LeftIsDown(); + event.m_middleDown = mState.MiddleIsDown(); + event.m_rightDown = mState.RightIsDown(); + event.m_metaDown = mState.MetaDown(); + event.m_shiftDown = mState.ShiftDown(); + event.SetId(GetId()); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); +#endif +} + +int wxWindowMac::GetScrollPos(int orient) const +{ +#if wxUSE_SCROLLBAR + if ( orient == wxHORIZONTAL ) + { + if ( m_hScrollBar ) + return m_hScrollBar->GetThumbPosition() ; + } + else + { + if ( m_vScrollBar ) + return m_vScrollBar->GetThumbPosition() ; + } +#endif + return 0; +} + +// This now returns the whole range, not just the number +// of positions that we can scroll. +int wxWindowMac::GetScrollRange(int orient) const +{ +#if wxUSE_SCROLLBAR + if ( orient == wxHORIZONTAL ) + { + if ( m_hScrollBar ) + return m_hScrollBar->GetRange() ; + } + else + { + if ( m_vScrollBar ) + return m_vScrollBar->GetRange() ; + } +#endif + return 0; +} + +int wxWindowMac::GetScrollThumb(int orient) const +{ +#if wxUSE_SCROLLBAR + if ( orient == wxHORIZONTAL ) + { + if ( m_hScrollBar ) + return m_hScrollBar->GetThumbSize() ; + } + else + { + if ( m_vScrollBar ) + return m_vScrollBar->GetThumbSize() ; + } +#endif + return 0; +} + +void wxWindowMac::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh)) +{ +#if wxUSE_SCROLLBAR + if ( orient == wxHORIZONTAL ) + { + if ( m_hScrollBar ) + m_hScrollBar->SetThumbPosition( pos ) ; + } + else + { + if ( m_vScrollBar ) + m_vScrollBar->SetThumbPosition( pos ) ; + } +#endif +} + +void +wxWindowMac::AlwaysShowScrollbars(bool hflag, bool vflag) +{ + bool needVisibilityUpdate = false; + + if ( m_hScrollBarAlwaysShown != hflag ) + { + m_hScrollBarAlwaysShown = hflag; + needVisibilityUpdate = true; + } + + if ( m_vScrollBarAlwaysShown != vflag ) + { + m_vScrollBarAlwaysShown = vflag; + needVisibilityUpdate = true; + } + + if ( needVisibilityUpdate ) + DoUpdateScrollbarVisibility(); +} + +// +// we draw borders and grow boxes, are already set up and clipped in the current port / cgContextRef +// our own window origin is at leftOrigin/rightOrigin +// + +void wxWindowMac::MacPaintGrowBox() +{ + if ( IsTopLevel() ) + return ; + +#if wxUSE_SCROLLBAR + if ( MacHasScrollBarCorner() ) + { +#if 0 + CGContextRef cgContext = (CGContextRef) MacGetCGContextRef() ; + wxASSERT( cgContext ) ; + + int tx,ty,tw,th; + + GetPeer()->GetSize( tw, th ); + GetPeer()->GetPosition( tx, ty ); + + Rect rect = { ty,tx, ty+th, tx+tw }; + + + int size = m_hScrollBar ? m_hScrollBar->GetSize().y : ( m_vScrollBar ? m_vScrollBar->GetSize().x : MAC_SCROLLBAR_SIZE ) ; + CGRect cgrect = CGRectMake( rect.right - size , rect.bottom - size , size , size ) ; + CGContextSaveGState( cgContext ); + + if ( m_backgroundColour.IsOk() ) + { + CGContextSetFillColorWithColor( cgContext, m_backgroundColour.GetCGColor() ); + } + else + { + CGContextSetRGBFillColor( cgContext, (CGFloat) 1.0, (CGFloat)1.0 ,(CGFloat) 1.0 , (CGFloat)1.0 ); + } + CGContextFillRect( cgContext, cgrect ); + CGContextRestoreGState( cgContext ); +#else + if (m_growBox) + { + if ( m_backgroundColour.IsOk() ) + m_growBox->SetBackgroundColour(m_backgroundColour); + else + m_growBox->SetBackgroundColour(*wxWHITE); + } +#endif + } + +#endif +} + +void wxWindowMac::MacPaintBorders( int WXUNUSED(leftOrigin) , int WXUNUSED(rightOrigin) ) +{ + if ( IsTopLevel() ) + return ; + + // back to the surrounding frame rectangle + int tx,ty,tw,th; + + GetPeer()->GetSize( tw, th ); + GetPeer()->GetPosition( tx, ty ); + +#if wxOSX_USE_COCOA_OR_CARBON + { + const bool hasFocus = GetPeer()->NeedsFocusRect() && HasFocus(); + + CGRect cgrect = CGRectMake( tx-1 , ty-1 , tw+2 , + th+2 ) ; + + CGContextRef cgContext = (CGContextRef) GetParent()->MacGetCGContextRef() ; + wxASSERT( cgContext ) ; + + if ( GetPeer()->NeedsFrame() ) + { + HIThemeFrameDrawInfo info ; + memset( &info, 0 , sizeof(info) ) ; + + info.version = 0 ; + info.kind = 0 ; + info.state = IsEnabled() ? kThemeStateActive : kThemeStateInactive ; + info.isFocused = hasFocus ; + + if ( HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) ) + { + info.kind = kHIThemeFrameTextFieldSquare ; + HIThemeDrawFrame( &cgrect , &info , cgContext , kHIThemeOrientationNormal ) ; + } + else if ( HasFlag(wxSIMPLE_BORDER) ) + { + info.kind = kHIThemeFrameListBox ; + HIThemeDrawFrame( &cgrect , &info , cgContext , kHIThemeOrientationNormal ) ; + } + } + + if ( hasFocus ) + { + HIThemeDrawFocusRect( &cgrect , true , cgContext , kHIThemeOrientationNormal ) ; + } + } +#endif // wxOSX_USE_COCOA_OR_CARBON +} + +void wxWindowMac::RemoveChild( wxWindowBase *child ) +{ +#if wxUSE_SCROLLBAR + if ( child == m_hScrollBar ) + m_hScrollBar = NULL ; + if ( child == m_vScrollBar ) + m_vScrollBar = NULL ; + if ( child == m_growBox ) + m_growBox = NULL ; +#endif + wxWindowBase::RemoveChild( child ) ; +} + +void wxWindowMac::DoUpdateScrollbarVisibility() +{ +#if wxUSE_SCROLLBAR + bool triggerSizeEvent = false; + + if ( m_hScrollBar ) + { + bool showHScrollBar = m_hScrollBarAlwaysShown || m_hScrollBar->IsNeeded(); + + if ( m_hScrollBar->IsShown() != showHScrollBar ) + { + m_hScrollBar->Show( showHScrollBar ); + triggerSizeEvent = true; + } + } + + if ( m_vScrollBar) + { + bool showVScrollBar = m_vScrollBarAlwaysShown || m_vScrollBar->IsNeeded(); + + if ( m_vScrollBar->IsShown() != showVScrollBar ) + { + m_vScrollBar->Show( showVScrollBar ) ; + triggerSizeEvent = true; + } + } + + MacRepositionScrollBars() ; + if ( triggerSizeEvent ) + { + SendSizeEvent(); + } +#endif +} + +// New function that will replace some of the above. +void wxWindowMac::SetScrollbar(int orient, int pos, int thumb, + int range, bool refresh) +{ +#if wxUSE_SCROLLBAR + // Updating scrollbars when window is being deleted is useless and + // currently results in asserts in client-to-screen coordinates conversion + // code which is used by DoUpdateScrollbarVisibility() so just skip it. + if ( m_isBeingDeleted ) + return; + + if ( orient == wxHORIZONTAL && m_hScrollBar ) + m_hScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh); + else if ( orient == wxVERTICAL && m_vScrollBar ) + m_vScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh); + + DoUpdateScrollbarVisibility(); +#endif +} + +// Does a physical scroll +void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) +{ + if ( dx == 0 && dy == 0 ) + return ; + + int width , height ; + GetClientSize( &width , &height ) ; + + { + wxRect scrollrect( MacGetLeftBorderSize() , MacGetTopBorderSize() , width , height ) ; + if ( rect ) + scrollrect.Intersect( *rect ) ; + // as the native control might be not a 0/0 wx window coordinates, we have to offset + scrollrect.Offset( -MacGetLeftBorderSize() , -MacGetTopBorderSize() ) ; + + GetPeer()->ScrollRect( &scrollrect, dx, dy ); + } + + wxWindowMac *child; + int x, y, w, h; + for (wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); node; node = node->GetNext()) + { + child = node->GetData(); + if (child == NULL) + continue; + + if (child->IsTopLevel()) + continue; + + if ( !IsClientAreaChild(child) ) + continue; + + child->GetPosition( &x, &y ); + child->GetSize( &w, &h ); + if (rect) + { + wxRect rc( x, y, w, h ); + if (rect->Intersects( rc )) + child->SetSize( x + dx, y + dy, w, h, wxSIZE_AUTO|wxSIZE_ALLOW_MINUS_ONE ); + } + else + { + child->SetSize( x + dx, y + dy, w, h, wxSIZE_AUTO|wxSIZE_ALLOW_MINUS_ONE ); + } + } +} + +void wxWindowMac::MacOnScroll( wxScrollEvent &event ) +{ +#if wxUSE_SCROLLBAR + if ( event.GetEventObject() == m_vScrollBar || event.GetEventObject() == m_hScrollBar ) + { + wxScrollWinEvent wevent; + wevent.SetPosition(event.GetPosition()); + wevent.SetOrientation(event.GetOrientation()); + wevent.SetEventObject(this); + + if (event.GetEventType() == wxEVT_SCROLL_TOP) + wevent.SetEventType( wxEVT_SCROLLWIN_TOP ); + else if (event.GetEventType() == wxEVT_SCROLL_BOTTOM) + wevent.SetEventType( wxEVT_SCROLLWIN_BOTTOM ); + else if (event.GetEventType() == wxEVT_SCROLL_LINEUP) + wevent.SetEventType( wxEVT_SCROLLWIN_LINEUP ); + else if (event.GetEventType() == wxEVT_SCROLL_LINEDOWN) + wevent.SetEventType( wxEVT_SCROLLWIN_LINEDOWN ); + else if (event.GetEventType() == wxEVT_SCROLL_PAGEUP) + wevent.SetEventType( wxEVT_SCROLLWIN_PAGEUP ); + else if (event.GetEventType() == wxEVT_SCROLL_PAGEDOWN) + wevent.SetEventType( wxEVT_SCROLLWIN_PAGEDOWN ); + else if (event.GetEventType() == wxEVT_SCROLL_THUMBTRACK) + wevent.SetEventType( wxEVT_SCROLLWIN_THUMBTRACK ); + else if (event.GetEventType() == wxEVT_SCROLL_THUMBRELEASE) + wevent.SetEventType( wxEVT_SCROLLWIN_THUMBRELEASE ); + + HandleWindowEvent(wevent); + } +#endif +} + +wxWindow *wxWindowBase::DoFindFocus() +{ + return wxFindWindowFromWXWidget(wxWidgetImpl::FindFocus()); +} + +// Raise the window to the top of the Z order +void wxWindowMac::Raise() +{ + GetPeer()->Raise(); +} + +// Lower the window to the bottom of the Z order +void wxWindowMac::Lower() +{ + GetPeer()->Lower(); +} + +// static wxWindow *gs_lastWhich = NULL; + +bool wxWindowMac::MacSetupCursor( const wxPoint& pt ) +{ + // first trigger a set cursor event + + wxPoint clientorigin = GetClientAreaOrigin() ; + wxSize clientsize = GetClientSize() ; + wxCursor cursor ; + if ( wxRect2DInt( clientorigin.x , clientorigin.y , clientsize.x , clientsize.y ).Contains( wxPoint2DInt( pt ) ) ) + { + wxSetCursorEvent event( pt.x , pt.y ); + event.SetId(GetId()); + event.SetEventObject(this); + + bool processedEvtSetCursor = HandleWindowEvent(event); + if ( processedEvtSetCursor && event.HasCursor() ) + { + cursor = event.GetCursor() ; + } + else + { + // the test for processedEvtSetCursor is here to prevent using m_cursor + // if the user code caught EVT_SET_CURSOR() and returned nothing from + // it - this is a way to say that our cursor shouldn't be used for this + // point + if ( !processedEvtSetCursor && m_cursor.IsOk() ) + cursor = m_cursor ; + + if ( !wxIsBusy() && !GetParent() ) + cursor = *wxSTANDARD_CURSOR ; + } + + if ( cursor.IsOk() ) + cursor.MacInstall() ; + } + + return cursor.IsOk() ; +} + +wxString wxWindowMac::MacGetToolTipString( wxPoint &WXUNUSED(pt) ) +{ +#if wxUSE_TOOLTIPS + if ( m_tooltip ) + return m_tooltip->GetTip() ; +#endif + + return wxEmptyString ; +} + +void wxWindowMac::ClearBackground() +{ + Refresh() ; + Update() ; +} + +void wxWindowMac::Update() +{ + wxNonOwnedWindow* top = MacGetTopLevelWindow(); + if (top) + top->Update() ; +} + +wxNonOwnedWindow* wxWindowMac::MacGetTopLevelWindow() const +{ + wxWindowMac *iter = (wxWindowMac*)this ; + + while ( iter ) + { + if ( iter->IsTopLevel() ) + { + wxTopLevelWindow* toplevel = wxDynamicCast(iter,wxTopLevelWindow); + if ( toplevel ) + return toplevel; +#if wxUSE_POPUPWIN + wxPopupWindow* popupwin = wxDynamicCast(iter,wxPopupWindow); + if ( popupwin ) + return popupwin; +#endif + } + iter = iter->GetParent() ; + } + + return NULL ; +} + +const wxRect& wxWindowMac::MacGetClippedClientRect() const +{ + MacUpdateClippedRects() ; + + return m_cachedClippedClientRect ; +} + +const wxRect& wxWindowMac::MacGetClippedRect() const +{ + MacUpdateClippedRects() ; + + return m_cachedClippedRect ; +} + +const wxRect&wxWindowMac:: MacGetClippedRectWithOuterStructure() const +{ + MacUpdateClippedRects() ; + + return m_cachedClippedRectWithOuterStructure ; +} + +const wxRegion& wxWindowMac::MacGetVisibleRegion( bool includeOuterStructures ) +{ + static wxRegion emptyrgn ; + + if ( !m_isBeingDeleted && IsShownOnScreen() ) + { + MacUpdateClippedRects() ; + if ( includeOuterStructures ) + return m_cachedClippedRegionWithOuterStructure ; + else + return m_cachedClippedRegion ; + } + else + { + return emptyrgn ; + } +} + +void wxWindowMac::MacUpdateClippedRects() const +{ +} + +/* + This function must not change the updatergn ! + */ +bool wxWindowMac::MacDoRedraw( long time ) +{ + bool handled = false ; + + wxRegion formerUpdateRgn = m_updateRegion; + wxRegion clientUpdateRgn = formerUpdateRgn; + + const wxRect clientRect = GetClientRect(); + + clientUpdateRgn.Intersect(clientRect); + + // first send an erase event to the entire update area + const wxBackgroundStyle bgStyle = GetBackgroundStyle(); + switch ( bgStyle ) + { + case wxBG_STYLE_ERASE: + case wxBG_STYLE_SYSTEM: + case wxBG_STYLE_COLOUR: + { + // for the toplevel window this really is the entire area for + // all the others only their client area, otherwise they might + // be drawing with full alpha and eg put blue into the grow-box + // area of a scrolled window (scroll sample) + wxWindowDC dc(this); + if ( IsTopLevel() ) + dc.SetDeviceClippingRegion(formerUpdateRgn); + else + dc.SetDeviceClippingRegion(clientUpdateRgn); + + if ( bgStyle == wxBG_STYLE_ERASE ) + { + wxEraseEvent eevent( GetId(), &dc ); + eevent.SetEventObject( this ); + if ( ProcessWindowEvent( eevent ) ) + break; + } + + if ( UseBgCol() ) + { + dc.SetBackground(GetBackgroundColour()); + dc.Clear(); + } + } + break; + + case wxBG_STYLE_PAINT: + case wxBG_STYLE_TRANSPARENT: + // nothing to do, user-defined EVT_PAINT handler will overwrite the + // entire window client area + break; + + default: + wxFAIL_MSG( "unsupported background style" ); + } + + // as this is a full window, shouldn't be necessary anymore + // MacPaintGrowBox(); + + // calculate a client-origin version of the update rgn and set + // m_updateRegion to that + clientUpdateRgn.Offset(-clientRect.GetPosition()); + m_updateRegion = clientUpdateRgn ; + + if ( !m_updateRegion.Empty() ) + { + // paint the window itself + + wxPaintEvent event(GetId()); + event.SetTimestamp(time); + event.SetEventObject(this); + handled = HandleWindowEvent(event); + } + + m_updateRegion = formerUpdateRgn; + + wxNonOwnedWindow* top = MacGetTopLevelWindow(); + if (top) + top->WindowWasPainted() ; + + return handled; +} + +void wxWindowMac::MacPaintChildrenBorders() +{ + // now we cannot rely on having its borders drawn by a window itself, as it does not + // get the updateRgn wide enough to always do so, so we do it from the parent + // this would also be the place to draw any custom backgrounds for native controls + // in Composited windowing + wxPoint clientOrigin = GetClientAreaOrigin() ; + + wxWindowMac *child; + int x, y, w, h; + for (wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); node; node = node->GetNext()) + { + child = node->GetData(); + if (child == NULL) + continue; +#if wxUSE_SCROLLBAR + if (child == m_vScrollBar) + continue; + if (child == m_hScrollBar) + continue; + if (child == m_growBox) + continue; +#endif + if (child->IsTopLevel()) + continue; + if (!child->IsShown()) + continue; + + // only draw those in the update region (add a safety margin of 10 pixels for shadow effects + + child->GetPosition( &x, &y ); + child->GetSize( &w, &h ); + + if ( m_updateRegion.Contains(clientOrigin.x+x-10, clientOrigin.y+y-10, w+20, h+20) ) + { + // paint custom borders + wxNcPaintEvent eventNc( child->GetId() ); + eventNc.SetEventObject( child ); + if ( !child->HandleWindowEvent( eventNc ) ) + { + child->MacPaintBorders(0, 0) ; + } + } + } +} + + +WXWindow wxWindowMac::MacGetTopLevelWindowRef() const +{ + wxNonOwnedWindow* tlw = MacGetTopLevelWindow(); + return tlw ? tlw->GetWXWindow() : NULL ; +} + +bool wxWindowMac::MacHasScrollBarCorner() const +{ +#if wxUSE_SCROLLBAR && !wxOSX_USE_IPHONE + /* Returns whether the scroll bars in a wxScrolledWindow should be + * shortened. Scroll bars should be shortened if either: + * + * - both scroll bars are visible, or + * + * - there is a resize box in the parent frame's corner and this + * window shares the bottom and right edge with the parent + * frame. + */ + + if ( m_hScrollBar == NULL && m_vScrollBar == NULL ) + return false; + + if ( ( m_hScrollBar && m_hScrollBar->IsShown() ) + && ( m_vScrollBar && m_vScrollBar->IsShown() ) ) + { + // Both scroll bars visible + return true; + } + else + { + wxPoint thisWindowBottomRight = GetScreenRect().GetBottomRight(); + + for ( const wxWindow *win = (wxWindow*)this; win; win = win->GetParent() ) + { + const wxFrame *frame = wxDynamicCast( win, wxFrame ) ; + if ( frame ) + { + // starting from 10.7 there are no resize indicators anymore + if ( (frame->GetWindowStyleFlag() & wxRESIZE_BORDER) && !wxPlatformInfo::Get().CheckOSVersion(10, 7) ) + { + // Parent frame has resize handle + wxPoint frameBottomRight = frame->GetScreenRect().GetBottomRight(); + + // Note: allow for some wiggle room here as wxMac's + // window rect calculations seem to be imprecise + if ( abs( thisWindowBottomRight.x - frameBottomRight.x ) <= 2 + && abs( thisWindowBottomRight.y - frameBottomRight.y ) <= 2 ) + { + // Parent frame has resize handle and shares + // right bottom corner + return true ; + } + else + { + // Parent frame has resize handle but doesn't + // share right bottom corner + return false ; + } + } + else + { + // Parent frame doesn't have resize handle + return false ; + } + } + } + + // No parent frame found + return false ; + } +#else + return false; +#endif +} + +void wxWindowMac::MacCreateScrollBars( long style ) +{ +#if wxUSE_SCROLLBAR + wxASSERT_MSG( m_vScrollBar == NULL && m_hScrollBar == NULL , wxT("attempt to create window twice") ) ; + + if ( style & ( wxVSCROLL | wxHSCROLL ) ) + { + int scrlsize = MAC_SCROLLBAR_SIZE ; + if ( GetWindowVariant() == wxWINDOW_VARIANT_SMALL || GetWindowVariant() == wxWINDOW_VARIANT_MINI ) + { + scrlsize = MAC_SMALL_SCROLLBAR_SIZE ; + } + + int adjust = MacHasScrollBarCorner() ? scrlsize - 1: 0 ; + int width, height ; + GetClientSize( &width , &height ) ; + + wxPoint vPoint(width - scrlsize, 0) ; + wxSize vSize(scrlsize, height - adjust) ; + wxPoint hPoint(0, height - scrlsize) ; + wxSize hSize(width - adjust, scrlsize) ; + + // we have to set the min size to a smaller value, otherwise they cannot get smaller (InitialSize sets MinSize) + if ( style & wxVSCROLL ) + { + m_vScrollBar = new wxScrollBar((wxWindow*)this, wxID_ANY, vPoint, vSize , wxVERTICAL); + m_vScrollBar->SetMinSize( wxDefaultSize ); + } + + if ( style & wxHSCROLL ) + { + m_hScrollBar = new wxScrollBar((wxWindow*)this, wxID_ANY, hPoint, hSize , wxHORIZONTAL); + m_hScrollBar->SetMinSize( wxDefaultSize ); + } + + wxPoint gPoint(width - scrlsize, height - scrlsize); + wxSize gSize(scrlsize, scrlsize); + m_growBox = new wxBlindPlateWindow((wxWindow *)this, wxID_ANY, gPoint, gSize, 0); + } + + // because the create does not take into account the client area origin + // we might have a real position shift + MacRepositionScrollBars() ; +#endif +} + +bool wxWindowMac::MacIsChildOfClientArea( const wxWindow* child ) const +{ + bool result = ((child == NULL) +#if wxUSE_SCROLLBAR + || ((child != m_hScrollBar) && (child != m_vScrollBar) && (child != m_growBox)) +#endif + ); + + return result ; +} + +void wxWindowMac::MacRepositionScrollBars() +{ +#if wxUSE_SCROLLBAR + if ( !m_hScrollBar && !m_vScrollBar ) + return ; + + int scrlsize = m_hScrollBar ? m_hScrollBar->GetSize().y : ( m_vScrollBar ? m_vScrollBar->GetSize().x : MAC_SCROLLBAR_SIZE ) ; + int adjust = MacHasScrollBarCorner() ? scrlsize - 1 : 0 ; + + // get real client area + int width, height ; + GetSize( &width , &height ); + + width -= MacGetLeftBorderSize() + MacGetRightBorderSize(); + height -= MacGetTopBorderSize() + MacGetBottomBorderSize(); + + wxPoint vPoint( width - scrlsize, 0 ) ; + wxSize vSize( scrlsize, height - adjust ) ; + wxPoint hPoint( 0 , height - scrlsize ) ; + wxSize hSize( width - adjust, scrlsize ) ; + + if ( m_vScrollBar ) + m_vScrollBar->SetSize( vPoint.x , vPoint.y, vSize.x, vSize.y , wxSIZE_ALLOW_MINUS_ONE ); + if ( m_hScrollBar ) + m_hScrollBar->SetSize( hPoint.x , hPoint.y, hSize.x, hSize.y, wxSIZE_ALLOW_MINUS_ONE ); + if ( m_growBox ) + { + if ( MacHasScrollBarCorner() ) + { + m_growBox->SetSize( width - scrlsize, height - scrlsize, wxDefaultCoord, wxDefaultCoord, wxSIZE_USE_EXISTING ); + if ( !m_growBox->IsShown() ) + m_growBox->Show(); + } + else + { + if ( m_growBox->IsShown() ) + m_growBox->Hide(); + } + } +#endif +} + +bool wxWindowMac::AcceptsFocus() const +{ + if ( GetPeer() == NULL || GetPeer()->IsUserPane() ) + return wxWindowBase::AcceptsFocus(); + else + return GetPeer()->CanFocus(); +} + +void wxWindowMac::MacSuperChangedPosition() +{ + // only window-absolute structures have to be moved i.e. controls + + m_cachedClippedRectValid = false ; + + wxWindowMac *child; + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); + while ( node ) + { + child = node->GetData(); + child->MacSuperChangedPosition() ; + + node = node->GetNext(); + } +} + +void wxWindowMac::MacTopLevelWindowChangedPosition() +{ + // only screen-absolute structures have to be moved i.e. glcanvas + + wxWindowMac *child; + wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); + while ( node ) + { + child = node->GetData(); + child->MacTopLevelWindowChangedPosition() ; + + node = node->GetNext(); + } +} + +long wxWindowMac::MacGetWXBorderSize() const +{ + if ( IsTopLevel() ) + return 0 ; + + SInt32 border = 0 ; + + if ( GetPeer() && GetPeer()->NeedsFrame() ) + { + if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER)) + { +#if wxOSX_USE_COCOA_OR_CARBON + // this metric is only the 'outset' outside the simple frame rect + GetThemeMetric( kThemeMetricEditTextFrameOutset , &border ) ; + border += 1; +#else + border += 2; +#endif + } + else if (HasFlag(wxSIMPLE_BORDER)) + { +#if wxOSX_USE_COCOA_OR_CARBON + // this metric is only the 'outset' outside the simple frame rect + GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; + border += 1; +#else + border += 1; +#endif + } + } + + return border ; +} + +long wxWindowMac::MacGetLeftBorderSize() const +{ + // the wx borders are all symmetric in mac themes + long border = MacGetWXBorderSize() ; + + if ( GetPeer() ) + { + int left, top, right, bottom; + GetPeer()->GetLayoutInset( left, top, right, bottom ); + border -= left; + } + + return border; +} + + +long wxWindowMac::MacGetRightBorderSize() const +{ + // the wx borders are all symmetric in mac themes + long border = MacGetWXBorderSize() ; + + if ( GetPeer() ) + { + int left, top, right, bottom; + GetPeer()->GetLayoutInset( left, top, right, bottom ); + border -= right; + } + + return border; +} + +long wxWindowMac::MacGetTopBorderSize() const +{ + // the wx borders are all symmetric in mac themes + long border = MacGetWXBorderSize() ; + + if ( GetPeer() ) + { + int left, top, right, bottom; + GetPeer()->GetLayoutInset( left, top, right, bottom ); + border -= top; + } + + return border; +} + +long wxWindowMac::MacGetBottomBorderSize() const +{ + // the wx borders are all symmetric in mac themes + long border = MacGetWXBorderSize() ; + + if ( GetPeer() ) + { + int left, top, right, bottom; + GetPeer()->GetLayoutInset( left, top, right, bottom ); + border -= bottom; + } + + return border; +} + +long wxWindowMac::MacRemoveBordersFromStyle( long style ) +{ + return style & ~wxBORDER_MASK ; +} + +// Find the wxWindowMac at the current mouse position, returning the mouse +// position. +wxWindow * wxFindWindowAtPointer( wxPoint& pt ) +{ + pt = wxGetMousePosition(); + wxWindowMac* found = wxFindWindowAtPoint(pt); + + return (wxWindow*) found; +} + +// Get the current mouse position. +wxPoint wxGetMousePosition() +{ + int x, y; + + wxGetMousePosition( &x, &y ); + + return wxPoint(x, y); +} + +void wxWindowMac::OnMouseEvent( wxMouseEvent &event ) +{ + if ( event.GetEventType() == wxEVT_RIGHT_DOWN ) + { + // copied from wxGTK : CS + // VZ: shouldn't we move this to base class then? + + // generate a "context menu" event: this is similar to wxEVT_RIGHT_DOWN + // except that: + // + // (a) it's a command event and so is propagated to the parent + // (b) under MSW it can be generated from kbd too + // (c) it uses screen coords (because of (a)) + wxContextMenuEvent evtCtx(wxEVT_CONTEXT_MENU, + this->GetId(), + this->ClientToScreen(event.GetPosition())); + evtCtx.SetEventObject(this); + if ( ! HandleWindowEvent(evtCtx) ) + event.Skip() ; + } + else + { + event.Skip() ; + } +} + +void wxWindowMac::TriggerScrollEvent( wxEventType WXUNUSED(scrollEvent) ) +{ +} + +Rect wxMacGetBoundsForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin ) +{ + int x, y, w, h ; + + window->MacGetBoundsForControl( pos , size , x , y, w, h , adjustForOrigin ) ; + Rect bounds = { static_cast(y), static_cast(x), static_cast(y + h), static_cast(x + w) }; + + return bounds ; +} + +bool wxWindowMac::OSXHandleClicked( double WXUNUSED(timestampsec) ) +{ + return false; +} + +#if wxOSX_USE_COCOA_OR_IPHONE +void *wxWindowMac::OSXGetViewOrWindow() const +{ + return GetHandle(); +} +#endif + +wxInt32 wxWindowMac::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF event ) +{ +#if wxOSX_USE_COCOA_OR_CARBON + if ( OSXHandleClicked( GetEventTime((EventRef)event) ) ) + return noErr; + + return eventNotHandledErr ; +#else + return 0; +#endif +} + +bool wxWindowMac::Reparent(wxWindowBase *newParentBase) +{ + wxWindowMac *newParent = (wxWindowMac *)newParentBase; + if ( !wxWindowBase::Reparent(newParent) ) + return false; + + GetPeer()->RemoveFromParent(); + GetPeer()->Embed( GetParent()->GetPeer() ); + + MacChildAdded(); + return true; +} + +bool wxWindowMac::SetTransparent(wxByte alpha) +{ + SetBackgroundStyle(wxBG_STYLE_TRANSPARENT); + + if ( alpha != m_macAlpha ) + { + m_macAlpha = alpha ; + Refresh() ; + } + return true ; +} + + +bool wxWindowMac::CanSetTransparent() +{ + return true ; +} + +wxByte wxWindowMac::GetTransparent() const +{ + return m_macAlpha ; +} + +bool wxWindowMac::IsShownOnScreen() const +{ + if ( GetPeer() && GetPeer()->IsOk() ) + { + bool peerVis = GetPeer()->IsVisible(); + bool wxVis = wxWindowBase::IsShownOnScreen(); + if( peerVis != wxVis ) + { + // CS : put a breakpoint here to investigate differences + // between native an wx visibilities + // the only place where I've encountered them until now + // are the hiding/showing sequences where the vis-changed event is + // first sent to the innermost control, while wx does things + // from the outmost control + wxVis = wxWindowBase::IsShownOnScreen(); + return wxVis; + } + + return GetPeer()->IsVisible(); + } + return wxWindowBase::IsShownOnScreen(); +} + +#if wxUSE_HOTKEY && wxOSX_USE_COCOA_OR_CARBON + +OSStatus +wxHotKeyHandler(EventHandlerCallRef WXUNUSED(nextHandler), + EventRef event, + void* WXUNUSED(userData)) +{ + EventHotKeyID hotKeyId; + + GetEventParameter( event, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(hotKeyId), NULL, &hotKeyId); + + for ( unsigned i = 0; i < s_hotkeys.size(); ++i ) + { + if ( s_hotkeys[i].keyId == static_cast(hotKeyId.id) ) + { + unsigned char charCode ; + UInt32 keyCode ; + UInt32 modifiers ; + UInt32 when = EventTimeToTicks( GetEventTime( event ) ) ; + + GetEventParameter( event, kEventParamKeyMacCharCodes, typeChar, NULL, 1, NULL, &charCode ); + GetEventParameter( event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode ); + GetEventParameter( event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers ); + + UInt32 keymessage = (keyCode << 8) + charCode; + + wxKeyEvent wxevent(wxEVT_HOTKEY); + wxevent.SetId(hotKeyId.id); + wxTheApp->MacCreateKeyEvent( wxevent, s_hotkeys[i].window , keymessage , + modifiers , when , 0 ) ; + + s_hotkeys[i].window->HandleWindowEvent(wxevent); + } + } + + return noErr; +} + +bool wxWindowMac::RegisterHotKey(int hotkeyId, int modifiers, int keycode) +{ + for ( unsigned i = 0; i < s_hotkeys.size(); ++i ) + { + if ( s_hotkeys[i].keyId == hotkeyId ) + { + wxLogLastError(wxT("hotkeyId already registered")); + + return false; + } + } + + static bool installed = false; + if ( !installed ) + { + EventTypeSpec eventType; + eventType.eventClass=kEventClassKeyboard; + eventType.eventKind=kEventHotKeyPressed; + + InstallApplicationEventHandler(&wxHotKeyHandler, 1, &eventType, NULL, NULL); + installed = true; + } + + UInt32 mac_modifiers=0; + if ( modifiers & wxMOD_ALT ) + mac_modifiers |= optionKey; + if ( modifiers & wxMOD_SHIFT ) + mac_modifiers |= shiftKey; + if ( modifiers & wxMOD_RAW_CONTROL ) + mac_modifiers |= controlKey; + if ( modifiers & wxMOD_CONTROL ) + mac_modifiers |= cmdKey; + + EventHotKeyRef hotKeyRef; + EventHotKeyID hotKeyIDmac; + + hotKeyIDmac.signature = 'WXMC'; + hotKeyIDmac.id = hotkeyId; + + if ( RegisterEventHotKey(wxCharCodeWXToOSX((wxKeyCode)keycode), mac_modifiers, hotKeyIDmac, + GetApplicationEventTarget(), 0, &hotKeyRef) != noErr ) + { + wxLogLastError(wxT("RegisterHotKey")); + + return false; + } + else + { + wxHotKeyRec v; + v.ref = hotKeyRef; + v.keyId = hotkeyId; + v.window = this; + + s_hotkeys.push_back(v); + } + + return true; +} + +bool wxWindowMac::UnregisterHotKey(int hotkeyId) +{ + for ( int i = ((int)s_hotkeys.size())-1; i>=0; -- i ) + { + if ( s_hotkeys[i].keyId == hotkeyId ) + { + EventHotKeyRef ref = s_hotkeys[i].ref; + s_hotkeys.erase(s_hotkeys.begin() + i); + if ( UnregisterEventHotKey(ref) != noErr ) + { + wxLogLastError(wxT("UnregisterHotKey")); + + return false; + } + else + return true; + } + } + + return false; +} + +#endif // wxUSE_HOTKEY + +bool wxWindowMac::OSXHandleKeyEvent( wxKeyEvent& event ) +{ + bool handled = false; + + // moved the ordinary key event sending AFTER the accel evaluation + +#if wxUSE_ACCEL + if ( !handled && event.GetEventType() == wxEVT_KEY_DOWN) + { + wxWindow *ancestor = this; + while (ancestor) + { + int command = ancestor->GetAcceleratorTable()->GetCommand( event ); + if (command != -1) + { + wxEvtHandler * const handler = ancestor->GetEventHandler(); + + wxCommandEvent command_event( wxEVT_MENU, command ); + handled = handler->ProcessEvent( command_event ); + + if ( !handled ) + { + // accelerators can also be used with buttons, try them too + command_event.SetEventType(wxEVT_BUTTON); + handled = handler->ProcessEvent( command_event ); + } + + break; + } + + if (ancestor->IsTopNavigationDomain(wxWindow::Navigation_Accel)) + break; + + ancestor = ancestor->GetParent(); + } + } +#endif // wxUSE_ACCEL + + if ( !handled ) + { + handled = HandleWindowEvent( event ) ; + if ( handled && event.GetSkipped() ) + handled = false ; + } + + return handled ; +} + +// +// wxWidgetImpl +// + +// we are maintaining a n:1 map from native controls (ControlRef / NSView*) to their wxWidgetImpl +// n:1 because we might have an embedded view eg within a scrollview, both being part of the same impl +// the impl is calling Associate with its newly created native control(s), e.g. in InstallHandler + +WX_DECLARE_HASH_MAP(WXWidget, wxWidgetImpl*, wxPointerHash, wxPointerEqual, MacControlMap); + +static MacControlMap wxWinMacControlList; + +wxWindowMac *wxFindWindowFromWXWidget(WXWidget inControl ) +{ + wxWidgetImpl* impl = wxWidgetImpl::FindFromWXWidget( inControl ); + if ( impl ) + return impl->GetWXPeer(); + + return NULL; +} + +wxWidgetImpl *wxWidgetImpl::FindFromWXWidget(WXWidget inControl ) +{ + MacControlMap::iterator node = wxWinMacControlList.find(inControl); + + return (node == wxWinMacControlList.end()) ? NULL : node->second; +} + +void wxWidgetImpl::Associate(WXWidget inControl, wxWidgetImpl *impl) +{ + // adding NULL ControlRef is (first) surely a result of an error and + // (secondly) breaks native event processing + wxCHECK_RET( inControl != (WXWidget) NULL, wxT("attempt to add a NULL WXWidget to control map") ); + + wxWinMacControlList[inControl] = impl; +} + +void wxWidgetImpl::RemoveAssociations(wxWidgetImpl* impl) +{ + // iterate over all the elements in the class + // is the iterator stable ? as we might have two associations pointing to the same wxWindow + // we should go on... + + bool found = true ; + while ( found ) + { + found = false ; + MacControlMap::iterator it; + for ( it = wxWinMacControlList.begin(); it != wxWinMacControlList.end(); ++it ) + { + if ( it->second == impl ) + { + wxWinMacControlList.erase(it); + found = true ; + break; + } + } + } +} + +wxIMPLEMENT_ABSTRACT_CLASS(wxWidgetImpl, wxObject); + +wxWidgetImpl::wxWidgetImpl( wxWindowMac* peer , bool isRootControl, bool isUserPane ) +{ + Init(); + m_isRootControl = isRootControl; + m_isUserPane = isUserPane; + m_wxPeer = peer; + m_shouldSendEvents = true; +} + +wxWidgetImpl::wxWidgetImpl() +{ + Init(); +} + +wxWidgetImpl::~wxWidgetImpl() +{ + m_wxPeer = NULL; +} + +void wxWidgetImpl::Init() +{ + m_isRootControl = false; + m_wxPeer = NULL; + m_needsFocusRect = false; + m_needsFrame = true; +} + +void wxWidgetImpl::SetNeedsFocusRect( bool needs ) +{ + m_needsFocusRect = needs; +} + +bool wxWidgetImpl::NeedsFocusRect() const +{ + return m_needsFocusRect; +} + +void wxWidgetImpl::SetNeedsFrame( bool needs ) +{ + m_needsFrame = needs; +} + +bool wxWidgetImpl::NeedsFrame() const +{ + return m_needsFrame; +} + +void wxWidgetImpl::SetDrawingEnabled(bool WXUNUSED(enabled)) +{ +} diff --git a/BuildTools/windows/GeoDa.vcxproj b/BuildTools/windows/GeoDa.vcxproj index dbc619535..f20c68927 100644 --- a/BuildTools/windows/GeoDa.vcxproj +++ b/BuildTools/windows/GeoDa.vcxproj @@ -333,7 +333,10 @@ + + + @@ -364,6 +367,7 @@ + @@ -472,9 +476,12 @@ + + + @@ -512,6 +519,7 @@ + diff --git a/BuildTools/windows/GeoDa.vcxproj.filters b/BuildTools/windows/GeoDa.vcxproj.filters index 89a4beb9d..f66e8c1e6 100644 --- a/BuildTools/windows/GeoDa.vcxproj.filters +++ b/BuildTools/windows/GeoDa.vcxproj.filters @@ -850,6 +850,18 @@ DialogTools + + DialogTools + + + DialogTools + + + DialogTools + + + Explore + @@ -1539,5 +1551,17 @@ DialogTools + + DialogTools + + + DialogTools + + + DialogTools + + + Explore + \ No newline at end of file diff --git a/DataViewer/CustomClassifPtree.cpp b/DataViewer/CustomClassifPtree.cpp index 30a582442..928ab8ee8 100644 --- a/DataViewer/CustomClassifPtree.cpp +++ b/DataViewer/CustomClassifPtree.cpp @@ -92,32 +92,43 @@ void CustomClassifPtree::ReadPtree(const boost::property_tree::ptree& pt, } else if (key == "type") { wxString s = v.second.data(); CatClassification::BreakValsType t; + CatClassification::CatClassifType c; if (s == "no_theme") { t = CatClassification::no_theme_break_vals; + c = CatClassification::no_theme; } else if (s == "hinge_15") { t = CatClassification::hinge_15_break_vals; + c = CatClassification::hinge_15; } else if (s == "hinge_30") { t = CatClassification::hinge_30_break_vals; + c = CatClassification::hinge_30; } else if (s == "quantile") { t = CatClassification::quantile_break_vals; + c = CatClassification::quantile; } else if (s == "percentile") { t = CatClassification::percentile_break_vals; + c = CatClassification::percentile; } else if (s == "stddev") { t = CatClassification::stddev_break_vals; + c = CatClassification::stddev; } else if (s == "unique_values") { t = CatClassification::unique_values_break_vals; + c = CatClassification::unique_values; } else if (s == "natural_breaks") { t = CatClassification::natural_breaks_break_vals; + c = CatClassification::natural_breaks; } else if (s == "equal_intervals") { t = CatClassification::equal_intervals_break_vals; + c = CatClassification::equal_intervals; } else if (s == "custom") { t = CatClassification::custom_break_vals; + c = CatClassification::custom; } else { wxString msg("unrecognized type: "); msg << s; throw GdaException(msg.mb_str()); } - cc_data.cat_classif_type = CatClassification::custom; + cc_data.cat_classif_type = c; cc_data.break_vals_type = t; } else if (key == "num_cats") { wxString s = v.second.data(); diff --git a/DataViewer/DataViewerAddColDlg.cpp b/DataViewer/DataViewerAddColDlg.cpp index 7adb446a6..3020b9b8e 100644 --- a/DataViewer/DataViewerAddColDlg.cpp +++ b/DataViewer/DataViewerAddColDlg.cpp @@ -221,7 +221,7 @@ void DataViewerAddColDlg::SetDefaultsByType(GdaConst::FieldType type) if (fixed_lengths) { m_length->Enable(); m_decimals_lable->SetLabelText("Decimals"); - m_decimals->SetValue("7"); + m_decimals->SetValue("15"); m_decimals->Disable(); m_max_label->SetLabelText(""); m_max_val->SetLabelText(""); @@ -300,7 +300,8 @@ void DataViewerAddColDlg::OnOkClick( wxCommandEvent& ev ) dlg.ShowModal(); return; } - bool case_sensitive = project->IsFieldCaseSensitive(); + // make sure no duplicated fields when adding a new field + bool case_sensitive = false; //project->IsFieldCaseSensitive(); if (table_int->DoesNameExist(colname, case_sensitive)) { wxString msg = _("Error: \"%s\" already exists in Table, please specify a different name."); msg = wxString::Format(msg, colname); @@ -356,12 +357,7 @@ void DataViewerAddColDlg::OnOkClick( wxCommandEvent& ev ) col_insert_pos = table_int->GetNumberCols(); } - int time_steps = 1; // non-space-time column by default - - //wxString log_msg = wxString::Format(_("Inserting new column %s into Table"), - //colname); - //wxLogMessage(log_msg); - + int time_steps = 1; // non-space-time column by default bool success; if (fixed_lengths) { success = (table_int->InsertCol(cur_type, colname, diff --git a/DataViewer/DataViewerEditFieldPropertiesDlg.cpp b/DataViewer/DataViewerEditFieldPropertiesDlg.cpp index 0e93c50ad..5a17873f0 100644 --- a/DataViewer/DataViewerEditFieldPropertiesDlg.cpp +++ b/DataViewer/DataViewerEditFieldPropertiesDlg.cpp @@ -224,8 +224,8 @@ void DataViewerEditFieldPropertiesDlg::InitTable() } else { field_grid->SetCellTextColour(r, COL_L, *wxBLACK); } - - field_grid->SetReadOnly(r, COL_L, !can_edit); + if (!can_edit) + field_grid->SetReadOnly(r, COL_L); wxString lv; lv << table_int->GetColLength(cid, t); field_grid->SetCellValue(r, COL_L, lv); @@ -295,13 +295,9 @@ void DataViewerEditFieldPropertiesDlg::InitTable() field_grid->EndBatch(); - field_grid->Connect(wxEVT_COMMAND_COMBOBOX_SELECTED, - wxCommandEventHandler(DataViewerEditFieldPropertiesDlg::OnFieldSelected), - NULL, - this); + field_grid->Connect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(DataViewerEditFieldPropertiesDlg::OnFieldSelected), NULL, this); } - void DataViewerEditFieldPropertiesDlg::OnFieldSelected( wxCommandEvent& ev ) { wxLogMessage("Entering DataViewerEditFieldPropertiesDlg::OnFieldSelected"); @@ -329,7 +325,6 @@ void DataViewerEditFieldPropertiesDlg::OnClose( wxCloseEvent& ev ) void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) { - wxLogMessage("Entering DataViewerEditFieldPropertiesDlg::OnCellChanging"); int row = ev.GetRow(); int col = ev.GetCol(); @@ -388,7 +383,6 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) return; } - if (col == COL_TM || col == COL_MIN || col == COL_MAX || @@ -454,17 +448,16 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) // preseve wxgrid order wxArrayInt wx_col_order; wxGrid* grid = project->FindTableGrid(); - int n_cols = project->GetNumFields(); + int n_cols = table_int->GetNumberCols(); if (grid) { for (int i=0; iGetColPos(i)); } } - for (size_t i=0; iFindColId(var_name); + double cur_col_size = grid->GetColSize(from_col); int to_col = table_int->InsertCol(new_type, tmp_name, from_col); // get col index of old var again @@ -507,10 +500,13 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) // reset orig wxgrid order if (grid) { - for (int i=0; iGetNumberCols(); i++) { grid->SetColPos(i, wx_col_order[i]); } } + // adjust the column size + grid->SetColSize(to_col, cur_col_size); + } catch(GdaLocalSeparatorException& e) { return; } catch(GdaException& e) { @@ -529,8 +525,11 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) } } combo_selection = -1; + } else if (col == COL_N) { - if (table_int->DoesNameExist(new_str, case_sensitive) || + // proceed with rename + bool case_change = new_str.CmpNoCase(cur_str) == 0; + if ( (!case_change && table_int->DoesNameExist(new_str, false)) || !table_int->IsValidDBColName(new_str)) { wxString m = wxString::Format(_("Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name. The first character must be a letter, and the remaining characters can be either letters, numbers or underscores. For DBF table, a valid variable name is between one and ten characters long."), new_str); wxMessageDialog dlg(this, m, _("Error"), wxOK | wxICON_ERROR); @@ -538,7 +537,6 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) ev.Veto(); return; } - // proceed with rename table_int->RenameSimpleCol(cid, time, new_str); } else if (col == COL_PG) { @@ -547,7 +545,8 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) ev.Veto(); return; } - if (table_int->DoesNameExist(new_str, case_sensitive) || + bool case_change = new_str.CmpNoCase(cur_str) == 0; + if ( (!case_change && table_int->DoesNameExist(new_str, false)) || !table_int->IsValidGroupName(new_str)) { wxString m = wxString::Format(_("Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name."), new_str); wxMessageDialog dlg(this, m, _("Error"), wxOK | wxICON_ERROR); @@ -687,37 +686,7 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) // get col index again cid = table_int->FindColId(name); - - // table_int->HasFixedLengths() means Shapefile etc. - if (table_int->GetColType(cid) == GdaConst::double_type && - table_int->HasFixedLengths() && COL_D != -1 && COL_L != -1) { - // it is possible that the values for length and decimals are - // individually valid, but that the combination of values is not - // valid. If this happens, then change these cells in the table to - // red. Otherwise, format them both as black. - long length = GdaConst::default_dbf_double_len; - long decimals = GdaConst::default_dbf_double_decimals; - wxString slen, sdec; - slen << length; - sdec << decimals; - field_grid->SetCellValue(row, COL_L, slen); - field_grid->SetCellValue(row, COL_D, sdec); - field_grid->SetCellValue(row, COL_DD, ""); - } else if (table_int->GetColType(cid) == GdaConst::long64_type && - table_int->HasFixedLengths() && COL_D != -1 && COL_L != -1) { - wxString slen; - slen << GdaConst::default_dbf_long_len; - field_grid->SetCellValue(row, COL_L, slen); - field_grid->SetCellValue(row, COL_D, ""); - field_grid->SetCellValue(row, COL_DD, ""); - } else if (table_int->GetColType(cid) == GdaConst::string_type && - table_int->HasFixedLengths() && COL_D != -1 && COL_L != -1) { - wxString slen, sdec; - slen << GdaConst::default_dbf_string_len; - field_grid->SetCellValue(row, COL_L, slen); - field_grid->SetCellValue(row, COL_D, ""); - field_grid->SetCellValue(row, COL_DD, ""); - } + UpdateLength(row); UpdateMinMax(row); ev.Skip(); @@ -822,6 +791,54 @@ void DataViewerEditFieldPropertiesDlg::UpdateMinMax(int row) field_grid->SetCellValue(row, COL_MIN, smin); } +void DataViewerEditFieldPropertiesDlg::UpdateLength(int row) +{ + if (row < 0) return; + wxString pg = field_grid->GetCellValue(row, COL_PG); + wxString name; + if (pg.IsEmpty()) { + name = field_grid->GetCellValue(row, COL_N); + } else { + name = pg; + } + int cid = table_int->FindColId(name); + if (cid < 0) return; + int t=0; + wxString tm_str = field_grid->GetCellValue(row, COL_TM); + if (!tm_str.IsEmpty()) t = tm_str_map[tm_str]; + GdaConst::FieldType type = table_int->GetColType(cid, t); + + // Update length, decimal places, displayed decimal places + if (COL_L >= 0) { + wxString lv; + lv << table_int->GetColLength(cid, t); + field_grid->SetCellValue(row, COL_L, lv); + } + if (COL_D >= 0) { + if (type == GdaConst::double_type) { + wxString dv; + dv << table_int->GetColDecimals(cid, t); + field_grid->SetCellValue(row, COL_D, dv); + } else { + field_grid->SetCellValue(row, COL_D, ""); + } + } + if (COL_DD >= 0) { + if (type == GdaConst::double_type) { + wxString ddv; + if (table_int->GetColDispDecimals(cid) > 0) { + ddv << table_int->GetColDispDecimals(cid); + } else { + // otherwise default (-1) shown as "" + ddv = ""; + } + field_grid->SetCellValue(row, COL_DD, ddv); + } else { + field_grid->SetCellValue(row, COL_DD, ""); + } + } +} + void DataViewerEditFieldPropertiesDlg::UpdateTmStrMap() { using namespace std; diff --git a/DataViewer/DataViewerEditFieldPropertiesDlg.h b/DataViewer/DataViewerEditFieldPropertiesDlg.h index 51cfd5779..97afe8468 100644 --- a/DataViewer/DataViewerEditFieldPropertiesDlg.h +++ b/DataViewer/DataViewerEditFieldPropertiesDlg.h @@ -53,7 +53,7 @@ class DataViewerEditFieldPropertiesDlg: public wxDialog, void OnCellEditorShown( wxGridEvent& ev ); void OnCellEditorHidden( wxGridEvent& ev ); void UpdateMinMax(int row); - + void UpdateLength(int row); void OnGridComboBox(wxCommandEvent& ev ); void OnFieldSelected( wxCommandEvent& ev ); diff --git a/DataViewer/MergeTableDlg.cpp b/DataViewer/MergeTableDlg.cpp index 6799c29fb..d111ea859 100644 --- a/DataViewer/MergeTableDlg.cpp +++ b/DataViewer/MergeTableDlg.cpp @@ -26,10 +26,7 @@ #include #include #include -#include "MergeTableDlg.h" -#include "DataSource.h" -#include "TableBase.h" -#include "TableInterface.h" + #include "../FramesManagerObserver.h" #include "../FramesManager.h" #include "../ShapeOperations/OGRLayerProxy.h" @@ -40,9 +37,13 @@ #include "../logger.h" #include "../GeneralWxUtils.h" #include "../Project.h" +#include "MergeTableDlg.h" +#include "DataSource.h" +#include "TableBase.h" +#include "TableInterface.h" +#include "OGRTable.h" BEGIN_EVENT_TABLE( MergeTableDlg, wxDialog ) - EVT_RADIOBUTTON( XRCID("ID_KEY_VAL_RB"), MergeTableDlg::OnKeyValRB ) EVT_RADIOBUTTON( XRCID("ID_REC_ORDER_RB"), MergeTableDlg::OnRecOrderRB ) EVT_BUTTON( XRCID("ID_OPEN_BUTTON"), MergeTableDlg::OnOpenClick ) @@ -61,14 +62,14 @@ END_EVENT_TABLE() using namespace std; -MergeTableDlg::MergeTableDlg(wxWindow* parent, Project* _project_s, const wxPoint& pos) +MergeTableDlg::MergeTableDlg(wxWindow* parent, Project* _project_s, + const wxPoint& pos) : merge_datasource_proxy(NULL), project_s(_project_s) { wxLogMessage("Open MergeTableDlg."); SetParent(parent); m_wx_encoding = NULL; - //table_int->FillColIdMap(col_id_map); table_int = project_s->GetTableInt(), frames_manager = project_s->GetFramesManager(), @@ -101,20 +102,28 @@ void MergeTableDlg::update(FramesManager* o) void MergeTableDlg::CreateControls() { wxXmlResource::Get()->LoadDialog(this, GetParent(), "ID_MERGE_TABLE_DLG"); - m_input_file_name = wxDynamicCast(FindWindow(XRCID("ID_INPUT_FILE_TEXT")), wxTextCtrl); - m_key_val_rb = wxDynamicCast(FindWindow(XRCID("ID_KEY_VAL_RB")), wxRadioButton); - m_rec_order_rb = wxDynamicCast(FindWindow(XRCID("ID_REC_ORDER_RB")), wxRadioButton); - m_current_key = wxDynamicCast(FindWindow(XRCID("ID_CURRENT_KEY_CHOICE")), wxChoice); - m_import_key = wxDynamicCast(FindWindow(XRCID("ID_IMPORT_KEY_CHOICE")), wxChoice); - m_exclude_list = wxDynamicCast(FindWindow(XRCID("ID_EXCLUDE_LIST")), wxListBox); - m_include_list = wxDynamicCast(FindWindow(XRCID("ID_INCLUDE_LIST")), wxListBox); - m_left_join = wxDynamicCast(FindWindow(XRCID("ID_MERGE_LEFT_JOIN")), wxRadioButton); - m_outer_join = wxDynamicCast(FindWindow(XRCID("ID_MERGE_OUTER_JOIN")), wxRadioButton); - m_overwrite_field = wxDynamicCast(FindWindow(XRCID("ID_MERGE_OVERWRITE_SAME_FIELD")), wxCheckBox); - + m_input_file_name = wxDynamicCast(FindWindow(XRCID("ID_INPUT_FILE_TEXT")), + wxTextCtrl); + m_key_val_rb = wxDynamicCast(FindWindow(XRCID("ID_KEY_VAL_RB")), + wxRadioButton); + m_rec_order_rb = wxDynamicCast(FindWindow(XRCID("ID_REC_ORDER_RB")), + wxRadioButton); + m_current_key = wxDynamicCast(FindWindow(XRCID("ID_CURRENT_KEY_CHOICE")), + wxChoice); + m_import_key = wxDynamicCast(FindWindow(XRCID("ID_IMPORT_KEY_CHOICE")), + wxChoice); + m_exclude_list = wxDynamicCast(FindWindow(XRCID("ID_EXCLUDE_LIST")), + wxListBox); + m_include_list = wxDynamicCast(FindWindow(XRCID("ID_INCLUDE_LIST")), + wxListBox); + m_left_join = wxDynamicCast(FindWindow(XRCID("ID_MERGE_LEFT_JOIN")), + wxRadioButton); + m_outer_join = wxDynamicCast(FindWindow(XRCID("ID_MERGE_OUTER_JOIN")), + wxRadioButton); + m_overwrite_field = wxDynamicCast(FindWindow(XRCID("ID_MERGE_OVERWRITE_SAME_FIELD")), + wxCheckBox); m_left_join->Bind(wxEVT_RADIOBUTTON, &MergeTableDlg::OnLeftJoinClick, this); m_outer_join->Bind(wxEVT_RADIOBUTTON, &MergeTableDlg::OnOuterJoinClick, this); - m_left_join->Disable(); m_outer_join->Disable(); m_key_val_rb->Disable(); @@ -158,24 +167,25 @@ void MergeTableDlg::Init() m_import_key->Disable(); m_exclude_list->Disable(); m_include_list->Disable(); - - vector col_names; - table_fnames.clear(); - // get the field names from table interface - set field_name_set; - int time_steps = table_int->GetTimeSteps(); - int n_fields = table_int->GetNumberCols(); - for (int cid=0; cidGetColName(cid); + + table_fnames.clear(); + // get the field names from table interface + std::set field_name_set; + std::vector col_id_map; + table_int->FillColIdMap(col_id_map); + for (size_t i=0; iGetColName(id); table_fnames.insert(group_name); - for (int i=0; iGetColType(cid,i); - wxString field_name = table_int->GetColName(cid, i); + int tms = table_int->IsColTimeVariant(id) ? table_int->GetColTimeSteps(id) : 1; + for (size_t t=0; tGetColType(id, i); + wxString field_name = table_int->GetColName(id, i); // only String, Integer can be keys for merging - if ( field_type == GdaConst::long64_type || + if (field_type == GdaConst::long64_type || field_type == GdaConst::string_type ) { - if ( field_name_set.count(field_name) == 0) { + if (field_name_set.count(field_name) == 0) { m_current_key->Append(field_name); field_name_set.insert(field_name); } @@ -211,10 +221,7 @@ void MergeTableDlg::OnOpenClick( wxCommandEvent& ev ) showCsvConfigure, showRecentPanel, dialog_type); - - if (connect_dlg.ShowModal() != wxID_OK) { - return; - } + if (connect_dlg.ShowModal() != wxID_OK) return; wxString proj_title = connect_dlg.GetProjectTitle(); wxString layer_name = connect_dlg.GetLayerName(); @@ -232,7 +239,8 @@ void MergeTableDlg::OnOpenClick( wxCommandEvent& ev ) delete merge_datasource_proxy; merge_datasource_proxy = NULL; } - merge_datasource_proxy = new OGRDatasourceProxy(datasource_name, ds_type, true); + merge_datasource_proxy = new OGRDatasourceProxy(datasource_name, + ds_type, true); merge_layer_proxy = merge_datasource_proxy->GetLayerProxy(layer_name); merge_layer_proxy->ReadData(); m_input_file_name->SetValue(layer_name); @@ -247,7 +255,7 @@ void MergeTableDlg::OnOpenClick( wxCommandEvent& ev ) m_include_list->Clear(); m_exclude_list->Clear(); - for (int i=0, iend=merge_layer_proxy->GetNumFields(); iGetNumFields(); i++) { GdaConst::FieldType field_type = merge_layer_proxy->GetFieldType(i); wxString name = merge_layer_proxy->GetFieldName(i); wxString dedup_name = name; @@ -368,7 +376,8 @@ bool MergeTableDlg::CheckKeys(wxString key_name, vector& key_vec, } } - ScrolledDetailMsgDialog *dlg = new ScrolledDetailMsgDialog(_("Warning"), msg, details); + ScrolledDetailMsgDialog *dlg = new ScrolledDetailMsgDialog(_("Warning"), + msg, details); dlg->Show(true); return false; } @@ -381,7 +390,7 @@ GetSelectedFieldNames(map& merged_fnames_dict) vector merged_field_names; set dup_merged_field_names, bad_merged_field_names; - bool case_sensitive = project_s->IsFieldCaseSensitive(); + bool case_sensitive = false;//project_s->IsFieldCaseSensitive(); for (int i=0, iend=m_include_list->GetCount(); iGetString(i); merged_field_names.push_back(inc_n); @@ -423,6 +432,13 @@ void MergeTableDlg::OnMergeClick( wxCommandEvent& ev ) if (m_left_join->GetValue()) { LeftJoinMerge(); } else { + if (!project_s->IsTableOnlyProject() && + merge_layer_proxy->IsTableOnly()) { + wxString msg = _("A Table-only data source can't be stacked with current data source."); + wxMessageDialog dlg(this, msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } OuterJoinMerge(); } ev.Skip(); @@ -620,30 +636,37 @@ void MergeTableDlg::OuterJoinMerge() } // start to merge std::vector geoms; - OGRSpatialReference* spatial_ref = project_s->GetSpatialReference(); - Shapefile::ShapeType shape_type = project_s->GetGdaGeometries(geoms); - std::vector in_geoms; - OGRSpatialReference* in_spatial_ref = merge_layer_proxy->GetSpatialReference(); - - // make sure the projection of import dataset is matched with current - OGRCoordinateTransformation *poCT = NULL; - if (spatial_ref !=NULL && in_spatial_ref != NULL) { - if (!spatial_ref->IsSame(in_spatial_ref) ) { - // convert geometry with original projection if needed - poCT = OGRCreateCoordinateTransformation(in_spatial_ref, spatial_ref); - merge_layer_proxy->ApplyProjection(poCT); + OGRSpatialReference* spatial_ref; + Shapefile::ShapeType shape_type; + + if (!project_s->IsTableOnlyProject()) { + // geometric dataset. If table-only dataset, only out join table + // of merged dataset. + spatial_ref = project_s->GetSpatialReference(); + shape_type = project_s->GetGdaGeometries(geoms); + OGRSpatialReference* in_spatial_ref; + in_spatial_ref = merge_layer_proxy->GetSpatialReference(); + + // make sure the projection of import dataset is matched with current + OGRCoordinateTransformation *poCT = NULL; + if (spatial_ref !=NULL && in_spatial_ref != NULL) { + if (!spatial_ref->IsSame(in_spatial_ref) ) { + // convert geometry with original projection if needed + poCT = OGRCreateCoordinateTransformation(in_spatial_ref, + spatial_ref); + merge_layer_proxy->ApplyProjection(poCT); + } + } + // make sure the geometry type is same + Shapefile::ShapeType in_shape_type; + in_shape_type = merge_layer_proxy->GetGdaGeometries(in_geoms); + if (shape_type != in_shape_type) { + error_msg = _("Merge error: Geometric type of selected datasource has to be the same with current datasource."); + throw GdaException(error_msg.mb_str()); } } - // make sure the geometry type is same - Shapefile::ShapeType in_shape_type=merge_layer_proxy->GetGdaGeometries(in_geoms); - if (shape_type != in_shape_type) { - error_msg = _("Merge error: Geometric type of selected datasource has to be the same with current datasource."); - throw GdaException(error_msg.mb_str()); - } - std::vector new_geoms = geoms; - vector new_key_vec = key1_vec; map idx2_dict; int idx2 = key1_vec.size(); @@ -651,7 +674,9 @@ void MergeTableDlg::OuterJoinMerge() wxString tmp = key2_vec[i]; if (key1_map.find(tmp) == key1_map.end()) { new_key_vec.push_back(tmp); - new_geoms.push_back(in_geoms[i]); + if (!project_s->IsTableOnlyProject()) { + new_geoms.push_back(in_geoms[i]); + } idx2_dict[i] = idx2++; } else { idx2_dict[i] = key1_map[tmp]; @@ -715,17 +740,24 @@ void MergeTableDlg::OuterJoinMerge() for (int i=0; iAddOGRColumn(new_fields_dict[new_fields[i]]); } - - ExportDataDlg export_dlg(this, shape_type, new_geoms, spatial_ref, - mem_table); - if (export_dlg.ShowModal() == wxID_OK) { + + ExportDataDlg *export_dlg; + if (!project_s->IsTableOnlyProject()) { + export_dlg = new ExportDataDlg(this, shape_type, new_geoms, + spatial_ref, mem_table); + } else { + export_dlg = new ExportDataDlg(this, mem_table); + } + + if (export_dlg->ShowModal() == wxID_OK) { wxMessageDialog dlg(this, _("File merged into Table successfully."), _("Success"), wxOK); dlg.ShowModal(); } - // no need to free geometry memory here, see ExportDataDlg.cpp line:620 delete mem_table; + delete export_dlg; EndDialog(wxID_OK); + } catch (GdaException& ex) { if (ex.type() == GdaException::NORMAL) return; wxMessageDialog dlg(this, ex.what(), _("Error"), wxOK | wxICON_ERROR); @@ -741,8 +773,8 @@ void MergeTableDlg::LeftJoinMerge() // get selected field names from merging table map merged_fnames_dict; - for (set::iterator it = table_fnames.begin(); - it != table_fnames.end(); ++it ) { + for (set::iterator it = dups.begin(); + it != dups.end(); ++it ) { merged_fnames_dict[ *it ] = *it; } vector merged_field_names = diff --git a/DataViewer/OGRColumn.cpp b/DataViewer/OGRColumn.cpp index c55f6b695..cca567648 100644 --- a/DataViewer/OGRColumn.cpp +++ b/DataViewer/OGRColumn.cpp @@ -380,11 +380,13 @@ void OGRColumnInteger::UpdateData(const vector& data) if (is_new) { for (int i=0; idata[i]->SetField(col_idx, (GIntBig)data[i]); + undef_markers[i] = false; } } } @@ -394,11 +396,13 @@ void OGRColumnInteger::UpdateData(const vector& data) if (is_new) { for (int i=0; idata[i]->SetField(col_idx, (GIntBig)data[i]); + undef_markers[i] = false; } } } @@ -613,6 +617,7 @@ void OGRColumnDouble::UpdateData(const vector& data) int col_idx = GetColIndex(); for (int i=0; idata[i]->SetField(col_idx, data[i]); + undef_markers[i] = false; } } } @@ -708,7 +713,8 @@ void OGRColumnDouble::SetValueAt(int row_idx, const wxString &value, } double d_val; - if ( value.ToDouble(&d_val) ) { + //if ( value.ToDouble(&d_val) ) { + if (wxNumberFormatter::FromString(value, &d_val)) { if (is_new) { new_data[row_idx] = d_val; } else { @@ -987,11 +993,13 @@ void OGRColumnString::UpdateData(const vector& data) if (is_new) { for (int i=0; idata[i]->SetField(col_idx, data[i].c_str()); + undef_markers[i] = false; } } } @@ -1003,6 +1011,7 @@ void OGRColumnString::UpdateData(const vector& data) wxString tmp; tmp << data[i]; new_data[i] = tmp.c_str(); + undef_markers[i] = false; } } else { int col_idx = GetColIndex(); @@ -1010,6 +1019,7 @@ void OGRColumnString::UpdateData(const vector& data) wxString tmp; tmp << data[i]; ogr_layer->data[i]->SetField(col_idx, tmp.c_str()); + undef_markers[i] = false; } } } @@ -1021,6 +1031,7 @@ void OGRColumnString::UpdateData(const vector& data) wxString tmp; tmp << data[i]; new_data[i] = tmp.c_str(); + undef_markers[i] = false; } } else { int col_idx = GetColIndex(); @@ -1028,6 +1039,7 @@ void OGRColumnString::UpdateData(const vector& data) wxString tmp; tmp << data[i]; ogr_layer->data[i]->SetField(col_idx, tmp.c_str()); + undef_markers[i] = false; } } } @@ -1251,6 +1263,7 @@ void OGRColumnDate::UpdateData(const vector &data) if (is_new) { for (int i=0; i &data) l_second = data[i] % 100; ogr_layer->data[i]->SetField(col_idx, l_year, l_month, l_day, l_hour, l_minute, l_second, 0); // last TZFlag + undef_markers[i] = false; } } } diff --git a/DataViewer/OGRColumn.h b/DataViewer/OGRColumn.h index a70383a3f..6e0162ffa 100644 --- a/DataViewer/OGRColumn.h +++ b/DataViewer/OGRColumn.h @@ -49,7 +49,6 @@ class OGRColumn OGRLayerProxy* ogr_layer; // markers for a new column if the cell has ben assigned a value vector undef_markers; - int get_date_format(std::string& s); public: @@ -81,7 +80,6 @@ class OGRColumn void SetDeletion(bool is_delete) { is_deleted = is_delete;} - wxString GetName(); void Rename(const wxString& new_name); diff --git a/DataViewer/OGRTable.cpp b/DataViewer/OGRTable.cpp index 00413f317..2d1ad9720 100644 --- a/DataViewer/OGRTable.cpp +++ b/DataViewer/OGRTable.cpp @@ -47,8 +47,6 @@ OGRTable::OGRTable(int n_rows) // This is in-memory table only. ogr_layer = NULL; rows = n_rows; - - //table_state->registerObserver(this); } OGRTable::OGRTable(OGRLayerProxy* _ogr_layer, @@ -400,6 +398,27 @@ void OGRTable::FillNumericColIdMap(std::vector& col_map) } } +void OGRTable::FillStringAndIntegerColIdMap(std::vector& col_map) +{ + std::vector t; + FillColIdMap(t); + int numeric_cnt = 0; + for (int i=0, iend=t.size(); i& col_map) { std::vector t; @@ -601,22 +620,10 @@ int OGRTable::GetColDispDecimals(int col) // Displayed decimals will be configured in project file VarGroup vg = var_order.FindVarGroup(col); if (vg.GetDispDecs() == -1) { - int deci = GetColDecimals(col, 0); - if (deci > 0) { - // if read decimal from dataset, use it as display decimal - if (deci > 6) { - // to keep screenshot the same, when display decimals is larger - // (e.g. DBF uses 15 decimals) than default display decimals(6), - // use default display decimals - deci = 6; - vg.SetDispDecs(-1); - } else { - vg.SetDispDecs(deci); - } - return deci; - } else { + if (GetColType(col) == GdaConst::double_type) + return GdaConst::default_display_decimals; + else return -1; - } } else { //Use user specified display decimals (in gda project file) return vg.GetDispDecs(); @@ -751,6 +758,17 @@ void OGRTable::GetColData(int col, s_array_type& data) } } +int OGRTable::GetDirectColIdx(wxString col_nm) +{ + for (size_t i=0; iGetName()) { + return i; + } + } + return -1; +} + void OGRTable::GetDirectColData(int col, std::vector& data) { // using underneath columns[] @@ -1123,11 +1141,12 @@ bool OGRTable::RenameGroup(int col, const wxString& new_name) if (!IsColTimeVariant(col)) { return RenameSimpleCol(col, 0, new_name); } + // may allow e.g. ID->id bool case_sensitive = cols_case_sensitive; if (DoesNameExist(new_name, case_sensitive) || !IsValidGroupName(new_name)) return false; - wxString old_name = GetColName(col); - + + wxString old_name = GetColName(col); var_order.SetGroupName(col, new_name); table_state->SetColRenameEvtTyp(old_name, new_name, false); table_state->notifyObservers(); @@ -1322,7 +1341,8 @@ int OGRTable::InsertCol(GdaConst::FieldType type, // to keep screenshot the same, when display decimals is larger // (e.g. DBF uses 15 decimals) than default display decimals(6), // use default display decimals - tde.displayed_decimals = decimals > 6 ? 6 : decimals; + if (type==GdaConst::double_type) + tde.displayed_decimals = GdaConst::default_display_decimals; tde.type = type; tde.length = field_len; tde.change_to_db = true; @@ -1453,7 +1473,7 @@ void OGRTable::GroupCols(const std::vector& cols, } if (decimals <=0) decimals = GdaConst::default_dbf_double_decimals; - if (displayed_decimals<=0) displayed_decimals = decimals; + if (displayed_decimals<=0) displayed_decimals = GdaConst::default_display_decimals; TableDeltaList_type tdl; var_order.Group(cols, name, pos, tdl, cols_case_sensitive); @@ -1547,8 +1567,9 @@ void OGRTable::RenameTimeStep(int time, const wxString& new_name) int OGRTable::FindOGRColId(int wxgrid_col_pos, int time) { wxString name = var_order.GetSimpleColName(wxgrid_col_pos, time); - return FindOGRColId(name); + //const VarGroup& vg = var_order.FindVarGroup(wxgrid_col_pos); + //vg.GetNameByTime(time); } int OGRTable::FindOGRColId(const wxString& name) @@ -1615,3 +1636,18 @@ bool OGRTable::IsValidDBColName(const wxString& col_nm, } return false; } + +void OGRTable::AddMetaInfo(const wxString col_nm, const wxString& key, + const wxString& val) +{ + // Add meta info for a specific colmn + int col_id = var_order.GetColId(col_nm, true); + if (col_id <0) return; + var_order.AddMetaInfo(col_id, key, val); +} + +std::map OGRTable::GetMetaData(int col_id) +{ + VarGroup vg = var_order.FindVarGroup(col_id); + return vg.meta_data; +} diff --git a/DataViewer/OGRTable.h b/DataViewer/OGRTable.h index d0ee9fa7e..5988ce59a 100644 --- a/DataViewer/OGRTable.h +++ b/DataViewer/OGRTable.h @@ -54,7 +54,7 @@ class OGRTable : public TableInterface, TableStateObserver OGRLayerProxy* ogr_layer; vector columns; VarOrderMapper var_order; - + // may contains duplicated variable names e.g. in csv file vector org_var_names; // queues of table operations @@ -114,6 +114,7 @@ class OGRTable : public TableInterface, TableStateObserver virtual int GetColIdx(const wxString& name, bool ignore_case=false); virtual void FillColIdMap(std::vector& col_map); virtual void FillStringColIdMap(std::vector& col_map); + virtual void FillStringAndIntegerColIdMap(std::vector& col_map); virtual void FillNumericColIdMap(std::vector& col_map); virtual void FillDateTimeColIdMap(std::vector& col_map); virtual void FillIntegerColIdMap(std::vector& col_map); @@ -141,7 +142,7 @@ class OGRTable : public TableInterface, TableStateObserver virtual void GetColData(int col, int time, std::vector& data); virtual void GetColData(int col, int time, std::vector& data); virtual void GetColData(int col, int time, std::vector& data); - + virtual int GetDirectColIdx(wxString col_nm); virtual void GetDirectColData(int col, std::vector& data); virtual void GetDirectColData(int col, std::vector& data); virtual void GetDirectColData(int col, std::vector& data); @@ -189,6 +190,9 @@ class OGRTable : public TableInterface, TableStateObserver virtual void RenameTimeStep(int time, const wxString& new_name); virtual bool IsValidDBColName(const wxString& col_nm, wxString* fld_warn_msg=0); + virtual void AddMetaInfo(const wxString col_nm, const wxString& key, + const wxString& val); + virtual std::map GetMetaData(int col_id); }; #endif diff --git a/DataViewer/TableBase.cpp b/DataViewer/TableBase.cpp index 7c1655b7b..d07e21f43 100644 --- a/DataViewer/TableBase.cpp +++ b/DataViewer/TableBase.cpp @@ -17,7 +17,13 @@ * along with this program. If not, see . */ +#include + +#ifndef WX_PRECOMP +#include +#endif #include +#include #include #include #include "../HighlightState.h" @@ -32,6 +38,395 @@ #include "../SaveButtonManager.h" #include "TableFrame.h" +wxGridCellInt64Renderer::wxGridCellInt64Renderer(int width) +{ + m_width = width; + SetWidth(width); +} + +wxGridCellRenderer *wxGridCellInt64Renderer::Clone() const +{ + wxGridCellInt64Renderer *renderer = new wxGridCellInt64Renderer; + renderer->m_width = m_width; + return renderer; +} + +wxSize wxGridCellInt64Renderer::GetBestSize(wxGrid& grid, + wxGridCellAttr& attr, + wxDC& dc, + int row, int col) +{ + return DoGetBestSize(attr, dc, GetString(grid, row, col)); +} + +void wxGridCellInt64Renderer::Draw(wxGrid& grid, + wxGridCellAttr& attr, + wxDC& dc, + const wxRect& rectCell, + int row, int col, + bool isSelected) +{ + wxGridCellRenderer::Draw(grid, attr, dc, rectCell, row, col, isSelected); + + SetTextColoursAndFont(grid, attr, dc, isSelected); + + // draw the text right aligned by default + int hAlign = wxALIGN_RIGHT, + vAlign = wxALIGN_INVALID; + attr.GetNonDefaultAlignment(&hAlign, &vAlign); + + wxRect rect = rectCell; + rect.Inflate(-1); + + grid.DrawTextRectangle(dc, GetString(grid, row, col), rect, hAlign, vAlign); +} + +wxString wxGridCellInt64Renderer::GetString(const wxGrid& grid, int row, int col) +{ + wxGridTableBase *table = grid.GetTable(); + + wxString text = table->GetValue(row, col); + return text; +} + +wxGridCellInt64Editor::wxGridCellInt64Editor(int width) +{ + m_width = width; +} + +void wxGridCellInt64Editor::Create(wxWindow* parent, + wxWindowID id, + wxEvtHandler* evtHandler) +{ + wxGridCellTextEditor::Create(parent, id, evtHandler); + +#if wxUSE_VALIDATORS + wxString name_chars="-+0123456789"; + wxTextValidator name_validator(wxFILTER_INCLUDE_CHAR_LIST); + name_validator.SetCharIncludes(name_chars); + Text()->SetValidator(name_validator); +#endif +} + +void wxGridCellInt64Editor::BeginEdit(int row, int col, wxGrid* grid) +{ + // first get the value + wxGridTableBase *table = grid->GetTable(); + const wxString value = table->GetValue(row, col); + if ( !value.empty() ) { + if ( !value.ToLongLong(&m_value) ) { + wxFAIL_MSG("this cell doesn't have int64 value"); + return; + } + DoBeginEdit(value); + } else { + DoBeginEdit("0"); + } +} + +bool wxGridCellInt64Editor::EndEdit(int WXUNUSED(row), + int WXUNUSED(col), + const wxGrid* WXUNUSED(grid), + const wxString& oldval, wxString *newval) +{ + long long value = 0; + wxString text; + m_empty = false; + + text = Text()->GetValue(); + if ( text.empty() ) { + m_empty = true; + if ( oldval.empty() ) { + return false; + } + } else { + // non-empty text now (maybe 0) + if ( !text.ToLongLong(&value) ) + return false; + + // if value == m_value == 0 but old text was "" and new one is + // "0" something still did change + if ( value == m_value && (value || !oldval.empty()) ) + return false; + } + m_value = value; + + if ( newval ) + *newval = text; + + return true; +} + +void wxGridCellInt64Editor::ApplyEdit(int row, int col, wxGrid* grid) +{ + wxGridTableBase * const table = grid->GetTable(); + if (m_empty) table->SetValue(row, col, ""); + else table->SetValue(row, col, wxString::Format("%lld", m_value)); +} + +void wxGridCellInt64Editor::Reset() +{ + DoReset(GetString()); +} + +bool wxGridCellInt64Editor::IsAcceptedKey(wxKeyEvent& event) +{ + if ( wxGridCellEditor::IsAcceptedKey(event) ) { + int keycode = event.GetKeyCode(); + if ( (keycode < 128) && + (wxIsdigit(keycode) || keycode == '+' || keycode == '-')) { + return true; + } + } + return false; +} + +void wxGridCellInt64Editor::StartingKey(wxKeyEvent& event) +{ + int keycode = event.GetKeyCode(); + if ( wxIsdigit(keycode) || keycode == '+' || keycode == '-') { + wxGridCellTextEditor::StartingKey(event); + // skip Skip() below + return; + } + event.Skip(); +} + +// return the value in the spin control if it is there (the text control otherwise) +wxString wxGridCellInt64Editor::GetValue() const +{ + wxString s = Text()->GetValue(); + return s; +} + +// ---------------------------------------------------------------------------- +// wxGridCellDoubleRenderer +// ---------------------------------------------------------------------------- + +wxGridCellDoubleRenderer::wxGridCellDoubleRenderer(int width, + int precision) +{ + SetWidth(width); + SetPrecision(precision); +} + +wxGridCellRenderer *wxGridCellDoubleRenderer::Clone() const +{ + wxGridCellDoubleRenderer *renderer = new wxGridCellDoubleRenderer(m_width, + m_precision); + return renderer; +} + +wxString wxGridCellDoubleRenderer::GetString(const wxGrid& grid, int row, int col) +{ + wxGridTableBase *table = grid.GetTable(); + + double val; + wxString text = table->GetValue(row, col); + LOG_MSG(text); + if ( text.ToDouble(&val) ) { + long double v; + sscanf(text.c_str(), "%Lf", &v); + + wxString format; + format.Printf("%%%d.%dLf", m_width, m_precision); + text.Printf(format, v); + LOG_MSG(text); + } + //else: text already contains the string + + return text; +} + +void wxGridCellDoubleRenderer::Draw(wxGrid& grid, + wxGridCellAttr& attr, + wxDC& dc, + const wxRect& rectCell, + int row, int col, + bool isSelected) +{ + wxGridCellRenderer::Draw(grid, attr, dc, rectCell, row, col, isSelected); + + SetTextColoursAndFont(grid, attr, dc, isSelected); + + // draw the text right aligned by default + int hAlign = wxALIGN_RIGHT, + vAlign = wxALIGN_INVALID; + attr.GetNonDefaultAlignment(&hAlign, &vAlign); + + wxRect rect = rectCell; + rect.Inflate(-1); + + wxString val = GetString(grid, row, col); + grid.DrawTextRectangle(dc, val, rect, hAlign, vAlign); +} + +wxSize wxGridCellDoubleRenderer::GetBestSize(wxGrid& grid, + wxGridCellAttr& attr, + wxDC& dc, + int row, int col) +{ + return DoGetBestSize(attr, dc, GetString(grid, row, col)); +} + + +// ---------------------------------------------------------------------------- +// wxGridCellDoubleEditor +// ---------------------------------------------------------------------------- + +wxGridCellDoubleEditor::wxGridCellDoubleEditor(int width, int precision) +{ + m_width = width; + m_precision = precision; +} + +void wxGridCellDoubleEditor::Create(wxWindow* parent, + wxWindowID id, + wxEvtHandler* evtHandler) +{ + wxGridCellTextEditor::Create(parent, id, evtHandler); + +#if wxUSE_VALIDATORS + wxString name_chars="-+.0123456789"; + wxTextValidator name_validator(wxFILTER_INCLUDE_CHAR_LIST); + name_validator.SetCharIncludes(name_chars); + Text()->SetValidator(name_validator); +#endif +} + +bool wxGridCellDoubleEditor::IsAcceptedKey(wxKeyEvent& event) +{ + if ( wxGridCellEditor::IsAcceptedKey(event) ) { + const int keycode = event.GetKeyCode(); + if ( wxIsascii(keycode) ) { +#if wxUSE_INTL + const wxString decimalPoint = + wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER); +#else + const wxString decimalPoint('.'); +#endif + // accept digits, 'e' as in '1e+6', also '-', '+', and '.' + if ( wxIsdigit(keycode) || + tolower(keycode) == 'e' || + keycode == decimalPoint || + keycode == '+' || + keycode == '-' ) { + return true; + } + } + } + return false; +} + +void wxGridCellDoubleEditor::BeginEdit(int row, int col, wxGrid* grid) +{ + // first get the value + wxGridTableBase * const table = grid->GetTable(); + if ( table->CanGetValueAs(row, col, wxGRID_VALUE_FLOAT) ) { + m_value = table->GetValueAsDouble(row, col); + } else { + m_value = 0.0; + double v; + const wxString value = table->GetValue(row, col); + if ( !value.empty() ) { + if ( !value.ToDouble(&v) ) { + wxFAIL_MSG("this cell doesn't have float value"); + return; + } + sscanf(value.c_str(), "%Lf", &m_value); + } + } + DoBeginEdit(GetString()); +} + +bool wxGridCellDoubleEditor::EndEdit(int WXUNUSED(row), + int WXUNUSED(col), + const wxGrid* WXUNUSED(grid), + const wxString& oldval, wxString *newval) +{ + const wxString text(Text()->GetValue()); + double value; + if ( !text.empty() ) { + if ( !wxNumberFormatter::FromString(text, &value)) + return false; + } else {// new value is empty string + if ( oldval.empty() ) + return false; // nothing changed + value = 0.; + } + long double v; + sscanf(text.c_str(), "%Lf", &v); + + // the test for empty strings ensures that we don't skip the value setting + // when "" is replaced by "0" or vice versa as "" numeric value is also 0. + if ( v == m_value && !text.empty() && !oldval.empty() ) + return false; // nothing changed + + m_value = v; + + if ( newval ) + *newval = text; + + return true; +} + +void wxGridCellDoubleEditor::ApplyEdit(int row, int col, wxGrid* grid) +{ + wxGridTableBase * const table = grid->GetTable(); + + if ( table->CanSetValueAs(row, col, wxGRID_VALUE_FLOAT) ) + table->SetValueAsDouble(row, col, m_value); + else { + wxString val = Text()->GetValue(); + table->SetValue(row, col, val); + } +} + +void wxGridCellDoubleEditor::Reset() +{ + DoReset(GetString()); +} + +void wxGridCellDoubleEditor::StartingKey(wxKeyEvent& event) +{ + int keycode = event.GetKeyCode(); + char tmpbuf[2]; + tmpbuf[0] = (char) keycode; + tmpbuf[1] = '\0'; + wxString strbuf(tmpbuf, *wxConvCurrent); + +#if wxUSE_INTL + bool is_decimal_point = ( strbuf == + wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER) ); +#else + bool is_decimal_point = ( strbuf == "." ); +#endif + + if ( wxIsdigit(keycode) || keycode == '+' || keycode == '-' + || is_decimal_point ) { + wxGridCellTextEditor::StartingKey(event); + + // skip Skip() below + return; + } + + event.Skip(); +} + +wxString wxGridCellDoubleEditor::GetValue() const +{ + wxString s = Text()->GetValue(); + return s; +} + +wxString wxGridCellDoubleEditor::GetString() +{ + wxString format; + format.Printf("%%%d.%dLf", m_width-m_precision-1, m_precision); + wxString val = wxString::Format(format, m_value); + return val; +} + class TableCellAttrProvider : public wxGridCellAttrProvider { public: @@ -111,7 +506,7 @@ TableBase::TableBase(Project* _project,TemplateFrame* t_frame) highlight_state->registerObserver(this); table_state->registerTableBase(this); time_state->registerObserver(this); - + UpdateStatusBar(); } @@ -212,7 +607,6 @@ void TableBase::FromGridSelectRow(int row) void TableBase::FromGridDeselectRow(int row) { //LOG_MSG(wxString::Format("deselecting %d", (int) row_order[row])); - int hl_size = highlight_state->GetHighlightSize(); std::vector& hs = highlight_state->GetHighlight(); @@ -435,6 +829,7 @@ void TableBase::SetValue(int row, int col, const wxString &value) if (project->GetSaveButtonManager()) { project->GetSaveButtonManager()->SetMetaDataSaveNeeded(true); } + GetView()->Refresh(); } wxString TableBase::GetRowLabelValue(int row) @@ -507,12 +902,20 @@ void TableBase::update(TableState* o) if (e.insert) { if (e.type == GdaConst::long64_type) { // leave as a string: for more than 10 digts 64-bit number + GetView()->RegisterDataType("Long64Type", + new wxGridCellInt64Renderer(), + new wxGridCellInt64Editor()); + GetView()->SetColFormatCustom(e.pos_final, "Long64Type"); } else if (e.type == GdaConst::double_type) { + int d = e.decimals; int dd = e.displayed_decimals; - if (dd == -1) dd = e.decimals; - dd = std::min(e.decimals, dd); - if (dd <=0) dd = GdaConst::default_dbf_double_decimals; - GetView()->SetColFormatFloat(e.pos_final, -1, dd); + if (d == -1) d = GdaConst::default_dbf_double_decimals; + if (dd == -1) dd = GdaConst::default_display_decimals; + int w = e.length; + GetView()->RegisterDataType("DoubleType", + new wxGridCellFloatRenderer(w, dd), + new wxGridCellDoubleEditor(w, d)); + GetView()->SetColFormatCustom(e.pos_final, "DoubleType"); } else { // leave as a string } @@ -526,10 +929,15 @@ void TableBase::update(TableState* o) } else if (o->GetEventType() == TableState::col_disp_decimals_change) { int pos = o->GetModifiedColPos(); if (table_int->GetColType(pos) == GdaConst::double_type) { + int d = GdaConst::default_dbf_double_decimals; int dd = table_int->GetColDispDecimals(pos); - GetView()->SetColFormatFloat(pos, -1, dd); + int w = table_int->GetColLength(pos); + GetView()->RegisterDataType("DoubleType", + new wxGridCellFloatRenderer(w, dd), + new wxGridCellDoubleEditor(w, d)); + GetView()->SetColFormatCustom(pos, "DoubleType"); } - } + } GetView()->Refresh(); } diff --git a/DataViewer/TableBase.h b/DataViewer/TableBase.h index c9760f035..3c39705cd 100644 --- a/DataViewer/TableBase.h +++ b/DataViewer/TableBase.h @@ -33,6 +33,136 @@ class TimeState; class HighlightState; class TemplateFrame; +class wxGridCellInt64Renderer : public wxGridCellStringRenderer +{ + // formatting parameters + int m_width; + wxString m_format; +public: + wxGridCellInt64Renderer(int width=19); + + int GetWidth() const { return m_width; } + void SetWidth(int width) { m_width = width; } + + // draw the string right aligned + virtual void Draw(wxGrid& grid, + wxGridCellAttr& attr, + wxDC& dc, + const wxRect& rect, + int row, int col, + bool isSelected) wxOVERRIDE; + + virtual wxSize GetBestSize(wxGrid& grid, + wxGridCellAttr& attr, + wxDC& dc, + int row, int col) wxOVERRIDE; + + virtual wxGridCellRenderer *Clone() const wxOVERRIDE; + +protected: + wxString GetString(const wxGrid& grid, int row, int col); +}; + +class wxGridCellInt64Editor : public wxGridCellTextEditor +{ +public: + wxGridCellInt64Editor(int width=19); + + virtual void Create(wxWindow* parent, + wxWindowID id, + wxEvtHandler* evtHandler) wxOVERRIDE; + + virtual bool IsAcceptedKey(wxKeyEvent& event) wxOVERRIDE; + virtual void BeginEdit(int row, int col, wxGrid* grid) wxOVERRIDE; + virtual bool EndEdit(int row, int col, const wxGrid* grid, + const wxString& oldval, wxString *newval) wxOVERRIDE; + virtual void ApplyEdit(int row, int col, wxGrid* grid) wxOVERRIDE; + + virtual void Reset() wxOVERRIDE; + virtual void StartingKey(wxKeyEvent& event) wxOVERRIDE; + virtual wxGridCellEditor *Clone() const wxOVERRIDE + { return new wxGridCellInt64Editor(m_width); } + // added GetValue so we can get the value which is in the control + virtual wxString GetValue() const wxOVERRIDE; + +protected: + // string representation of our value + wxString GetString() + { return wxString::Format("%lld", m_value); } + +private: + int m_width; + long long m_value; + bool m_empty; +}; + +class wxGridCellDoubleRenderer : public wxGridCellStringRenderer +{ + // formatting parameters + int m_width; + int m_precision; + long double m_value; + +public: + wxGridCellDoubleRenderer(int width, int precision); + + int GetWidth() const { return m_width; } + void SetWidth(int width) { m_width = width; } + int GetPrecision() const { return m_precision; } + void SetPrecision(int precision) { m_precision = precision; } + + // draw the string right aligned + virtual void Draw(wxGrid& grid, + wxGridCellAttr& attr, + wxDC& dc, + const wxRect& rect, + int row, int col, + bool isSelected) wxOVERRIDE; + + virtual wxSize GetBestSize(wxGrid& grid, + wxGridCellAttr& attr, + wxDC& dc, + int row, int col) wxOVERRIDE; + + virtual wxGridCellRenderer *Clone() const wxOVERRIDE; + +protected: + wxString GetString(const wxGrid& grid, int row, int col); +}; + +class wxGridCellDoubleEditor : public wxGridCellTextEditor +{ +public: + wxGridCellDoubleEditor(int width, int precision); + + virtual void Create(wxWindow* parent, + wxWindowID id, + wxEvtHandler* evtHandler) wxOVERRIDE; + + virtual bool IsAcceptedKey(wxKeyEvent& event) wxOVERRIDE; + virtual void BeginEdit(int row, int col, wxGrid* grid) wxOVERRIDE; + virtual bool EndEdit(int row, int col, const wxGrid* grid, + const wxString& oldval, wxString *newval) wxOVERRIDE; + virtual void ApplyEdit(int row, int col, wxGrid* grid) wxOVERRIDE; + + virtual void Reset() wxOVERRIDE; + virtual void StartingKey(wxKeyEvent& event) wxOVERRIDE; + virtual wxGridCellEditor *Clone() const wxOVERRIDE + { return new wxGridCellDoubleEditor(m_width, m_precision); } + // added GetValue so we can get the value which is in the control + virtual wxString GetValue() const wxOVERRIDE; + +protected: + // string representation of our value + wxString GetString(); + +private: + int m_width; + int m_precision; + long double m_value; + bool m_empty; +}; + class TableBase : public TableStateObserver, public TimeStateObserver, public HighlightStateObserver, public wxGridTableBase { diff --git a/DataViewer/TableFrame.cpp b/DataViewer/TableFrame.cpp index 52d5bfb5a..e75e75c94 100644 --- a/DataViewer/TableFrame.cpp +++ b/DataViewer/TableFrame.cpp @@ -43,9 +43,6 @@ BEGIN_EVENT_TABLE(TableFrame, TemplateFrame) EVT_GRID_COL_SIZE( TableFrame::OnColSizeEvent ) EVT_GRID_COL_MOVE( TableFrame::OnColMoveEvent ) EVT_GRID_CELL_CHANGED( TableFrame::OnCellChanged ) - - //EVT_MENU(XRCID("ID_TABLE_GROUP"), TableFrame::OnGroupVariables) - //EVT_MENU(XRCID("ID_TABLE_UNGROUP"), TableFrame::OnUnGroupVariable) EVT_MENU(XRCID("ID_TABLE_RENAME_VARIABLE"), TableFrame::OnRenameVariable) END_EVENT_TABLE() @@ -58,9 +55,7 @@ TableFrame::TableFrame(wxFrame *parent, Project* project, popup_col(-1) { wxLogMessage("Open TableFrame."); - - wxPanel *panel = new wxPanel(this, wxID_ANY); - + wxPanel *panel = new wxPanel(this, wxID_ANY); DisplayStatusBar(true); wxString new_title(title); new_title << " - " << project->GetProjectTitle(); @@ -86,13 +81,25 @@ TableFrame::TableFrame(wxFrame *parent, Project* project, } grid->SetSelectionMode(wxGrid::wxGridSelectRowsOrColumns); - //grid->SetSelectionMode(wxGrid::wxGridSelectCells); for (int i=0, iend=table_base->GetNumberCols(); iGetColType(i); if (col_type == GdaConst::long64_type) { - grid->SetColFormatFloat(i, -1, 0); + grid->RegisterDataType("Long64Type", + new wxGridCellInt64Renderer(), + new wxGridCellInt64Editor()); + grid->SetColFormatCustom(i, "Long64Type"); + } else if (col_type == GdaConst::double_type) { - grid->SetColFormatFloat(i, -1, table_int->GetColDispDecimals(i)); + int d = table_int->GetColDecimals(i); + if (d < 0) d = GdaConst::default_dbf_double_decimals; + int dd = table_int->GetColDispDecimals(i); + if (dd < 0) dd = GdaConst::default_dbf_double_decimals; + int w = table_int->GetColLength(i); + grid->RegisterDataType("DoubleType", + new wxGridCellFloatRenderer(w, dd), + new wxGridCellDoubleEditor(w, d)); + grid->SetColFormatCustom(i, "DoubleType"); + } else if (col_type == GdaConst::date_type || col_type == GdaConst::time_type || col_type == GdaConst::datetime_type) { @@ -120,7 +127,7 @@ TableFrame::TableFrame(wxFrame *parent, Project* project, if (fac < 1) fac = 1; if (fac > 5) fac = 5; fac = fac * 1.2; - grid->SetColMinimalWidth(i, cur_col_size * fac); + grid->SetColMinimalWidth(i, cur_col_size); grid->SetColSize(i, cur_col_size * fac); } else { // add a few pixels of buffer to current label @@ -250,7 +257,8 @@ void TableFrame::DisplayPopupMenu( wxGridEvent& ev ) if (popup_col != -1) { rename_str << " \"" << ti->GetColName(popup_col) << "\""; } - optMenu->FindItem(XRCID("ID_TABLE_RENAME_VARIABLE"))->SetItemLabel(rename_str); + wxMenuItem* rename_mu = optMenu->FindItem(XRCID("ID_TABLE_RENAME_VARIABLE")); + rename_mu->SetItemLabel(rename_str); bool enable_rename = false; if (popup_col!=-1) { if (ti->IsColTimeVariant(popup_col)) { @@ -260,15 +268,25 @@ void TableFrame::DisplayPopupMenu( wxGridEvent& ev ) } } - optMenu->FindItem(XRCID("ID_TABLE_RENAME_VARIABLE"))->Enable(enable_rename); - + rename_mu->Enable(enable_rename); + + // Set meta-data + std::map meta_data = ti->GetMetaData(popup_col); + if (meta_data.empty() == false) { + wxMenu* imp = new wxMenu; + std::map::iterator it; + for (it = meta_data.begin(); it != meta_data.end(); it++) { + wxString lbl = it->first + ": " + it->second; + imp->Append(XRCID(lbl), lbl); + } + optMenu->AppendSubMenu(imp, _("Meta-data")); + } PopupMenu(optMenu, ev.GetPosition()); } void TableFrame::SetEncodingCheckmarks(wxMenu* m, wxFontEncoding e) { - m->FindItem(XRCID("ID_ENCODING_UTF8")) ->Check(e==wxFONTENCODING_UTF8); m->FindItem(XRCID("ID_ENCODING_UTF16")) @@ -536,6 +554,8 @@ void TableFrame::OnCellChanged( wxGridEvent& ev ) dlg.ShowModal(); ev.Veto(); } + //grid->SetCellAlignment (ev.GetRow(), ev.GetCol(), wxALIGN_RIGHT); + //grid->SetDefaultCellAlignment(wxALIGN_RIGHT, wxALIGN_RIGHT); ev.Skip(); } @@ -611,9 +631,7 @@ void TableFrame::OnRenameVariable(wxCommandEvent& event) wxString curr_name = ti->GetColName(popup_col); wxString new_name = PromptRenameColName(ti, popup_col, curr_name); - bool case_sensitive = project->IsFieldCaseSensitive(); - if (new_name.IsSameAs(curr_name, case_sensitive) || new_name.IsEmpty()) - return; + if (new_name.IsEmpty()) return; ti->RenameGroup(popup_col, new_name); @@ -643,6 +661,7 @@ wxString TableFrame::PromptRenameColName(TableInterface* ti, int curr_col, wxString error_msg = wxEmptyString; bool first = true; + // rename field name may allow different case, e.g. ID->id bool case_sensitive = project->IsFieldCaseSensitive(); while (!done) { @@ -654,7 +673,12 @@ wxString TableFrame::PromptRenameColName(TableInterface* ti, int curr_col, new_name.Trim(false); new_name.Trim(true); - bool is_name_exist = ti->DoesNameExist(new_name, case_sensitive); + bool is_name_exist = false; + bool case_change = new_name.CmpNoCase(curr_name) == 0; + if ( !case_change && ti->DoesNameExist(new_name, false)) { + is_name_exist = true; + } + // is_name_exist includes if new_name equals (case) curr_name if (is_name_exist == false ) { if (is_group_col) { diff --git a/DataViewer/TableInterface.cpp b/DataViewer/TableInterface.cpp index 18efbc02c..8c8fd81cf 100644 --- a/DataViewer/TableInterface.cpp +++ b/DataViewer/TableInterface.cpp @@ -17,7 +17,7 @@ * along with this program. If not, see . */ #include - +#include #include "../GenUtils.h" #include "../logger.h" #include "TableInterface.h" @@ -79,14 +79,10 @@ void TableInterface::SetProjectChangedSinceLastSave(bool chg) project_changed_since_last_save = chg; } -bool TableInterface::ColNameExists(const wxString& name) -{ - return (FindColId(name) != wxNOT_FOUND); -} - bool TableInterface::IsColTimeVariant(const wxString& name) { - if (!ColNameExists(name)) return false; + if (!DoesNameExist(name, cols_case_sensitive)) return false; + return IsColTimeVariant(FindColId(name)); } @@ -114,7 +110,6 @@ void TableInterface::SetEncoding(wxFontEncoding enc_type) wxString TableInterface::SuggestGroupName(std::vector cols) const { - using namespace std; wxString nm(GenUtils::FindLongestSubString(cols)); // remove trailing and leading whitespace, underscores and numbers bool done=false; @@ -142,7 +137,8 @@ wxString TableInterface::SuggestGroupName(std::vector cols) const return GetUniqueGroupName(nm); } -std::vector TableInterface::SuggestDBColNames(wxString new_grp_name, wxString prefix, int n) const +std::vector TableInterface::SuggestDBColNames(wxString new_grp_name, + wxString prefix, int n) const { return GetUniqueColNames(prefix, n); } @@ -165,10 +161,8 @@ wxString TableInterface::GetUniqueGroupName(wxString grp_nm) const std::vector TableInterface::GetUniqueColNames(wxString col_nm, int n) const { - using namespace std; - vector ret(n, col_nm); - if (n==1 && !DoesNameExist(col_nm, cols_case_sensitive)) - return ret; + std::vector ret(n, col_nm); + if (n==1 && !DoesNameExist(col_nm, cols_case_sensitive)) return ret; const int MAX_TRIES = 100000; if (col_nm.IsEmpty()) { @@ -280,3 +274,94 @@ void TableInterface::GetColData(int col, int time, std::vector& col_map) = 0; @@ -118,7 +117,8 @@ class TableInterface virtual void FillIntegerColIdMap(std::vector& col_map) = 0; virtual void FillNumericNameList(std::vector& num_names) = 0; virtual void FillStringNameList(std::vector& num_names) = 0; - + virtual void FillStringAndIntegerColIdMap(std::vector& col_map) = 0; + virtual int GetNumberCols() = 0; virtual int GetNumberRows() = 0; @@ -172,6 +172,7 @@ class TableInterface std::vector& undefined) = 0; // using underneath columns, not vargroup + virtual int GetDirectColIdx(wxString col_nm) = 0; virtual void GetDirectColData(int col, std::vector& data) =0; virtual void GetDirectColData(int col, std::vector& data)=0; virtual void GetDirectColData(int col, std::vector& data)=0; @@ -285,6 +286,7 @@ class TableInterface virtual void SetEncoding(wxFontEncoding enc_type); virtual wxFontEncoding GetFontEncoding() { return encoding_type; } virtual wxCSConv* GetEncoding() { return m_wx_encoding; } + virtual wxString GetEncodingName(); /** Suggests a group name based on the member names listed in cols. * Returned value is a unique, valid group name: it is different than @@ -332,14 +334,17 @@ class TableInterface * column names. Does not verify that name is unique. */ virtual bool IsValidGroupName(const wxString& grp_nm) const; - + virtual void AddMetaInfo(const wxString col_nm, const wxString& key, + const wxString& val) = 0; + + virtual std::map GetMetaData(int col_id) = 0; protected: wxString open_err_msg; TableState* table_state; TimeState* time_state; - + int rows; bool is_valid; bool changed_since_last_save; diff --git a/DataViewer/VarGroup.cpp b/DataViewer/VarGroup.cpp index 76f837449..fa17b61a8 100644 --- a/DataViewer/VarGroup.cpp +++ b/DataViewer/VarGroup.cpp @@ -25,7 +25,8 @@ VarGroup::VarGroup() : displayed_decimals(-1) } VarGroup::VarGroup(const VarGroup& e) : name(e.name), vars(e.vars), -displayed_decimals(e.displayed_decimals) +ogr_pos(e.ogr_pos), ogr_positions(e.ogr_positions), +displayed_decimals(e.displayed_decimals), meta_data(e.meta_data) { } @@ -50,6 +51,8 @@ VarGroup& VarGroup::operator=(const VarGroup& e) { name = e.name; vars = e.vars; + displayed_decimals = e.displayed_decimals; + meta_data = e.meta_data; return *this; } @@ -109,6 +112,15 @@ void VarGroup::GetVarNames(std::vector& var_nms) const } } +int VarGroup::GetOGRPosition(int time) const +{ + if (time == 0) return ogr_pos; + + if (time >= 0 && time < ogr_positions.size()) return ogr_positions[time]; + + return -1; +} + wxString VarGroup::GetNameByTime(int time) const { if ( vars.size() == 0 ) return name; @@ -126,6 +138,11 @@ void VarGroup::SetGroupName(const wxString& new_name) name = new_name; } +void VarGroup::AddMetaInfo(const wxString& key, const wxString& val) +{ + meta_data[key] = val; +} + void VarGroup::SetVarName(const wxString& new_name, int time) { if (time < 0 || vars.size() >= time) return; diff --git a/DataViewer/VarGroup.h b/DataViewer/VarGroup.h index d36ed4c41..9fed38837 100644 --- a/DataViewer/VarGroup.h +++ b/DataViewer/VarGroup.h @@ -21,6 +21,7 @@ #define __GEODA_CENTER_VAR_GROUP_H__ #include +#include #include #include @@ -33,6 +34,7 @@ struct VarGroup { VarGroup(const wxString &name, int displayed_decimals=-1); VarGroup(const wxString &name, std::vector vars, int displayed_decimals=-1); + bool operator<(const VarGroup& e) const; VarGroup& operator=(const VarGroup& e); void Append(const VarGroup& e); @@ -52,18 +54,39 @@ struct VarGroup { bool IsEmpty() const; wxString ToStr() const; int GetDispDecs() const; + int GetOGRPosition(int time) const; void SetDispDecs(int displayed_decimals); - + void AddMetaInfo(const wxString& key, const wxString& val); + /** simple name if only one time period, otherwise group name */ wxString name; + + // remember the position in ogr table, to prevent duplicate names + unsigned int ogr_pos; + /** var: empty "" indicates placeholder * if vars.size() == 0, then a simple variable */ std::vector vars; - + + // remember the position in ogr table, to prevent duplicate names + std::vector ogr_positions; + /** Number of displayed decimals for the entire group. Only used for non-integer numeric types. -1 indicates not used or use default for type. */ int displayed_decimals; + + // other for meta data: + // + // original name : aa + // classification type : quantile + // classification intervals : 1,2,3,4,5 + // + // original name : aa + // selection range : + // + // spatial selection : + std::map meta_data; }; #endif diff --git a/DataViewer/VarOrderMapper.cpp b/DataViewer/VarOrderMapper.cpp index f5c1ab492..0e5e82352 100644 --- a/DataViewer/VarOrderMapper.cpp +++ b/DataViewer/VarOrderMapper.cpp @@ -195,6 +195,14 @@ void VarOrderMapper::SetGroupName(int pos, const wxString& new_name) i->SetGroupName(new_name); } +void VarOrderMapper::AddMetaInfo(int pos, const wxString& key, + const wxString& val) +{ + if (pos < 0 || pos >= var_grps.size()) return; + VarGroup_container::iterator i = FindVarGroupIt(pos); + i->AddMetaInfo(key, val); +} + void VarOrderMapper::SetSimpleColName(int pos, int time, const wxString& new_name) { diff --git a/DataViewer/VarOrderMapper.h b/DataViewer/VarOrderMapper.h index 3f84137ae..f5abe9884 100644 --- a/DataViewer/VarOrderMapper.h +++ b/DataViewer/VarOrderMapper.h @@ -65,7 +65,7 @@ class VarOrderMapper { void RemoveTime(int time, TableDeltaList_type& tdl, bool case_sensitive); void InsertTime(int time, const wxString& new_time_id); void RenameTime(int time, const wxString& new_time_id); - + void AddMetaInfo(int pos, const wxString& key, const wxString& val); wxString VarOrderToStr() const; private: diff --git a/DataViewer/VarOrderPtree.cpp b/DataViewer/VarOrderPtree.cpp index 4e8eacc73..92338e9e2 100644 --- a/DataViewer/VarOrderPtree.cpp +++ b/DataViewer/VarOrderPtree.cpp @@ -27,6 +27,8 @@ #include "VarOrderPtree.h" #include "VarOrderPtree.h" +using namespace std; + VarOrderPtree::VarOrderPtree() : time_ids(1, "time 0") { } @@ -57,7 +59,6 @@ void VarOrderPtree::ReadPtree(const boost::property_tree::ptree& pt, { LOG_MSG("Entering VarOrderPtree::ReadPtree"); using boost::property_tree::ptree; - using namespace std; set grp_set; try { try { @@ -76,8 +77,36 @@ void VarOrderPtree::ReadPtree(const boost::property_tree::ptree& pt, if (key == "var") { VarGroup ent; wxString tmp(v.second.data().c_str(), wxConvUTF8); - ent.name = tmp; - //var_order.push_back(v.second.data()); + ent.name = tmp.Trim().Trim(false); + BOOST_FOREACH(const ptree::value_type &v, v.second) { + wxString tmp(v.first.data(), wxConvUTF8); + wxString key = tmp; + if (key == "displayed_decimals") { + wxString vs(v.second.data().c_str(), wxConvUTF8); + long dd; + if (!vs.ToLong(&dd)) dd = -1; + ent.displayed_decimals = dd; + } + if (key == "meta_data") { + BOOST_FOREACH(const ptree::value_type &mv, v.second) { + wxString mk(mv.first.data(), wxConvUTF8); + wxString ms(mv.second.data().c_str(), wxConvUTF8); + if (mk == "original_variable" || + mk == "number_of_categories" || + mk == "classification_type" || + mk == "selection_range") { + ent.meta_data[mk] = ms; + } else if (mk == "categories") { + BOOST_FOREACH(const ptree::value_type &mcv, mv.second) { + wxString mck(mcv.first.data(), wxConvUTF8); + wxString mcs(mcv.second.data().c_str(), wxConvUTF8); + mck = "categories." + mck; + ent.meta_data[mck] = mcs; + } + } + } + } + } var_grps.push_back(ent); } else if (key == "time_ids") { BOOST_FOREACH(const ptree::value_type &v, v.second) { @@ -137,7 +166,6 @@ void VarOrderPtree::WritePtree(boost::property_tree::ptree& pt, const wxString& proj_path) { using boost::property_tree::ptree; - using namespace std; try { ptree& subtree = pt.put("variable_order", ""); @@ -149,10 +177,27 @@ void VarOrderPtree::WritePtree(boost::property_tree::ptree& pt, // Write variables and groups BOOST_FOREACH(const VarGroup& e, var_grps) { if (e.vars.size() == 0) { - subtree.add("var", e.name); + ptree& sstree = subtree.add("var", e.name); + if (e.displayed_decimals != -1) { + wxString vs; + vs << e.displayed_decimals; + sstree.put("displayed_decimals", vs); + } + if (e.meta_data.empty() == false) { + std::map meta_data = e.meta_data; + std::map::iterator iter; + for (iter = meta_data.begin(); iter != meta_data.end(); + ++iter) { + wxString meta_name = "meta_data."; + meta_name << iter->first; + wxString meta_value = iter->second; + sstree.add(meta_name.ToStdString(), meta_value); + } + } } else { ptree& sstree = subtree.add("group", ""); sstree.put("name", e.name); + if (e.displayed_decimals != -1) { wxString vs; vs << e.displayed_decimals; @@ -182,12 +227,10 @@ const VarGroup_container& VarOrderPtree::GetVarGroupsRef() const return var_grps; } -bool VarOrderPtree::CorrectVarGroups(const std::map& ds_var_type_map, - const std::vector& ds_var_list, +bool VarOrderPtree::CorrectVarGroups(const std::vector& ds_var_list, + const std::vector& ds_var_type, bool case_sensitive) { - using namespace std; LOG_MSG("Entering VarOrderPtree::CorrectVarGroups"); bool changed = false; @@ -227,7 +270,7 @@ bool VarOrderPtree::CorrectVarGroups(const std::map ungroup; for (VarGroup_container::iterator i=var_grps.begin(); i!=var_grps.end();) { - if (!IsTypeCompatible(i->vars, ds_var_type_map)) { + if (!IsTypeCompatible(i->vars, ds_var_list, ds_var_type)) { BOOST_FOREACH(const wxString& v, i->vars) { ungroup.push_back(v); } @@ -271,7 +314,6 @@ bool VarOrderPtree::CorrectVarGroups(const std::mapGetColDispDecimals(col); + e.meta_data = table->GetMetaData(col); this->var_grps.push_back(e); } } wxString VarOrderPtree::VarOrderToStr() const { - using namespace std; wxString ss; int col = 0; ss << "VarGroups_container:\n"; @@ -359,27 +401,26 @@ bool VarOrderPtree::RemoveFromVarGroups(const wxString& v, } bool VarOrderPtree::IsTypeCompatible(const std::vector& vars, - const std::map& ds_var_type_map) + const std::vector& ds_var_list, + const std::vector& ds_var_type) { - using namespace std; if (vars.size() == 0) return true; - map::const_iterator m_it; set type_set; BOOST_FOREACH(const wxString& v, vars) { if (!v.empty()) { - m_it = ds_var_type_map.find(v); - if ( m_it == ds_var_type_map.end()) - m_it = ds_var_type_map.find(v.Upper()); - if ( m_it == ds_var_type_map.end()) - m_it = ds_var_type_map.find(v.Lower()); - if ( m_it == ds_var_type_map.end()) { + GdaConst::FieldType type = GdaConst::unknown_type; + for (size_t i=0; isecond; if (type != GdaConst::placeholder_type) { type_set.insert(type); } diff --git a/DataViewer/VarOrderPtree.h b/DataViewer/VarOrderPtree.h index 8590cc73d..b8917cd95 100644 --- a/DataViewer/VarOrderPtree.h +++ b/DataViewer/VarOrderPtree.h @@ -27,6 +27,10 @@ #include "VarGroup.h" class VarOrderPtree : public PtreeInterface { + // Data + std::vector time_ids; + VarGroup_container var_grps; + public: VarOrderPtree(); VarOrderPtree(const VarOrderPtree& vo); @@ -44,9 +48,8 @@ class VarOrderPtree : public PtreeInterface { const std::vector& GetTimeIdsRef() const; const VarGroup_container& GetVarGroupsRef() const; - bool CorrectVarGroups(const std::map& ds_var_type_map, - const std::vector& ds_var_list, + bool CorrectVarGroups(const std::vector& ds_var_list, + const std::vector& ds_var_type, bool case_sensitive); /** * This function clears all data and then reinitializes from the @@ -62,13 +65,10 @@ class VarOrderPtree : public PtreeInterface { private: bool RemoveFromVarGroups(const wxString& v, bool case_sensitive); - static bool IsTypeCompatible(const std::vector& vars, - const std::map& ds_var_type_map); - - // Data - std::vector time_ids; - VarGroup_container var_grps; + + static bool IsTypeCompatible(const std::vector& vars, + const std::vector& ds_var_list, + const std::vector& ds_var_type); }; #endif diff --git a/DialogTools/AddIdVariable.cpp b/DialogTools/AddIdVariable.cpp index 65ad1132d..be1a6339b 100644 --- a/DialogTools/AddIdVariable.cpp +++ b/DialogTools/AddIdVariable.cpp @@ -80,9 +80,9 @@ void AddIdVariable::OnOkClick( wxCommandEvent& event ) dlg.ShowModal(); return; } - - bool name_exists = false; - name_exists = table_int->ColNameExists(new_id_var_name); + // make sure no duplicated fields when adding a new field + bool case_sensitive = false; + bool name_exists = table_int->DoesNameExist(new_id_var_name, case_sensitive); if (name_exists) { wxString msg; msg << "Variable name \"" + new_id_var_name; diff --git a/DialogTools/AdjustYAxisDlg.cpp b/DialogTools/AdjustYAxisDlg.cpp index b891db497..62c1ccee2 100644 --- a/DialogTools/AdjustYAxisDlg.cpp +++ b/DialogTools/AdjustYAxisDlg.cpp @@ -74,29 +74,8 @@ void AdjustYAxisDlg::OnOkClick( wxCommandEvent& event ) wxMessageBox("Please enter a valid Max value for Y axis"); return; } - - /* - if (min_val > o_min_val) { - wxString msg; - msg << "Please make sure the input Min value <= " << o_min_val; - wxMessageBox(msg); - return; - - } - if (max_val < o_max_val - 0.0000001) { - wxString msg; - msg << "Please make sure the input Max value >= " << o_max_val; - wxMessageBox(msg); - - return; - - } - */ - wxString _min_val = m_min_val->GetValue(); wxString _max_val = m_max_val->GetValue(); - - if (max_val <= min_val) { wxMessageBox("Please make sure input Max value is larger than input Min value"); return; @@ -116,42 +95,47 @@ void AdjustYAxisDlg::OnCancelClick( wxCommandEvent& event ) } -IMPLEMENT_CLASS( AxisLabelPrecisionDlg, wxDialog ) +IMPLEMENT_CLASS( SetDisplayPrecisionDlg, wxDialog ) -BEGIN_EVENT_TABLE( AxisLabelPrecisionDlg, wxDialog ) -EVT_BUTTON( wxID_OK, AxisLabelPrecisionDlg::OnOkClick ) -EVT_BUTTON( wxID_CANCEL, AxisLabelPrecisionDlg::OnCancelClick ) +BEGIN_EVENT_TABLE( SetDisplayPrecisionDlg, wxDialog ) +EVT_BUTTON( wxID_OK, SetDisplayPrecisionDlg::OnOkClick ) +EVT_BUTTON( wxID_CANCEL, SetDisplayPrecisionDlg::OnCancelClick ) END_EVENT_TABLE() -AxisLabelPrecisionDlg::AxisLabelPrecisionDlg(int precision_s, +SetDisplayPrecisionDlg::SetDisplayPrecisionDlg(int precision_s, + bool fixed_point_s, wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style) - { - wxLogMessage(wxString::Format("AxisLabelPrecisionDlg with precision = %d.", + wxLogMessage(wxString::Format("SetDisplayPrecisionDlg with precision = %d.", precision_s)); - precision = precision_s; + precision = precision_s; + fixed_point = fixed_point_s; SetParent(parent); CreateControls(); Centre(); } -void AxisLabelPrecisionDlg::CreateControls() +void SetDisplayPrecisionDlg::CreateControls() { wxXmlResource::Get()->LoadDialog(this, GetParent(), - "ID_AXIS_LABEL_PRECISION_DLG"); - m_precision_spin = wxDynamicCast(FindWindow(XRCID("ID_AXIS_LABEL_PRECISION_SPIN")), + "ID_LABEL_PRECISION_DLG"); + m_precision_spin = wxDynamicCast(FindWindow(XRCID("ID_LABEL_PRECISION_SPIN")), wxSpinCtrl); m_precision_spin->SetRange(0, 6); m_precision_spin->SetValue(precision); - m_precision_spin->Bind(wxEVT_KEY_DOWN, &AxisLabelPrecisionDlg::OnKeyUp, this); + m_precision_spin->Bind(wxEVT_KEY_DOWN, &SetDisplayPrecisionDlg::OnKeyUp, this); + + m_fixed_point = wxDynamicCast(FindWindow(XRCID("IDC_FIX_POINT_CHECK")), + wxCheckBox); + m_fixed_point->SetValue(fixed_point); } -void AxisLabelPrecisionDlg::OnKeyUp( wxEvent& event ) +void SetDisplayPrecisionDlg::OnKeyUp( wxEvent& event ) { if (((wxKeyEvent&)event).GetKeyCode() == WXK_RETURN) { wxCommandEvent ev; @@ -159,17 +143,18 @@ void AxisLabelPrecisionDlg::OnKeyUp( wxEvent& event ) } } -void AxisLabelPrecisionDlg::OnCancelClick( wxCommandEvent& event ) +void SetDisplayPrecisionDlg::OnCancelClick( wxCommandEvent& event ) { event.Skip(); EndDialog(wxID_CANCEL); } -void AxisLabelPrecisionDlg::OnOkClick( wxCommandEvent& event ) +void SetDisplayPrecisionDlg::OnOkClick( wxCommandEvent& event ) { precision = m_precision_spin->GetValue(); - if (precision < 0 || precision > 6) { + if (precision < 0 || precision > 12) { precision = 1; - } + } + fixed_point = m_fixed_point->GetValue(); EndDialog(wxID_OK); } diff --git a/DialogTools/AdjustYAxisDlg.h b/DialogTools/AdjustYAxisDlg.h index 36e56a624..6dc524db1 100644 --- a/DialogTools/AdjustYAxisDlg.h +++ b/DialogTools/AdjustYAxisDlg.h @@ -55,14 +55,14 @@ class AdjustYAxisDlg: public wxDialog wxString s_max_val; }; -class AxisLabelPrecisionDlg : public wxDialog{ +class SetDisplayPrecisionDlg : public wxDialog{ DECLARE_CLASS( AdjustYAxisDlg ) DECLARE_EVENT_TABLE() public: - AxisLabelPrecisionDlg( int precision, + SetDisplayPrecisionDlg( int precision, bool fixed_point, wxWindow* parent, wxWindowID id = wxID_ANY, - const wxString& caption = _("Set Display Precision on Axis"), + const wxString& caption = _("Set Display Precision"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCAPTION|wxDEFAULT_DIALOG_STYLE ); @@ -73,8 +73,10 @@ class AxisLabelPrecisionDlg : public wxDialog{ void OnKeyUp( wxEvent& event ); wxSpinCtrl* m_precision_spin; + wxCheckBox* m_fixed_point; - int precision; + int precision; + bool fixed_point; }; #endif diff --git a/DialogTools/AggregateDlg.cpp b/DialogTools/AggregateDlg.cpp index 3761e883c..dccccbc75 100644 --- a/DialogTools/AggregateDlg.cpp +++ b/DialogTools/AggregateDlg.cpp @@ -62,7 +62,6 @@ AggregationDlg::AggregationDlg(wxWindow* parent, Project* _project_s, const wxPo wxLogMessage("Open AggregationDlg."); SetParent(parent); - //table_int->FillColIdMap(col_id_map); table_int = project_s->GetTableInt(), frames_manager = project_s->GetFramesManager(), @@ -96,10 +95,10 @@ void AggregationDlg::CreateControls() //m_input_file_name = wxDynamicCast(FindWindow(XRCID("ID_INPUT_FILE_TEXT")), wxTextCtrl); //m_key_val_rb = wxDynamicCast(FindWindow(XRCID("ID_KEY_VAL_RB")), wxRadioButton); //m_rec_order_rb = wxDynamicCast(FindWindow(XRCID("ID_REC_ORDER_RB")), wxRadioButton); - m_current_key = wxDynamicCast(FindWindow(XRCID("ID_CURRENT_KEY_CHOICE")), wxChoice); + m_current_key = wxDynamicCast(FindWindow(XRCID("ID_CURRENT_KEY_CHOICE")), GdaChoice); //m_import_key = wxDynamicCast(FindWindow(XRCID("ID_IMPORT_KEY_CHOICE")), wxChoice); - m_exclude_list = wxDynamicCast(FindWindow(XRCID("ID_EXCLUDE_LIST")), wxListBox); - m_include_list = wxDynamicCast(FindWindow(XRCID("ID_INCLUDE_LIST")), wxListBox); + m_exclude_list = wxDynamicCast(FindWindow(XRCID("ID_EXCLUDE_LIST")), GdaListBox); + m_include_list = wxDynamicCast(FindWindow(XRCID("ID_INCLUDE_LIST")), GdaListBox); m_count = wxDynamicCast(FindWindow(XRCID("ID_AGGREGATE_COUNT")), wxRadioButton); m_sum = wxDynamicCast(FindWindow(XRCID("ID_AGGREGATE_SUM")), wxRadioButton); m_avg = wxDynamicCast(FindWindow(XRCID("ID_AGGREGATE_AVG")), wxRadioButton); @@ -119,7 +118,6 @@ void AggregationDlg::CreateControls() FitInside(); - m_count->Bind(wxEVT_RADIOBUTTON, &AggregationDlg::OnMethodSelect, this); m_sum->Bind(wxEVT_RADIOBUTTON, &AggregationDlg::OnMethodSelect, this); m_avg->Bind(wxEVT_RADIOBUTTON, &AggregationDlg::OnMethodSelect, this); @@ -133,34 +131,11 @@ void AggregationDlg::Init() m_include_list->Clear(); m_exclude_list->Clear(); - vector col_names; - // get the field names from table interface - set key_name_set; - set field_name_set; - int time_steps = table_int->GetTimeSteps(); - int n_fields = table_int->GetNumberCols(); - for (int cid=0; cidGetColName(cid); - for (int i=0; iGetColType(cid,i); - wxString field_name = table_int->GetColName(cid, i); - // only String, Integer can be keys for merging - if (field_type == GdaConst::long64_type || - field_type == GdaConst::string_type ) - { - if ( key_name_set.count(field_name) == 0) { - m_current_key->Append(field_name); - key_name_set.insert(field_name); - } - } - if (field_type == GdaConst::long64_type || field_type == GdaConst::double_type ) { - if ( field_name_set.count(field_name) == 0) { - m_exclude_list->Append(field_name); - field_name_set.insert(field_name); - } - } - } - } + m_exclude_list->GdaInitContent(table_int, + GdaListBox::SHOW_INTEGER | + GdaListBox::SHOW_FLOAT); + m_current_key->GdaInitContent(table_int, GdaChoice::SHOW_INTEGER | + GdaChoice::SHOW_STRING); UpdateMergeButton(); } @@ -173,10 +148,24 @@ void AggregationDlg::OnMethodSelect( wxCommandEvent& ev) void AggregationDlg::OnIncAllClick( wxCommandEvent& ev) { wxLogMessage("Entering AggregationDlg::OnIncAllClick()"); - for (int i=0, iend=m_exclude_list->GetCount(); iAppend(m_exclude_list->GetString(i)); - } - m_exclude_list->Clear(); + for (int i=0; i< m_exclude_list->GetCount(); ++i) { + int col_id = wxNOT_FOUND; + int tm_id = wxNOT_FOUND; + wxString sel_str = m_exclude_list->GdaGetString(i, col_id, tm_id); + if (sel_str.IsEmpty() == false && + sel_str != m_current_key->GetString(m_current_key->GetSelection())) { + m_include_list->GdaAppend(sel_str, col_id, tm_id); + } + } + for (int i=m_exclude_list->GetCount()-1; i>=0; --i) { + int col_id = wxNOT_FOUND; + int tm_id = wxNOT_FOUND; + wxString sel_str = m_exclude_list->GdaGetString(i, col_id, tm_id); + if (sel_str.IsEmpty() == false && + sel_str != m_current_key->GetString(m_current_key->GetSelection())) { + m_exclude_list->Delete(i); + } + } UpdateMergeButton(); } @@ -184,9 +173,13 @@ void AggregationDlg::OnIncOneClick( wxCommandEvent& ev) { wxLogMessage("Entering AggregationDlg::OnIncOneClick()"); if (m_exclude_list->GetSelection() >= 0) { - wxString k = m_exclude_list->GetString(m_exclude_list->GetSelection()); - m_include_list->Append(k); - m_exclude_list->Delete(m_exclude_list->GetSelection()); + int sel_id = m_exclude_list->GetSelection(); + int col_id, tm_id; + wxString k = m_exclude_list->GdaGetString(sel_id, col_id, tm_id); + if (k != m_current_key->GetString(m_current_key->GetSelection())) { + m_include_list->GdaAppend(k, col_id, tm_id); + m_exclude_list->Delete(sel_id); + } } UpdateMergeButton(); } @@ -200,21 +193,25 @@ void AggregationDlg::OnIncListDClick( wxCommandEvent& ev) void AggregationDlg::OnExclAllClick( wxCommandEvent& ev) { wxLogMessage("Entering AggregationDlg::OnExclAllClick()"); - for (int i=0, iend=m_include_list->GetCount(); iAppend(m_include_list->GetString(i)); - } - m_include_list->Clear(); + for (int i=0, iend=m_include_list->GetCount(); iGdaGetString(i, col_id, tm_id); + m_exclude_list->GdaAppend(k, col_id, tm_id); + } + m_include_list->Clear(); UpdateMergeButton(); } void AggregationDlg::OnExclOneClick( wxCommandEvent& ev) { wxLogMessage("Entering AggregationDlg::OnExclOneClick()"); - if (m_include_list->GetSelection() >= 0) { - m_exclude_list-> - Append(m_include_list->GetString(m_include_list->GetSelection())); - m_include_list->Delete(m_include_list->GetSelection()); - } + if (m_include_list->GetSelection() >= 0) { + int i = m_include_list->GetSelection(); + int col_id, tm_id; + wxString k = m_include_list->GdaGetString(i, col_id, tm_id); + m_exclude_list->GdaAppend(k, col_id, tm_id); + m_include_list->Delete(i); + } UpdateMergeButton(); } @@ -224,7 +221,8 @@ void AggregationDlg::OnExclListDClick( wxCommandEvent& ev) OnIncOneClick(ev); } -bool AggregationDlg::CheckKeys(wxString key_name, vector& key_vec, map >& key_map) +bool AggregationDlg::CheckKeys(wxString key_name, vector& key_vec, + map >& key_map) { std::map > dup_dict; // value:[] std::vector uniq_fnames; @@ -257,86 +255,78 @@ bool AggregationDlg::CheckKeys(wxString key_name, vector& key_vec, map void AggregationDlg::OnOKClick( wxCommandEvent& ev ) { wxLogMessage("In AggregationDlg::OnOKClick()"); - try { wxString error_msg; // get selected field names from merging table - vector aggregate_field_names; - for (int i=0, iend=m_include_list->GetCount(); iGetString(i); - aggregate_field_names.push_back(inc_n); - } - int n_rows = table_int->GetNumberRows(); - - vector key1_vec; - map > key1_map; + int pos = m_current_key->GetSelection(); + GdaConst::FieldType key_ftype = m_current_key->GdaGetSelectionFieldType(pos); + std::map > key1_map; + key1_map = m_current_key->GdaGetUniqueValues(pos); + int col_id, tm_id; + wxString key1_name = m_current_key->GdaGetSelection(col_id, tm_id); - // get and check keys from original table - int key1_id = m_current_key->GetSelection(); - wxString key1_name = m_current_key->GetString(key1_id); - int col1_id = table_int->FindColId(key1_name); - if (table_int->IsColTimeVariant(col1_id)) { - error_msg = wxString::Format(_("Chosen key field '%s' s a time variant. Please choose a non-time variant field as key."), key1_name); - throw GdaException(error_msg.mb_str()); + if (key1_map.size() == 0 || key_ftype == GdaConst::unknown_type) { + wxString msg = _("Chosen key field is not valid. Please select another key field"); + wxMessageDialog dlg(this, msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; } - vector key1_l_vec; - GdaConst::FieldType key_ftype = table_int->GetColType(col1_id, 0); + // create in-memory geometries&table + int new_rows = key1_map.size(); + OGRTable* mem_table = new OGRTable(new_rows); - if (key_ftype == GdaConst::string_type) { - table_int->GetColData(col1_id, 0, key1_vec); - }else if (key_ftype==GdaConst::long64_type){ - table_int->GetColData(col1_id, 0, key1_l_vec); - } + std::vector col_ids; + std::vector tm_ids; + m_include_list->GdaGetAllItems(col_ids, tm_ids); - if (key1_vec.empty()) { // convert everything (key) to wxString - for( int i=0; i< key1_l_vec.size(); i++){ - wxString tmp; - tmp << key1_l_vec[i]; - key1_vec.push_back(tmp); - } - } - if (CheckKeys(key1_name, key1_vec, key1_map) == false) - return; + int in_cols = col_ids.size(); + std::map new_fields_dict; + std::vector new_fields; - // Create in-memory geometries&table - int new_rows = key1_map.size(); - OGRTable* mem_table = new OGRTable(new_rows); - vector undefs(new_rows, true); - - int in_cols = aggregate_field_names.size(); - map new_fields_dict; - vector new_fields; - // create key column OGRColumn* key_col; + std::map >::iterator it; + size_t i; + if (key_ftype == GdaConst::string_type) { key_col = new OGRColumnString(key1_name, 50, 0, new_rows); - for(int i=0; iSetValueAt(i, key1_vec[key1_map[i][0]]); + for (i=0, it = key1_map.begin(); it != key1_map.end(); ++it, ++i) { + key_col->SetValueAt(i, it->first); + } }else if (key_ftype==GdaConst::long64_type){ key_col = new OGRColumnInteger(key1_name, 18, 0, new_rows); - for(int i=0; iSetValueAt(i, key1_l_vec[key1_map[i][0]]); + for (i=0, it = key1_map.begin(); it != key1_map.end(); ++it, ++i) { + key_col->SetValueAt(i, it->first); + } + } else { + // should not be here + return; } new_fields_dict[key1_name] = key_col; new_fields.push_back(key1_name); // create count column - OGRColumn* _col = new OGRColumnInteger("AGG_COUNT", 18, 0, new_rows); - for(int i=0; iSetValueAt(i, (wxInt64)(key1_map[i].size())); - new_fields_dict[_col->GetName()] = _col; - new_fields.push_back(_col->GetName()); + OGRColumn* cnt_col = new OGRColumnInteger("AGG_COUNT", 18, 0, new_rows); + for (i=0, it = key1_map.begin(); it != key1_map.end(); ++it, ++i) { + cnt_col->SetValueAt(i, (wxInt64)(it->second.size())); + } + new_fields_dict[cnt_col->GetName()] = cnt_col; + new_fields.push_back(cnt_col->GetName()); // get columns from table - for ( int i=0; i < in_cols; i++ ) { - wxString fname = aggregate_field_names[i]; - OGRColumn* col = CreateNewOGRColumn(new_rows, table_int, key1_map, fname); - new_fields_dict[fname] = col; - new_fields.push_back(col->GetName()); + for (i=0; i < in_cols; i++ ) { + int col_id = col_ids[i]; + int tm_id = tm_ids[i]; + OGRColumn* col = CreateNewOGRColumn(new_rows, col_id, tm_id, key1_map); + if (col) { + new_fields_dict[col->GetName()] = col; + new_fields.push_back(col->GetName()); + } } - for (int i=0; iAddOGRColumn(new_fields_dict[new_fields[i]]); } @@ -410,46 +400,52 @@ double AggregationDlg::ComputeAgg(vector& vals, vector& undefs, ve return 0; } -OGRColumn* AggregationDlg::CreateNewOGRColumn(int new_rows, TableInterface* table_int, std::map >& key_map, wxString f_name) +OGRColumn* AggregationDlg::CreateNewOGRColumn(int new_rows, int col_id, int tm_id, + std::map >& key_map) { - int idx = table_int->FindColId(f_name); - int t = 0; - int f_length = table_int->GetColLength(idx, 0); - int f_decimal = table_int->GetColDecimals(idx, 0); - GdaConst::FieldType f_type = table_int->GetColType(idx, 0); + int f_length = table_int->GetColLength(col_id, tm_id); + int f_decimal = table_int->GetColDecimals(col_id, tm_id); + GdaConst::FieldType f_type = table_int->GetColType(col_id, tm_id); + wxString f_name = table_int->GetColName(col_id, tm_id); + std::map >::iterator it; + size_t cnt = 0; + std::vector vals; + std::vector undefs; - OGRColumn* _col; + OGRColumn* _col = NULL; if (f_type == GdaConst::long64_type) { bool is_integer = false; if (m_max->GetValue() || m_min->GetValue() || m_sum->GetValue()) { _col = new OGRColumnInteger(f_name, f_length, f_decimal, new_rows); is_integer = true; - } else - _col = new OGRColumnDouble(f_name, GdaConst::default_dbf_double_len, GdaConst::default_dbf_double_decimals, new_rows); - - vector vals; - vector undefs; - table_int->GetColData(idx, t, vals, undefs); + } else { + _col = new OGRColumnDouble(f_name, GdaConst::default_dbf_double_len, + GdaConst::default_dbf_double_decimals, + new_rows); + } + cnt = 0; + table_int->GetColData(col_id, tm_id, vals, undefs); - for(int i=0; i& ids = key_map[i]; - double v = ComputeAgg(vals, undefs, ids); + for (it = key_map.begin(); it != key_map.end(); ++it) { + double v = ComputeAgg(vals, undefs, it->second); if (is_integer) { wxInt64 vv = v; - _col->SetValueAt(i, vv); - } else - _col->SetValueAt(i, v); + _col->SetValueAt(cnt, vv); + } else { + _col->SetValueAt(cnt, v); + } + cnt += 1; } } else if (f_type == GdaConst::double_type) { _col = new OGRColumnDouble(f_name, f_length, f_decimal, new_rows); - vector vals; - vector undefs; - table_int->GetColData(idx, t, vals, undefs); - for(int i=0; i& ids = key_map[i]; + cnt = 0; + table_int->GetColData(col_id, tm_id, vals, undefs); + for (it = key_map.begin(); it != key_map.end(); ++it) { + vector& ids = it->second; double v = ComputeAgg(vals, undefs, ids); - _col->SetValueAt(i, v); + _col->SetValueAt(cnt, v); + cnt += 1; } } diff --git a/DialogTools/AggregateDlg.h b/DialogTools/AggregateDlg.h index 462c684a2..47f85b84d 100644 --- a/DialogTools/AggregateDlg.h +++ b/DialogTools/AggregateDlg.h @@ -31,6 +31,8 @@ #include #include +#include "GdaListBox.h" +#include "GdaChoice.h" #include "../DataViewer/DataSource.h" #include "../FramesManagerObserver.h" #include "../ShapeOperations/OGRLayerProxy.h" @@ -79,10 +81,10 @@ class AggregationDlg: public wxDialog, public FramesManagerObserver //wxTextCtrl* m_input_file_name; //wxRadioButton* m_key_val_rb; //wxRadioButton* m_rec_order_rb; - wxChoice* m_current_key; + GdaChoice* m_current_key; //wxChoice* m_import_key; - wxListBox* m_exclude_list; - wxListBox* m_include_list; + GdaListBox* m_exclude_list; + GdaListBox* m_include_list; //wxRadioButton* m_left_join; //wxRadioButton* m_outer_join; //wxCheckBox* m_overwrite_field; @@ -116,7 +118,8 @@ class AggregationDlg: public wxDialog, public FramesManagerObserver bool CheckKeys(wxString key_name, std::vector& key_vec, std::map >& key_map); - OGRColumn* CreateNewOGRColumn(int new_rows, TableInterface* table_int, std::map >& key_map, wxString f_name); + OGRColumn* CreateNewOGRColumn(int new_rows, int col_id, int tm_id, + std::map >& key_map); double ComputeAgg(vector& vals, vector& undefs, vector& ids); diff --git a/DialogTools/AutoCompTextCtrl.cpp b/DialogTools/AutoCompTextCtrl.cpp index 894b36f68..36864c70c 100644 --- a/DialogTools/AutoCompTextCtrl.cpp +++ b/DialogTools/AutoCompTextCtrl.cpp @@ -10,11 +10,11 @@ EVT_KEY_DOWN(AutoTextCtrl::DoKeyDown) END_EVENT_TABLE() -AutoTextCtrl:: AutoTextCtrl (wxWindow* parent, wxWindowID id, - const wxString& value, - const wxPoint& pos, const wxSize& size, - long style, const wxValidator& validator, - const wxString& name) +AutoTextCtrl:: AutoTextCtrl (wxWindow* parent, wxWindowID id, + const wxString& value, + const wxPoint& pos, const wxSize& size, + long style, const wxValidator& validator, + const wxString& name) : wxTextCtrl(parent, id, value, pos, size, style, validator, name) { m_bIgnoreNextTextEdit = false; @@ -88,4 +88,3 @@ AutoTextCtrl::DoKeyDown( wxKeyEvent &event ) event.Skip(); } - diff --git a/DialogTools/AutoCompTextCtrl.h b/DialogTools/AutoCompTextCtrl.h index ffc170941..fd9616b7a 100644 --- a/DialogTools/AutoCompTextCtrl.h +++ b/DialogTools/AutoCompTextCtrl.h @@ -8,6 +8,9 @@ #include #include #include +#include + +#include "../DataViewer/TableInterface.h" class AutoTextCtrl: public wxTextCtrl { DECLARE_DYNAMIC_CLASS(AutoTextCtrl) diff --git a/DialogTools/CatClassifDlg.cpp b/DialogTools/CatClassifDlg.cpp index 9515dfe07..61f8fbe4d 100644 --- a/DialogTools/CatClassifDlg.cpp +++ b/DialogTools/CatClassifDlg.cpp @@ -181,7 +181,6 @@ void CatClassifHistCanvas::UpdateSelection(bool shiftdown, bool pointsel) lower_left, upper_right))) { any_selected = true; break; - } else { } } if (!any_selected) { @@ -297,12 +296,20 @@ void CatClassifHistCanvas::GetBarPositions(std::vector& x_center_pos, st double val_max = max_val; double val_min = min_val; + + // check if min_val and max_val is in the range of breaks, sometimes the + // breaks has wider range than data (e.g. box range) + if ((*breaks)[0] < val_min) val_min = (*breaks)[0]; + int break_size = (*breaks).size(); + if ( break_size > 0 && (*breaks)[break_size-1] > val_max) { + val_max = (*breaks)[break_size-1]; + } double val_range = val_max - val_min; double left = val_min; std::vector ticks; ticks.push_back(val_min); - for(int i=0; isize();i++) { + for (int i=0; isize();i++) { ticks.push_back((*breaks)[i]); } ticks.push_back(val_max); @@ -339,11 +346,22 @@ void CatClassifHistCanvas::PopulateCanvas() selectable_shps.clear(); BOOST_FOREACH( GdaShape* shp, foreground_shps ) { delete shp; } foreground_shps.clear(); - + + double val_max = max_val; + double val_min = min_val; + + // check if min_val and max_val is in the range of breaks, sometimes the + // breaks has wider range than data (e.g. box range) + if ((*breaks)[0] < val_min) val_min = (*breaks)[0]; + int break_size = (*breaks).size(); + if ( break_size > 0 && (*breaks)[break_size-1] > val_max) { + val_max = (*breaks)[break_size-1]; + } + double x_min = 0; double x_max = left_pad_const + right_pad_const - + interval_width_const * cur_intervals + - + interval_gap_const * (cur_intervals-1); + + interval_width_const * cur_intervals + + + interval_gap_const * (cur_intervals-1); std::vector orig_x_pos(cur_intervals); std::vector orig_x_pos_left(cur_intervals); @@ -354,7 +372,8 @@ void CatClassifHistCanvas::PopulateCanvas() last_scale_trans.SetData(x_min, 0, x_max, max_num_obs_in_ival); - axis_scale_y = AxisScale(0, y_max, 5, axis_display_precision); + axis_scale_y = AxisScale(0, y_max, 5, axis_display_precision, + axis_display_fixed_point); y_max = axis_scale_y.scale_max; y_axis = new GdaAxis(_("Frequency"), axis_scale_y, wxRealPoint(0,0), wxRealPoint(0, y_max), @@ -381,15 +400,14 @@ void CatClassifHistCanvas::PopulateCanvas() if (i==0) { GdaShapeText* brk = - new GdaShapeText(GenUtils::DblToStr(min_val), + new GdaShapeText(GenUtils::DblToStr(val_min), *GdaConst::small_font, wxRealPoint(x0, y0), 90, GdaShapeText::right, GdaShapeText::v_center, 0, 10); brk->GetSize(dc, s_w, s_h); foreground_shps.push_back(brk); - } - if (iGetSize(dc, s_w, s_h); foreground_shps.push_back(brk); - } - if (i==cur_intervals-1) { + } else if (i==cur_intervals-1) { GdaShapeText* brk = - new GdaShapeText(GenUtils::DblToStr(max_val), + new GdaShapeText(GenUtils::DblToStr(val_max), *GdaConst::small_font, wxRealPoint(x1, y0), 90, GdaShapeText::right, @@ -842,7 +859,8 @@ useScientificNotation(_useScientificNotation) cc_data = cc_state->GetCatClassif(); SetSyncVars(true); - CatClassification::CorrectCatClassifFromTable(cc_data, table_int,IsAutomaticLabels()); + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); InitFromCCData(); EnableControls(true); @@ -908,12 +926,20 @@ CatClassifState* CatClassifPanel::PromptNew(const CatClassifDef& ccd, if (success || (prompt_title_dlg == false && !new_title.IsEmpty()) ) { cc_data = ccd; cc_data.title = new_title; - CatClassification::CatClassifTypeToBreakValsType(cc_data.cat_classif_type); - cc_data.cat_classif_type = CatClassification::custom; - cc_data.break_vals_type = CatClassification::quantile_break_vals; - - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); - + + if (cc_data.cat_classif_type == CatClassification::no_theme) { + CatClassification::CatClassifTypeToBreakValsType(cc_data.cat_classif_type); + cc_data.cat_classif_type = CatClassification::custom; + cc_data.break_vals_type = CatClassification::quantile_break_vals; + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); + // CorrectCatClassifFromTable() will change the break_vals_type + // to custom_break_vals, and will impact the "Breaks" contrl + cc_data.break_vals_type = CatClassification::quantile_break_vals; + } else { + cc_data.cat_classif_type = CatClassification::custom; + cc_data.break_vals_type = CatClassification::custom_break_vals; + } int f_sel = assoc_var_choice->FindString(field_name); if (f_sel != wxNOT_FOUND) { assoc_var_choice->SetSelection(f_sel); @@ -954,15 +980,15 @@ void CatClassifPanel::OnCurCatsChoice(wxCommandEvent& event) SetSyncVars(true); wxLogMessage(_("choice:") + cc_str_sel); - + // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); - + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); + InitFromCCData(); UpdateCCState(); EnableControls(true); - } void CatClassifPanel::OnBreaksChoice(wxCommandEvent& event) @@ -970,17 +996,36 @@ void CatClassifPanel::OnBreaksChoice(wxCommandEvent& event) wxLogMessage("CatClassifPanel::OnBreaksChoice"); if (!all_init) return; + CatClassification::BreakValsType bv_type = GetBreakValsTypeChoice(); cc_data.break_vals_type = bv_type; - - + CatClassification::CatClassifType cl_type = GetClassifTypeChoice(); + cc_data.cat_classif_type = cl_type; + + int choice = breaks_choice->GetSelection(); + if (choice == 0 || choice == 2 || choice == 3) { + cc_data.color_scheme = CatClassification::sequential_color_scheme; + } else if (choice == 1) { + // for unique values, set automatic_labels to false, so that + // in MapCanavas it won't create labels using breaks + cc_data.automatic_labels = false; + cc_data.color_scheme = CatClassification::qualitative_color_scheme; + } + // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); - - InitFromCCData(); + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); + // always mark the custom breaks CatClassification::custom + cc_data.cat_classif_type = CatClassification::custom; + cc_data.break_vals_type = bv_type; + InitFromCCData(); UpdateCCState(); - + + if (choice == 1) { + // reset autommatic_labels with control value + cc_data.automatic_labels = auto_labels_cb->GetValue(); + } if (bv_type != CatClassification::custom_break_vals) { auto_labels_cb->SetValue(true); } @@ -1011,7 +1056,8 @@ void CatClassifPanel::OnColorSchemeChoice(wxCommandEvent& event) // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); InitFromCCData(); UpdateCCState(); @@ -1025,16 +1071,16 @@ void CatClassifPanel::OnNumCatsChoice(wxCommandEvent& event) int new_num_cats = GetNumCats(); if (new_num_cats == cc_data.num_cats || new_num_cats < 1 || new_num_cats > max_intervals) return; - if (event.GetSelection() == 0 ) { // only 1 category then we don't need slider bar brk_slider->Enable(false); } else { brk_slider->Enable(true); } - wxLogMessage(wxString::Format("choice: %d", new_num_cats)); - + // reserve the choice of "Breaks" control + int old_breaks_choice = breaks_choice->GetSelection(); + CatClassification::BreakValsType new_cat_typ = GetBreakValsTypeChoice(); if (new_cat_typ == CatClassification::hinge_15_break_vals || new_cat_typ == CatClassification::hinge_30_break_vals || @@ -1064,24 +1110,23 @@ void CatClassifPanel::OnNumCatsChoice(wxCommandEvent& event) cc_data.break_vals_type = new_cat_typ; } cc_data.num_cats = new_num_cats; - // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); - + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); // check if breaks have same values std::set brks; for (int i=0; iSetSelection(old_breaks_choice); hist_canvas->ChangeAll(&preview_data, &cc_data.breaks, &cc_data.colors); } @@ -1109,7 +1154,8 @@ void CatClassifPanel::OnAssocVarChoice(wxCommandEvent& ev) // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); InitFromCCData(); UpdateCCState(); @@ -1125,7 +1171,8 @@ void CatClassifPanel::OnAssocVarTmChoice(wxCommandEvent& ev) // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); InitFromCCData(); UpdateCCState(); @@ -1247,7 +1294,8 @@ void CatClassifPanel::OnUnifDistMinEnter(wxCommandEvent& event) // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); InitFromCCData(); UpdateCCState(); @@ -1299,7 +1347,8 @@ void CatClassifPanel::OnUnifDistMaxEnter(wxCommandEvent& event) // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); InitFromCCData(); UpdateCCState(); @@ -1380,6 +1429,8 @@ void CatClassifPanel::OnBrkTxtEnter(wxCommandEvent& event) if (s.ToDouble(&val)) { if (val != cc_data.breaks[obj_id]) { SetBreakValsTypeChoice(CatClassification::custom_break_vals); + cc_data.break_vals_type = CatClassification::custom_break_vals; + cc_data.cat_classif_type = CatClassification::custom; int nbrk = CatClassification::ChangeBreakValue(obj_id, val, cc_data); SetBrkTxtFromVec(cc_data.breaks); @@ -1416,6 +1467,8 @@ void CatClassifPanel::OnBrkSlider(wxCommandEvent& event) int nbrk = CatClassification::ChangeBreakValue(brk, v, cc_data); // refresh just the radio buttons and break txt SetBreakValsTypeChoice(CatClassification::custom_break_vals); + cc_data.break_vals_type = CatClassification::custom_break_vals; + cc_data.cat_classif_type = CatClassification::custom; SetBrkTxtFromVec(cc_data.breaks); SetActiveBrkRadio(nbrk); hist_canvas->ChangeAll(&preview_data, &cc_data.breaks, &cc_data.colors); @@ -1446,17 +1499,16 @@ void CatClassifPanel::OnKillFocusEvent(wxFocusEvent& event) double val; if (s.ToDouble(&val)) { if (val != cc_data.breaks[obj_id]) { - SetBreakValsTypeChoice( - CatClassification::custom_break_vals); + SetBreakValsTypeChoice(CatClassification::custom_break_vals); + cc_data.break_vals_type = CatClassification::custom_break_vals; + cc_data.cat_classif_type = CatClassification::custom; int nbrk = CatClassification::ChangeBreakValue(obj_id, val, cc_data); SetBrkTxtFromVec(cc_data.breaks); SetActiveBrkRadio(nbrk); hist_canvas->ChangeAll(&preview_data, &cc_data.breaks, &cc_data.colors); - //min_lbl->SetLabelText( GenUtils::DblToStr(GetBrkSliderMin())); - max_lbl->SetLabelText( - GenUtils::DblToStr(GetBrkSliderMin())); + max_lbl->SetLabelText(GenUtils::DblToStr(GetBrkSliderMin())); SetSliderFromBreak(nbrk); UpdateCCState(); Refresh(); @@ -1591,6 +1643,7 @@ void CatClassifPanel::OnButtonNew(wxCommandEvent& event) } else { cc_data.title = new_title; + cc_data.cat_classif_type = CatClassification::custom; cc_data.assoc_db_fld_name = GetAssocDbFldNm(); cc_state = cat_classif_manager->CreateNewClassifState(cc_data); cur_cats_choice->Append(new_title); @@ -1599,7 +1652,8 @@ void CatClassifPanel::OnButtonNew(wxCommandEvent& event) // Verify that cc data is self-consistent and correct if not. This // will result in all breaks, colors and names being initialized. - CatClassification::CorrectCatClassifFromTable(cc_data, table_int, IsAutomaticLabels()); + CatClassification::CorrectCatClassifFromTable(cc_data, table_int, + IsAutomaticLabels()); InitFromCCData(); EnableControls(true); @@ -1770,7 +1824,8 @@ void CatClassifPanel::ResetValuesToDefault() cc_data.assoc_db_fld_name = ""; cc_data.names.clear(); - cc_data.break_vals_type = CatClassification::quantile_break_vals; + cc_data.cat_classif_type = CatClassification::custom; + cc_data.break_vals_type = CatClassification::custom_break_vals; CatClassification::SetBreakPoints(cc_data.breaks, cc_data.names, data, data_undef, CatClassification::quantile, @@ -2148,6 +2203,18 @@ CatClassification::BreakValsType CatClassifPanel::GetBreakValsTypeChoice() return CatClassification::quantile_break_vals; } +CatClassification::CatClassifType CatClassifPanel::GetClassifTypeChoice() +{ + int brs = breaks_choice->GetSelection(); + if (brs == 0) return CatClassification::quantile; + if (brs == 1) return CatClassification::unique_values; + if (brs == 2) return CatClassification::natural_breaks; + if (brs == 3) return CatClassification::equal_intervals; + if (brs == 4) return CatClassification::custom; + // custom by default + return CatClassification::custom; +} + /** Set breaks_choice widget classification type */ void CatClassifPanel::SetBreakValsTypeChoice(CatClassification::BreakValsType ct) { @@ -2289,12 +2356,14 @@ void CatClassifPanel::SetBrkTxtFromVec(const std::vector& brks) if (IsAutomaticLabels() && GetBreakValsTypeChoice() != CatClassification::unique_values_break_vals) { std::vector new_labels; - CatClassification::CatLabelsFromBreaks(brks, new_labels, cc_data.cat_classif_type, useScientificNotation); + CatClassification::CatLabelsFromBreaks(brks, new_labels, + cc_data.cat_classif_type, + useScientificNotation); int sz = new_labels.size(); cc_data.names.resize(sz); for (int i=0; iChangeValue(new_labels[i]); + cc_data.names[i] = new_labels[i]; + cat_title_txt[i]->ChangeValue(new_labels[i]); } } } @@ -2392,7 +2461,8 @@ wxString CatClassifPanel::GetDefaultTitle(const wxString& field_name, int max_tries = 500; int cur_try = 1; wxString ret_title_base = _("Custom Breaks"); - if (table_int->ColNameExists(field_name)) { + bool case_sensitive = false; + if (table_int->DoesNameExist(field_name, case_sensitive)) { ret_title_base << " (" << field_name; if (table_int->IsColTimeVariant(field_name)) { ret_title_base << ", "; diff --git a/DialogTools/CatClassifDlg.h b/DialogTools/CatClassifDlg.h index e686a913a..db60095fc 100644 --- a/DialogTools/CatClassifDlg.h +++ b/DialogTools/CatClassifDlg.h @@ -197,6 +197,7 @@ class CatClassifPanel: public wxPanel, public TableStateObserver void SetAutomaticLabels(bool auto_labels); CatClassification::ColorScheme GetColorSchemeChoice(); void SetColorSchemeChoice(CatClassification::ColorScheme cs); + CatClassification::CatClassifType GetClassifTypeChoice(); CatClassification::BreakValsType GetBreakValsTypeChoice(); void SetBreakValsTypeChoice(CatClassification::BreakValsType bvt); wxString GetAssocDbFldNm(); diff --git a/DialogTools/ConnectDatasourceDlg.cpp b/DialogTools/ConnectDatasourceDlg.cpp index 2fcb33d31..b2428e658 100644 --- a/DialogTools/ConnectDatasourceDlg.cpp +++ b/DialogTools/ConnectDatasourceDlg.cpp @@ -351,7 +351,7 @@ IDataSource* RecentDatasource::GetDatasource(wxString ds_name) wxString ds_conf = ds_confs[i]; try { return IDataSource::CreateDataSource(ds_confs[i]); - } catch(GdaException& ex){ + } catch(GdaException& e){ return NULL; } } @@ -569,7 +569,14 @@ void ConnectDatasourceDlg::OnRecent(wxCommandEvent& event) recent_ds.Add(ds_name, ds_name, layer_name); EndDialog(wxID_CANCEL); } else { - + // For csv file, if no csvt file, + // pop-up a field definition dialog and create a csvt file + if (ds_name.EndsWith("csv") && showCsvConfigure) { + if (wxFileExists(ds_name)) { + CsvFieldConfDlg csvDlg(this, ds_name, m_wx_encoding); + csvDlg.ShowModal(); + } + } IDataSource* ds = recent_ds.GetDatasource(ds_name); if (ds == NULL) { // raise message dialog show can't connect to datasource @@ -770,7 +777,8 @@ void ConnectDatasourceDlg::OnOkClick( wxCommandEvent& event ) m_wx_encoding = GetEncoding(); } - // For csv file, if no csvt file, pop-up a field definition dialog and create a csvt file + // For csv file, if no csvt file, + // pop-up a field definition dialog and create a csvt file if (ds_file_path.GetExt().Lower() == "csv" && showCsvConfigure) { wxString csv_path = ds_file_path.GetFullPath(); CsvFieldConfDlg csvDlg(this, csv_path, m_wx_encoding); @@ -1248,9 +1256,6 @@ wxCSConv* ConnectDatasourceDlg::GetEncoding() } else if (sel == 25) { encoding_type = wxFONTENCODING_ISO8859_15; } - - - if (m_wx_encoding) delete m_wx_encoding; m_wx_encoding = new wxCSConv(encoding_type); diff --git a/DialogTools/CreatingWeightDlg.cpp b/DialogTools/CreatingWeightDlg.cpp index f8501e29c..82788746c 100644 --- a/DialogTools/CreatingWeightDlg.cpp +++ b/DialogTools/CreatingWeightDlg.cpp @@ -371,6 +371,7 @@ void CreatingWeightDlg::OnCreateNewIdClick( wxCommandEvent& event ) m_id_field->SetSelection(0); bool valid = m_id_field->GetSelection() != wxNOT_FOUND; UpdateCreateButtonState(); + OnIdVariableSelected(event); } else { // A new id was not added to the dbf file, so do nothing. } @@ -987,6 +988,8 @@ void CreatingWeightDlg::InitDlg() FindWindow(XRCID("IDC_STATIC_DIST_METRIC"))->Hide(); FindWindow(XRCID("IDC_STATIC_XCOORD_VAR"))->Hide(); FindWindow(XRCID("IDC_STATIC_YCOORD_VAR"))->Hide(); + FindWindow(XRCID("IDC_W_STATIC_VARIABLES"))->Hide(); + m_nb_distance_variables->Hide(); } @@ -1421,19 +1424,20 @@ void CreatingWeightDlg::CreateWeights() wildcard = _("GWT files (*.gwt)|*.gwt"); } } - - wxFileDialog dlg(this, - _("Choose an output weights file name."), - project->GetWorkingDir().GetPath(), - defaultFile, - wildcard, + wxString working_dir = project->GetWorkingDir().GetPath(); + wxFileDialog dlg(this, _("Choose an output weights file name."), + working_dir, defaultFile, wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); wxString outputfile; - if (dlg.ShowModal() != wxID_OK) - return; + if (dlg.ShowModal() != wxID_OK) return; outputfile = dlg.GetPath(); - + + // update working directory + wxString new_dir = dlg.GetDirectory(); + if (working_dir != new_dir) { + project->SetWorkingDir(new_dir); + } wxLogMessage("CreateWeights()"); wxLogMessage(outputfile); @@ -1445,6 +1449,14 @@ void CreatingWeightDlg::CreateWeights() } // 2/2 other cases: + if (!user_xy && project->HasNullGeometry()) { + wxString msg = _("Null geometry was detected in dataset. GeoDa can't create weights with NULL geometry. Please try to save as records with valid geometries and try again."); + wxMessageDialog dlg(NULL, msg, _("Warning: NULL geometry"), + wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } + int m_ooC = m_spincont->GetValue(); int m_kNN = m_spinneigh->GetValue(); int m_kernel_kNN = m_spinn_kernel->GetValue(); diff --git a/DialogTools/CsvFieldConfDlg.cpp b/DialogTools/CsvFieldConfDlg.cpp index be30bf184..6597f5c5d 100644 --- a/DialogTools/CsvFieldConfDlg.cpp +++ b/DialogTools/CsvFieldConfDlg.cpp @@ -446,6 +446,16 @@ void CsvFieldConfDlg::UpdateFieldGrid( ) void CsvFieldConfDlg::UpdateXYcombox( ) { wxLogMessage("CsvFieldConfDlg::UpdateXYcombox()"); + // reserve previous selected lat/lng variables + wxString prev_lat, prev_lng; + if (lat_box->GetSelection() > 0) { + prev_lat = lat_box->GetString(lat_box->GetSelection()); + } + if (lng_box->GetSelection() > 0) { + prev_lng = lng_box->GetString(lng_box->GetSelection()); + } + + // reset lat lng combobox lat_box->Clear(); lng_box->Clear(); @@ -462,8 +472,21 @@ void CsvFieldConfDlg::UpdateXYcombox( ) } lat_box->Append(col_names[i]); lng_box->Append(col_names[i]); - if (types[i] == "CoordX") coord_x_idx = cnt; - else if (types[i] == "CoordY") coord_y_idx = cnt; + if (!prev_lat.IsEmpty()) { + if (col_names[i].CmpNoCase(prev_lat) == 0) { + coord_x_idx = cnt; + } + } else if (types[i] == "CoordX") { + coord_x_idx = cnt; + } + + if (!prev_lng.IsEmpty()) { + if (col_names[i].CmpNoCase(prev_lng) == 0) { + coord_y_idx = cnt; + } + } else if (types[i] == "CoordY") { + coord_y_idx = cnt; + } cnt ++; } } diff --git a/DialogTools/DissolveDlg.cpp b/DialogTools/DissolveDlg.cpp new file mode 100644 index 000000000..532368bce --- /dev/null +++ b/DialogTools/DissolveDlg.cpp @@ -0,0 +1,502 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../DataViewer/DataSource.h" +#include "../DataViewer/OGRTable.h" +#include "../DataViewer/OGRColumn.h" +#include "../DataViewer/TableInterface.h" +#include "../FramesManagerObserver.h" +#include "../FramesManager.h" +#include "../DialogTools/ExportDataDlg.h" +#include "../logger.h" +#include "../GeneralWxUtils.h" +#include "../Project.h" +#include "DissolveDlg.h" + +BEGIN_EVENT_TABLE( DissolveDlg, wxDialog ) + EVT_BUTTON( XRCID("ID_INC_ALL_BUTTON"), DissolveDlg::OnIncAllClick ) + EVT_BUTTON( XRCID("ID_INC_ONE_BUTTON"), DissolveDlg::OnIncOneClick ) + EVT_LISTBOX_DCLICK( XRCID("ID_INCLUDE_LIST"), DissolveDlg::OnIncListDClick ) + EVT_BUTTON( XRCID("ID_EXCL_ALL_BUTTON"), DissolveDlg::OnExclAllClick ) + EVT_BUTTON( XRCID("ID_EXCL_ONE_BUTTON"), DissolveDlg::OnExclOneClick ) + EVT_LISTBOX_DCLICK( XRCID("ID_EXCLUDE_LIST"), DissolveDlg::OnExclListDClick ) + EVT_CHOICE( XRCID("ID_CURRENT_KEY_CHOICE"), DissolveDlg::OnKeyChoice ) + EVT_CHOICE( XRCID("ID_IMPORT_KEY_CHOICE"), DissolveDlg::OnKeyChoice ) + EVT_BUTTON( XRCID("wxID_DISSOLVE"), DissolveDlg::OnOKClick ) + EVT_BUTTON( XRCID("wxID_CLOSE"), DissolveDlg::OnCloseClick ) + EVT_CLOSE( DissolveDlg::OnClose ) +END_EVENT_TABLE() + +using namespace std; + +DissolveDlg::DissolveDlg(wxWindow* parent, Project* _project_s, const wxPoint& pos) +: project_s(_project_s), export_dlg(NULL) +{ + wxLogMessage("Open DissolveDlg."); + SetParent(parent); + + table_int = project_s->GetTableInt(), + frames_manager = project_s->GetFramesManager(), + + CreateControls(); + Init(); + wxString nm = _("Dissolve - ") + table_int->GetTableName(); + SetTitle(nm); + SetPosition(pos); + Centre(); + + frames_manager->registerObserver(this); +} + +DissolveDlg::~DissolveDlg() +{ + frames_manager->removeObserver(this); + if (export_dlg) { + export_dlg->Destroy(); + delete export_dlg; + export_dlg = NULL; + } +} + +void DissolveDlg::update(FramesManager* o) +{ +} + +void DissolveDlg::CreateControls() +{ + wxXmlResource::Get()->LoadDialog(this, GetParent(), "ID_DISSOLVE_DLG"); + m_current_key = wxDynamicCast(FindWindow(XRCID("ID_CURRENT_KEY_CHOICE")), GdaChoice); + m_exclude_list = wxDynamicCast(FindWindow(XRCID("ID_EXCLUDE_LIST")), GdaListBox); + m_include_list = wxDynamicCast(FindWindow(XRCID("ID_INCLUDE_LIST")), GdaListBox); + m_count = wxDynamicCast(FindWindow(XRCID("ID_DISSOLVE_COUNT")), wxRadioButton); + m_sum = wxDynamicCast(FindWindow(XRCID("ID_DISSOLVE_SUM")), wxRadioButton); + m_avg = wxDynamicCast(FindWindow(XRCID("ID_DISSOLVE_AVG")), wxRadioButton); + m_min = wxDynamicCast(FindWindow(XRCID("ID_DISSOLVE_MIN")), wxRadioButton); + m_max = wxDynamicCast(FindWindow(XRCID("ID_DISSOLVE_MAX")), wxRadioButton); + m_inc_all = wxDynamicCast(FindWindow(XRCID("ID_INC_ALL_BUTTON")), wxButton); + m_inc_one = wxDynamicCast(FindWindow( XRCID("ID_INC_ONE_BUTTON")), wxButton); + m_exc_all = wxDynamicCast(FindWindow( XRCID("ID_EXCL_ALL_BUTTON")), wxButton); + m_exc_one = wxDynamicCast(FindWindow( XRCID("ID_EXCL_ONE_BUTTON")), wxButton); + + wxScrolledWindow* win = wxDynamicCast(FindWindow( XRCID("ID_DISSOLVE_SCROLL_WIN")), wxScrolledWindow); + + win->SetAutoLayout(true); + win->FitInside(); + win->SetScrollRate(5, 5); + + FitInside(); + + m_count->Bind(wxEVT_RADIOBUTTON, &DissolveDlg::OnMethodSelect, this); + m_sum->Bind(wxEVT_RADIOBUTTON, &DissolveDlg::OnMethodSelect, this); + m_avg->Bind(wxEVT_RADIOBUTTON, &DissolveDlg::OnMethodSelect, this); + m_min->Bind(wxEVT_RADIOBUTTON, &DissolveDlg::OnMethodSelect, this); + m_max->Bind(wxEVT_RADIOBUTTON, &DissolveDlg::OnMethodSelect, this); +} + +void DissolveDlg::Init() +{ + m_current_key->Clear(); + m_include_list->Clear(); + m_exclude_list->Clear(); + + m_exclude_list->GdaInitContent(table_int, + GdaListBox::SHOW_INTEGER | + GdaListBox::SHOW_FLOAT); + m_current_key->GdaInitContent(table_int, GdaChoice::SHOW_INTEGER | + GdaChoice::SHOW_STRING); + + UpdateMergeButton(); +} + + +void DissolveDlg::OnMethodSelect( wxCommandEvent& ev) +{ + UpdateMergeButton(); +} + +void DissolveDlg::OnIncAllClick( wxCommandEvent& ev) +{ + wxLogMessage("Entering DissolveDlg::OnIncAllClick()"); + for (int i=0; i< m_exclude_list->GetCount(); ++i) { + int col_id = wxNOT_FOUND; + int tm_id = wxNOT_FOUND; + wxString sel_str = m_exclude_list->GdaGetString(i, col_id, tm_id); + if (sel_str.IsEmpty() == false && + sel_str != m_current_key->GetString(m_current_key->GetSelection())) { + m_include_list->GdaAppend(sel_str, col_id, tm_id); + } + } + for (int i=m_exclude_list->GetCount()-1; i>=0; --i) { + int col_id = wxNOT_FOUND; + int tm_id = wxNOT_FOUND; + wxString sel_str = m_exclude_list->GdaGetString(i, col_id, tm_id); + if (sel_str.IsEmpty() == false && + sel_str != m_current_key->GetString(m_current_key->GetSelection())) { + m_exclude_list->Delete(i); + } + } + UpdateMergeButton(); +} + +void DissolveDlg::OnIncOneClick( wxCommandEvent& ev) +{ + wxLogMessage("Entering DissolveDlg::OnIncOneClick()"); + if (m_exclude_list->GetSelection() >= 0) { + int sel_id = m_exclude_list->GetSelection(); + int col_id, tm_id; + wxString k = m_exclude_list->GdaGetString(sel_id, col_id, tm_id); + if (k != m_current_key->GetString(m_current_key->GetSelection())) { + m_include_list->GdaAppend(k, col_id, tm_id); + m_exclude_list->Delete(sel_id); + } + } + UpdateMergeButton(); +} + +void DissolveDlg::OnIncListDClick( wxCommandEvent& ev) +{ + wxLogMessage("Entering DissolveDlg::OnIncListDClick()"); + OnExclOneClick(ev); +} + +void DissolveDlg::OnExclAllClick( wxCommandEvent& ev) +{ + wxLogMessage("Entering DissolveDlg::OnExclAllClick()"); + for (int i=0, iend=m_include_list->GetCount(); iGdaGetString(i, col_id, tm_id); + m_exclude_list->GdaAppend(k, col_id, tm_id); + } + m_include_list->Clear(); + UpdateMergeButton(); +} + +void DissolveDlg::OnExclOneClick( wxCommandEvent& ev) +{ + wxLogMessage("Entering DissolveDlg::OnExclOneClick()"); + if (m_include_list->GetSelection() >= 0) { + int i = m_include_list->GetSelection(); + int col_id, tm_id; + wxString k = m_include_list->GdaGetString(i, col_id, tm_id); + m_exclude_list->GdaAppend(k, col_id, tm_id); + m_include_list->Delete(i); + } + UpdateMergeButton(); +} + +void DissolveDlg::OnExclListDClick( wxCommandEvent& ev) +{ + wxLogMessage("Entering DissolveDlg::OnExclListDClick()"); + if (m_count->GetValue() == false) { + OnIncOneClick(ev); + } +} + +bool DissolveDlg::CheckKeys(wxString key_name, std::vector& key_vec, + std::map >& key_map) +{ + std::map > dup_dict; // value:[] + std::vector uniq_fnames; + + for (int i=0, iend=key_vec.size(); iGetSelection(); + GdaConst::FieldType key_ftype = m_current_key->GdaGetSelectionFieldType(pos); + std::map > key1_map; + key1_map = m_current_key->GdaGetUniqueValues(pos); + int col_id, tm_id; + wxString key1_name = m_current_key->GdaGetSelection(col_id, tm_id); + + if (key1_map.size() == 0 || key_ftype == GdaConst::unknown_type) { + wxString msg = _("Chosen key field is not valid. Please select another key field"); + wxMessageDialog dlg(this, msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + // Create in-memory geometries&table + int new_rows = key1_map.size(); + OGRTable* mem_table = new OGRTable(new_rows); + + std::vector col_ids; + std::vector tm_ids; + m_include_list->GdaGetAllItems(col_ids, tm_ids); + + int in_cols = col_ids.size(); + std::map new_fields_dict; + std::vector new_fields; + + // create key column + OGRColumn* key_col; + std::map >::iterator it; + size_t i; + + if (key_ftype == GdaConst::string_type) { + key_col = new OGRColumnString(key1_name, 50, 0, new_rows); + for (i=0, it = key1_map.begin(); it != key1_map.end(); ++it, ++i) { + key_col->SetValueAt(i, it->first); + } + }else if (key_ftype==GdaConst::long64_type){ + key_col = new OGRColumnInteger(key1_name, 18, 0, new_rows); + for (i=0, it = key1_map.begin(); it != key1_map.end(); ++it, ++i) { + key_col->SetValueAt(i, it->first); + } + } else { + // should not be here + return; + } + new_fields_dict[key1_name] = key_col; + new_fields.push_back(key1_name); + + // create count column + OGRColumn* cnt_col = new OGRColumnInteger("AGG_COUNT", 18, 0, new_rows); + for (i=0, it = key1_map.begin(); it != key1_map.end(); ++it, ++i) { + cnt_col->SetValueAt(i, (wxInt64)(it->second.size())); + } + new_fields_dict[cnt_col->GetName()] = cnt_col; + new_fields.push_back(cnt_col->GetName()); + + // get columns from table + for (i=0; i < in_cols; i++ ) { + int col_id = col_ids[i]; + int tm_id = tm_ids[i]; + OGRColumn* col = CreateNewOGRColumn(new_rows, col_id, tm_id, key1_map); + if (col) { + new_fields_dict[col->GetName()] = col; + new_fields.push_back(col->GetName()); + } + } + + for (i=0; iAddOGRColumn(new_fields_dict[new_fields[i]]); + } + + // create geometries + OGRLayerProxy* ogr_layer = project_s->GetOGRLayerProxy(); + if (ogr_layer == NULL) { + delete mem_table; + return; + } + std::vector geoms = ogr_layer->DissolveMap(key1_map); + Shapefile::ShapeType shp_type = project_s->GetShapefileType(); + OGRSpatialReference* spatial_ref = project_s->GetSpatialReference(); + + // export dialog + if (export_dlg != NULL) { + export_dlg->Destroy(); + delete export_dlg; + } + export_dlg = new ExportDataDlg(this, shp_type, geoms, spatial_ref, + mem_table); + if (export_dlg->ShowModal() == wxID_OK) { + wxMessageDialog dlg(this, _("Successful aggregation."), + _("Success"), wxOK); + dlg.ShowModal(); + } + delete mem_table; + } catch (GdaException& ex) { + if (ex.type() == GdaException::NORMAL) + return; + wxMessageDialog dlg(this, ex.what(), _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + ev.Skip(); +} + +double DissolveDlg::ComputeAgg(vector& vals, vector& undefs, + vector& ids) +{ + if (m_sum->GetValue()) { + double v_sum = 0; + for (int i=0; iGetValue()) { + double v_sum = 0; + int n = 0; + for (int i=0; iGetValue()) { + double v_max = DBL_MIN; + for (int i=0; i v_max) + v_max = vals[idx]; + } + } + return v_max; + } + + else if (m_min->GetValue()) { + double v_min = DBL_MAX; + for (int i=0; i >& key_map) +{ + int f_length = table_int->GetColLength(col_id, tm_id); + int f_decimal = table_int->GetColDecimals(col_id, tm_id); + GdaConst::FieldType f_type = table_int->GetColType(col_id, tm_id); + wxString f_name = table_int->GetColName(col_id, tm_id); + std::map >::iterator it; + size_t cnt = 0; + std::vector vals; + std::vector undefs; + + OGRColumn* _col = NULL; + if (f_type == GdaConst::long64_type) { + bool is_integer = false; + if (m_max->GetValue() || m_min->GetValue() || m_sum->GetValue()) { + _col = new OGRColumnInteger(f_name, f_length, f_decimal, new_rows); + is_integer = true; + } else { + _col = new OGRColumnDouble(f_name, GdaConst::default_dbf_double_len, + GdaConst::default_dbf_double_decimals, + new_rows); + } + cnt = 0; + table_int->GetColData(col_id, tm_id, vals, undefs); + + for (it = key_map.begin(); it != key_map.end(); ++it) { + double v = ComputeAgg(vals, undefs, it->second); + if (is_integer) { + wxInt64 vv = v; + _col->SetValueAt(cnt, vv); + } else { + _col->SetValueAt(cnt, v); + } + cnt += 1; + } + + } else if (f_type == GdaConst::double_type) { + _col = new OGRColumnDouble(f_name, f_length, f_decimal, new_rows); + cnt = 0; + table_int->GetColData(col_id, tm_id, vals, undefs); + for (it = key_map.begin(); it != key_map.end(); ++it) { + vector& ids = it->second; + double v = ComputeAgg(vals, undefs, ids); + _col->SetValueAt(cnt, v); + cnt += 1; + } + + } + return _col; +} + +void DissolveDlg::OnCloseClick( wxCommandEvent& ev ) +{ + wxLogMessage("In DissolveDlg::OnCloseClick()"); + if (export_dlg) { + export_dlg->Destroy(); + delete export_dlg; + export_dlg = NULL; + } + EndDialog(wxID_CLOSE); +} + +void DissolveDlg::OnClose( wxCloseEvent& ev) +{ + wxLogMessage("In DissolveDlg::OnClose()"); + if (export_dlg) { + export_dlg->Destroy(); + delete export_dlg; + export_dlg = NULL; + } + Destroy(); +} + +void DissolveDlg::OnKeyChoice( wxCommandEvent& ev ) +{ + wxLogMessage("In DissolveDlg::OnKeyChoice()"); + UpdateMergeButton(); +} + +void DissolveDlg::UpdateMergeButton() +{ + bool enable = true; + FindWindow(XRCID("wxID_DISSOLVE"))->Enable(enable); + + m_inc_all->Enable(enable); + m_inc_one->Enable(enable); + m_exc_all->Enable(enable); + m_exc_one->Enable(enable); +} diff --git a/DialogTools/DissolveDlg.h b/DialogTools/DissolveDlg.h new file mode 100644 index 000000000..ce7d13e76 --- /dev/null +++ b/DialogTools/DissolveDlg.h @@ -0,0 +1,119 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_DISSOLVE_DLG_H__ +#define __GEODA_CENTER_DISSOLVE_DLG_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "GdaListBox.h" +#include "GdaChoice.h" +#include "../DataViewer/DataSource.h" +#include "../FramesManagerObserver.h" +#include "../ShapeOperations/OGRLayerProxy.h" +#include "../ShapeOperations/OGRDatasourceProxy.h" +#include "../DataViewer/TableInterface.h" + +class FramesManager; +class Project; +class ExportDataDlg; +class OGRColumn; + +class DissolveDlg: public wxDialog, public FramesManagerObserver +{ +public: + DissolveDlg(wxWindow* parent, + Project* project_p, + const wxPoint& pos = wxDefaultPosition); + virtual ~DissolveDlg(); + + void CreateControls(); + void Init(); + + /** Implementation of FramesManagerObserver interface */ + virtual void update(FramesManager* o); + + void OnIncAllClick( wxCommandEvent& ev ); + void OnIncOneClick( wxCommandEvent& ev ); + void OnIncListDClick(wxCommandEvent& ev ); + void OnExclAllClick( wxCommandEvent& ev ); + void OnExclOneClick( wxCommandEvent& ev ); + void OnExclListDClick(wxCommandEvent& ev ); + + void OnOKClick( wxCommandEvent& ev ); + void OnKeyChoice( wxCommandEvent& ev ); + + void OnCloseClick( wxCommandEvent& ev ); + void OnClose( wxCloseEvent& ev); + void OnLeftJoinClick( wxCommandEvent& ev ); + void OnOuterJoinClick( wxCommandEvent& ev ); + void UpdateMergeButton(); + void OnMethodSelect( wxCommandEvent& ev ); + + GdaChoice* m_current_key; + GdaListBox* m_exclude_list; + GdaListBox* m_include_list; + wxRadioButton* m_count; + wxRadioButton* m_sum; + wxRadioButton* m_avg; + wxRadioButton* m_max; + wxRadioButton* m_min; + wxButton* m_inc_all; + wxButton* m_inc_one; + wxButton* m_exc_all; + wxButton* m_exc_one; + + ExportDataDlg* export_dlg; + + Project* project_s; + TableInterface* table_int; + +private: + FramesManager* frames_manager; + + std::map dedup_to_id; + std::set dups; + // a mapping from displayed col order to actual col ids in table + // Eg, in underlying table, we might have A, B, C, D, E, F, + // but because of user wxGrid col reorder operaions might see these + // as C, B, A, F, D, E. In this case, the col_id_map would be + // 0->2, 1->1, 2->0, 3->5, 4->3, 5->4 + //std::vector col_id_map; + + bool CheckKeys(wxString key_name, std::vector& key_vec, + std::map >& key_map); + + OGRColumn* CreateNewOGRColumn(int new_rows, int col_id, int tm_id, + std::map >& key_map); + + double ComputeAgg(vector& vals, vector& undefs, vector& ids); + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/DialogTools/ExportDataDlg.cpp b/DialogTools/ExportDataDlg.cpp index 1703cb00b..ecd348749 100644 --- a/DialogTools/ExportDataDlg.cpp +++ b/DialogTools/ExportDataDlg.cpp @@ -37,16 +37,18 @@ #include "ogr_srs_api.h" -#include "../Project.h" +#include "../rc/GeoDaIcon-16x16.xpm" #include "../DataViewer/TableInterface.h" +#include "../DataViewer/OGRTable.h" #include "../DataViewer/DataSource.h" -#include "../GenUtils.h" -#include "../logger.h" #include "../ShapeOperations/OGRDataAdapter.h" #include "../GdaException.h" #include "../GeneralWxUtils.h" #include "../GdaCartoDB.h" -#include "../rc/GeoDaIcon-16x16.xpm" +#include "../GenUtils.h" +#include "../logger.h" +#include "../Project.h" +#include "ConnectDatasourceDlg.h" #include "ExportDataDlg.h" using namespace std; @@ -54,7 +56,7 @@ using namespace std; BEGIN_EVENT_TABLE( ExportDataDlg, wxDialog ) EVT_BUTTON( XRCID("IDC_OPEN_IASC"), ExportDataDlg::OnBrowseDSfileBtn ) EVT_BUTTON( wxID_OK, ExportDataDlg::OnOkClick ) - //EVT_BUTTON( wxID_CANCEL, ExportDataDlg::OnCancelClick ) + EVT_BUTTON( XRCID("IDC_OPEN_CRS"), ExportDataDlg::OnOpenCRS ) END_EVENT_TABLE() ExportDataDlg::ExportDataDlg(wxWindow* parent, @@ -87,7 +89,10 @@ ExportDataDlg::ExportDataDlg(wxWindow* parent, bool isSelectedOnly, const wxPoint& pos, const wxSize& size) -: is_selected_only(isSelectedOnly), project_p(_project), geometries(_geometries), shape_type(_shape_type), is_saveas_op(false), is_geometry_only(true), table_p(NULL), is_table_only(false), is_save_centroids(false),spatial_ref(NULL) +: is_selected_only(isSelectedOnly), project_p(_project), + geometries(_geometries), shape_type(_shape_type), is_saveas_op(false), + is_geometry_only(true), table_p(NULL), is_table_only(false), + is_save_centroids(false),spatial_ref(NULL) { if( project_p) { project_file_name = project_p->GetProjectTitle(); @@ -96,8 +101,16 @@ ExportDataDlg::ExportDataDlg(wxWindow* parent, Init(parent, pos); } -ExportDataDlg::ExportDataDlg(wxWindow* parent, Shapefile::ShapeType _shape_type, std::vector& _geometries, OGRSpatialReference* _spatial_ref, OGRTable* table, const wxPoint& pos, const wxSize& size) -: is_selected_only(false), project_p(NULL), geometries(_geometries), shape_type(_shape_type), is_saveas_op(true), is_geometry_only(false), table_p(table), is_table_only(false), is_save_centroids(false), spatial_ref(_spatial_ref) +ExportDataDlg::ExportDataDlg(wxWindow* parent, + Shapefile::ShapeType _shape_type, + std::vector& _geometries, + OGRSpatialReference* _spatial_ref, + OGRTable* table, + const wxPoint& pos, const wxSize& size) +: is_selected_only(false), project_p(NULL), geometries(_geometries), + shape_type(_shape_type), is_saveas_op(true), is_geometry_only(false), + table_p(table), is_table_only(false), is_save_centroids(false), + spatial_ref(_spatial_ref) { Init(parent, pos); } @@ -111,7 +124,9 @@ ExportDataDlg::ExportDataDlg(wxWindow* parent, bool isSelectedOnly, const wxPoint& pos, const wxSize& size) -: is_selected_only(isSelectedOnly), project_p(_project), is_saveas_op(false), shape_type(_shape_type),is_geometry_only(true), table_p(NULL), is_table_only(false), is_save_centroids(true), spatial_ref(NULL) +: is_selected_only(isSelectedOnly), project_p(_project), is_saveas_op(false), + shape_type(_shape_type),is_geometry_only(true), table_p(NULL), + is_table_only(false), is_save_centroids(true), spatial_ref(NULL) { if( project_p) { @@ -130,7 +145,10 @@ ExportDataDlg::ExportDataDlg(wxWindow* parent, TableInterface* _table, const wxPoint& pos, const wxSize& size) -: is_selected_only(false), project_p(NULL), is_saveas_op(false), shape_type(Shapefile::NULL_SHAPE), is_geometry_only(false), is_table_only(true), table_p(_table), is_save_centroids(false), spatial_ref(NULL) +: is_selected_only(false), project_p(NULL), is_saveas_op(false), + shape_type(Shapefile::NULL_SHAPE), is_geometry_only(false), + is_table_only(true), table_p(_table), is_save_centroids(false), + spatial_ref(NULL) { Init(parent, pos); } @@ -156,7 +174,9 @@ void ExportDataDlg::Init(wxWindow* parent, const wxPoint& pos) if( GeneralWxUtils::isWindows()) ds_names.Remove("ESRI Personal Geodatabase (*.mdb)|*.mdb"); - Bind(wxEVT_COMMAND_MENU_SELECTED, &ExportDataDlg::BrowseExportDataSource, this, GdaConst::ID_CONNECT_POPUP_MENU, GdaConst::ID_CONNECT_POPUP_MENU + ds_names.Count()); + Bind(wxEVT_COMMAND_MENU_SELECTED, &ExportDataDlg::BrowseExportDataSource, + this, GdaConst::ID_CONNECT_POPUP_MENU, + GdaConst::ID_CONNECT_POPUP_MENU + ds_names.Count()); SetParent(parent); CreateControls(); @@ -175,6 +195,22 @@ void ExportDataDlg::CreateControls() m_chk_create_project->SetValue(false); m_chk_create_project->Hide(); } + m_crs_input = XRCCTRL(*this, "IDC_FIELD_CRS", wxTextCtrl); + if (project_p == NULL || project_p->IsTableOnlyProject()) { + // if table only ds, disable CRS controls + m_crs_input->Disable(); + XRCCTRL(*this, "IDC_OPEN_CRS", wxBitmapButton)->Disable(); + } else { + OGRSpatialReference* sr = project_p->GetSpatialReference(); + if (sr) { + char* tmp = new char[1024]; + if (sr->exportToProj4(&tmp) == OGRERR_NONE) { + wxString str_prj4 = tmp; + m_crs_input->SetValue(str_prj4); + } + delete[] tmp; + } + } // Create the rest controls from parent DatasourceDlg::CreateControls(); @@ -182,6 +218,48 @@ void ExportDataDlg::CreateControls() m_cartodb_tablename->Show(); } +void ExportDataDlg::OnOpenCRS( wxCommandEvent& event ) +{ + ConnectDatasourceDlg connect_dlg(this, wxDefaultPosition, wxDefaultSize); + connect_dlg.SetTitle("Load CRS from Data Source"); + if (connect_dlg.ShowModal() != wxID_OK) { + return; + } + wxString proj_title = connect_dlg.GetProjectTitle(); + wxString layer_name = connect_dlg.GetLayerName(); + IDataSource* datasource = connect_dlg.GetDataSource(); + wxString datasource_name = datasource->GetOGRConnectStr(); + GdaConst::DataSourceType ds_type = datasource->GetType(); + + OGRDatasourceProxy* proxy = NULL; + try { + proxy = OGRDataAdapter::GetInstance().GetDatasourceProxy(datasource_name, ds_type); + } catch (GdaException& e) { + proxy = NULL; + } + if (proxy == NULL) { + wxMessageDialog dlg(this, _("GeoDa can not open the input data source. Please try another data source."), + _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + OGRLayerProxy* p_layer = proxy->GetLayerProxy(layer_name); + if (p_layer == NULL || p_layer->CheckIsTableOnly()) { + wxMessageDialog dlg(this, _("GeoDa can not get valid spatial reference from input data source. Please try another data source."), + _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + OGRSpatialReference* input_sr = p_layer->GetSpatialReference(); + if (input_sr) { + char* tmp = new char[1024]; + if (input_sr->exportToProj4(&tmp) == OGRERR_NONE) { + wxString str_prj4 = tmp; + m_crs_input->SetValue(str_prj4); + } + delete[] tmp; + } +} void ExportDataDlg::BrowseExportDataSource ( wxCommandEvent& event ) { @@ -251,7 +329,8 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) wxLogMessage(_("ds:") + ds_name); if (ds_name.length() <= 0 ) { - wxMessageDialog dlg(this, _("Please specify a valid data source name."), _("Warning"), wxOK | wxICON_WARNING); + wxMessageDialog dlg(this, _("Please specify a valid data source name."), + _("Warning"), wxOK | wxICON_WARNING); dlg.ShowModal(); return; } @@ -265,7 +344,7 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) //geometries only, e.g. boundray file or in-memory geometries&table if (spatial_ref && table_p) { // https://github.com/GeoDaCenter/geoda/issues/1046 - + // do nothing here } } else { //case: save current open datasource as a new datasource @@ -287,26 +366,22 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) wxString y_field_name = "COORD_Y"; x_field_name.UpperCase(); y_field_name.UpperCase(); - int col_x = table_p->FindColId(x_field_name); int col_y = table_p->FindColId(y_field_name); - if (col_x == wxNOT_FOUND) - col_x = table_p->InsertCol(GdaConst::double_type, x_field_name); - + col_x = table_p->InsertCol(GdaConst::double_type, + x_field_name); if (col_y == wxNOT_FOUND) - col_y = table_p->InsertCol(GdaConst::double_type, y_field_name); - + col_y = table_p->InsertCol(GdaConst::double_type, + y_field_name); vector x_data; vector y_data; for(size_t i=0; iGetX()); y_data.push_back(((GdaPoint*)(geometries[i]))->GetY()); } - table_p->SetColData(col_x, 0, x_data); table_p->SetColData(col_y, 0, y_data); - } } if (o_ds_table_only && !n_ds_table_only) { @@ -353,7 +428,9 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) } } } - if( !CreateOGRLayer(ds_name, spatial_ref, is_update) ) { + // + bool is_table = IDataSource::IsTableOnly(ds_type); + if( !CreateOGRLayer(ds_name, is_table, spatial_ref, is_update) ) { wxString msg = _("Save As has been cancelled."); throw GdaException(msg.mb_str(), GdaException::NORMAL); } @@ -398,9 +475,7 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) } } } catch (GdaException& e) { - if (e.type() == GdaException::NORMAL) - return; - + if (e.type() == GdaException::NORMAL) return; // special clean up for file datasource if ( !tmp_ds_name.empty() ) { if ( wxFileExists(tmp_ds_name) && @@ -416,64 +491,17 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) dlg.ShowModal(); return; } - - //wxString msg = "Export successfully."; - //msg << "\n\nTips: if you want to use exported project/datasource, please" - // << " close current project and then open exported project/datasource."; - //wxMessageDialog dlg(this, msg , _("Info"), wxOK | wxICON_INFORMATION); - //dlg.ShowModal(); - + wxMessageDialog dlg(this, "Saved Successfully.", _("Success"), wxOK); + dlg.ShowModal(); EndDialog(wxID_OK); } -/** - * Exporting OGR layer in project to another datasource name - * This function will be called by OnOKClick (When user clicks OK) - */ -void ExportDataDlg::ExportOGRLayer(wxString& ds_name, bool is_update) -{ - // Exporting layer in multi-layer cases will not use OGRTable anymore, - // we will use OGRDataAdapter to get ogr layer by layer name - OGRTable* tbl = dynamic_cast(project_p->GetTableInt()); - if (!tbl) { - // DBFTable case, try to read into - wxString msg = _("Only OGR datasource can be saved as."); - throw GdaException(msg.mb_str()); - } - - OGRLayerProxy* layer = tbl->GetOGRLayer(); - - layer->T_Export(ds_format.ToStdString(), ds_name.ToStdString(), - layer_name.ToStdString(), is_update); - int prog_n_max = project_p->GetNumRecords(); - wxProgressDialog prog_dlg(_("Save As progress dialog"), - _("Saving data..."), - prog_n_max, // range - this, - wxPD_CAN_ABORT|wxPD_AUTO_HIDE|wxPD_APP_MODAL); - bool cont = true; - while (layer->export_progress < prog_n_max) { - wxSleep(1); - cont = prog_dlg.Update(layer->export_progress); - - if (!cont ) { - layer->T_StopExport(); - return; - } - if (layer->export_progress == -1){ - wxString tmp = _("Saving to data source (%s) failed.\n\nDetails: %s"); - wxString msg = wxString::Format(tmp, ds_name, layer->error_message); - throw GdaException(msg.c_str()); - } - } -} - /** * Exporting (in-memory) geometries/table in project to another datasource name * This function will be called by OnOKClick (When user clicks OK) */ bool -ExportDataDlg::CreateOGRLayer(wxString& ds_name, +ExportDataDlg::CreateOGRLayer(wxString& ds_name, bool is_table, OGRSpatialReference* spatial_ref, bool is_update) { @@ -537,51 +565,54 @@ ExportDataDlg::CreateOGRLayer(wxString& ds_name, selected_rows.push_back(i); } - // convert to OGR geometries + // convert to OGR geometries, reproject if needed OGRDataAdapter& ogr_adapter = OGRDataAdapter::GetInstance(); vector ogr_geometries; - OGRwkbGeometryType geom_type; - geom_type = ogr_adapter.MakeOGRGeometries(geometries, shape_type, - ogr_geometries, selected_rows); - - // for GeoJSON, force transform to WGS84 automatically - if (spatial_ref && (ds_name.EndsWith(".json") || ds_name.EndsWith(".geojson"))) { - int epsg = spatial_ref->GetEPSGGeogCS(); - if (epsg != 4326) { - OGRSpatialReference wgs84_ref; - wgs84_ref.importFromEPSG(4326); + OGRwkbGeometryType geom_type = wkbNone; + OGRSpatialReference new_ref = NULL; + if (is_table) { + spatial_ref = NULL; // table only data, void creating e.g. prj file + } else if (spatial_ref) { + geom_type = ogr_adapter.MakeOGRGeometries(geometries, shape_type, + ogr_geometries, selected_rows); + wxString str_crs = m_crs_input->GetValue(); + bool valid_input_crs = false; + if (!str_crs.IsEmpty()) { + if (new_ref.importFromProj4(str_crs.c_str()) == OGRERR_NONE) { + valid_input_crs = true; + } + } + if (ds_name.EndsWith(".json") || ds_name.EndsWith(".geojson")) { + // for GeoJSON, force transform to EPSG4326 automatically + new_ref.importFromEPSG(4326); + valid_input_crs = true; + } + if (valid_input_crs && !spatial_ref->IsSame(&new_ref)) { OGRCoordinateTransformation *poCT; - poCT = OGRCreateCoordinateTransformation( spatial_ref, &wgs84_ref ); + poCT = OGRCreateCoordinateTransformation(spatial_ref, &new_ref); for (size_t i=0; i < ogr_geometries.size(); i++) { ogr_geometries[i]->transform(poCT); } + spatial_ref = &new_ref; // use new CRS } } - + wxString cpg_encode; + if (project_p) cpg_encode = project_p->GetCpgEncode(); + if (cpg_encode.IsEmpty() && table_p) { + cpg_encode = table_p->GetEncodingName(); + } // take care of empty layer name if (layer_name.empty()) { layer_name = table_p ? table_p->GetTableName() : "NO_NAME"; } - int prog_n_max = selected_rows.size(); - - if (prog_n_max == 0 && table_p) - prog_n_max = table_p->GetNumberRows(); - - + if (prog_n_max == 0 && table_p) prog_n_max = table_p->GetNumberRows(); OGRLayerProxy* new_layer; - new_layer = ogr_adapter.ExportDataSource(ds_format.ToStdString(), - ds_name, - layer_name.ToStdString(), - geom_type, - ogr_geometries, - table_p, - selected_rows, - spatial_ref, - is_update); - if (new_layer == NULL) - return false; - + new_layer = ogr_adapter.ExportDataSource(ds_format, ds_name, layer_name, + geom_type, ogr_geometries, + table_p, selected_rows, + spatial_ref, is_update, cpg_encode); + if (new_layer == NULL) return false; wxProgressDialog prog_dlg(_("Save data source progress dialog"), _("Saving data..."), prog_n_max, this, @@ -613,11 +644,6 @@ ExportDataDlg::CreateOGRLayer(wxString& ds_name, delete geometries[i]; } } - - //NOTE: export_ds will take ownership of ogr_geometries - //for (size_t i=0; iGetValue().Trim().mb_str()); std::string key(m_cartodb_key->GetValue().Trim().mb_str()); diff --git a/DialogTools/ExportDataDlg.h b/DialogTools/ExportDataDlg.h index 2b1e5578f..bc04fff82 100644 --- a/DialogTools/ExportDataDlg.h +++ b/DialogTools/ExportDataDlg.h @@ -83,6 +83,7 @@ class ExportDataDlg: public DatasourceDlg void Init(wxWindow* parent, const wxPoint& pos); void CreateControls(); void BrowseExportDataSource( wxCommandEvent& event ); + void OnOpenCRS(wxCommandEvent& event ); virtual void OnOkClick( wxCommandEvent& event ); bool IsTableOnly(); @@ -92,7 +93,7 @@ class ExportDataDlg: public DatasourceDlg protected: AutoTextCtrl* m_database_table; wxCheckBox* m_chk_create_project; - + wxTextCtrl* m_crs_input; Project* project_p; TableInterface* table_p; vector geometries; @@ -116,8 +117,8 @@ class ExportDataDlg: public DatasourceDlg IDataSource* GetDatasource(); void OpenDatasourceFile(const wxFileName& ds_fname); - void ExportOGRLayer(wxString& ds_name, bool is_update); - bool CreateOGRLayer(wxString& ds_name, OGRSpatialReference* spatial_ref, bool is_update); + bool CreateOGRLayer(wxString& ds_name, bool is_table, + OGRSpatialReference* spatial_ref, bool is_update); DECLARE_EVENT_TABLE() }; diff --git a/DialogTools/FieldNameCorrectionDlg.cpp b/DialogTools/FieldNameCorrectionDlg.cpp index 8d7133dcf..15b7057a2 100644 --- a/DialogTools/FieldNameCorrectionDlg.cpp +++ b/DialogTools/FieldNameCorrectionDlg.cpp @@ -44,8 +44,9 @@ ScrolledWidgetsPane::ScrolledWidgetsPane(wxWindow* parent, wxWindowID id, : wxScrolledWindow(parent, id, wxDefaultPosition, wxSize(700,300)), ds_type(ds_type), need_correction(false) { - is_case_sensitive = OGRLayerProxy::IsFieldCaseSensitive(ds_type); - vector merged_field_names; + //is_case_sensitive = OGRLayerProxy::IsFieldCaseSensitive(ds_type); + is_case_sensitive = false; + vector merged_field_names; set bad_fnames, dup_fname, uniq_upper_fname; set::iterator uniq_iter; vector bad_fname_idx_s, dup_fname_idx_s; @@ -128,7 +129,7 @@ void ScrolledWidgetsPane::Init(vector& dup_fname_idx_s, // build a dict for searching duplicated field for (size_t i=0; i& dup_fname_idx_s, size_t ctrl_cnt = 0; - for (size_t i=0; i < dup_fname_idx_s.size(); i++) - { + for (size_t i=0; i < dup_fname_idx_s.size(); i++) { int fname_idx = dup_fname_idx_s[i]; wxString field_name = old_field_names[fname_idx]; warn_msg=DUP_WARN; @@ -200,8 +200,7 @@ void ScrolledWidgetsPane::Init(vector& dup_fname_idx_s, ++ctrl_cnt; } - for (size_t i=0; i < bad_fname_idx_s.size(); i++) - { + for (size_t i=0; i < bad_fname_idx_s.size(); i++) { int fname_idx = bad_fname_idx_s[i]; wxString field_name = old_field_names[fname_idx]; warn_msg=INV_WARN; @@ -262,7 +261,7 @@ void ScrolledWidgetsPane::Init(vector& merged_field_names, iter != field_names_dict.end(); ++iter ) { wxString old_name = iter->first; - field_dict[old_name] = true; + field_dict[old_name.Lower()] = true; } n_fields = dup_fname.size() + bad_fname.size(); @@ -393,7 +392,7 @@ wxString ScrolledWidgetsPane::GetSuggestFieldName(int field_idx) user_input_dict[old_name] = field_idx; // add any new suggest name to search dict - field_dict[new_name] = true; + field_dict[new_name.Lower()] = true; return new_name; } @@ -414,7 +413,7 @@ wxString ScrolledWidgetsPane::GetSuggestFieldName(const wxString& old_name) field_names_dict[old_name] = new_name; // add any new suggest name to search dict - field_dict[new_name] = true; + field_dict[new_name.Lower()] = true; return new_name; } @@ -479,14 +478,11 @@ wxString ScrolledWidgetsPane::RenameDupFieldName(const wxString& old_name) wxLogMessage(old_name); wxString new_name(old_name); - map::iterator field_it; // prevent same field name been added in dataset, no matter if its // case-sensitive or not - while (field_dict.find(new_name) != field_dict.end() || - field_dict.find(new_name.Upper()) != field_dict.end() || - field_dict.find(new_name.Lower()) != field_dict.end()) { - + while (field_dict.find(new_name.Lower()) != field_dict.end()) { + // duplicated name, try to append suffix in the form "_x" wxRegEx regex; long suffix_number = 1; @@ -635,7 +631,8 @@ FieldNameCorrectionDlg:: FieldNameCorrectionDlg(GdaConst::DataSourceType ds_type, vector& all_fname, wxString title) -: wxDialog(NULL, wxID_ANY, title, wxDefaultPosition, wxDefaultSize,wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) +: wxDialog(NULL, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { wxPanel *panel = new wxPanel(this); @@ -664,8 +661,7 @@ FieldNameCorrectionDlg(GdaConst::DataSourceType ds_type, SetSizer(sizerAll); SetAutoLayout(true); sizerAll->Fit(this); - - + Centre(); } @@ -676,7 +672,8 @@ FieldNameCorrectionDlg(GdaConst::DataSourceType ds_type, set& dup_fname, set& bad_fname, wxString title) -: wxDialog(NULL, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) +: wxDialog(NULL, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) { wxLogMessage("Open FieldNameCorrectionDlg:"); @@ -712,7 +709,6 @@ FieldNameCorrectionDlg(GdaConst::DataSourceType ds_type, SetAutoLayout(true); sizerAll->Fit(this); - Centre(); } @@ -753,10 +749,3 @@ void FieldNameCorrectionDlg::OnCancelClick( wxCommandEvent& event ) event.Skip(); EndDialog(wxID_CANCEL); } - - - - - - - diff --git a/DialogTools/GdaChoice.cpp b/DialogTools/GdaChoice.cpp new file mode 100644 index 000000000..7b40dd66b --- /dev/null +++ b/DialogTools/GdaChoice.cpp @@ -0,0 +1,164 @@ + +#include "GdaChoice.h" + +IMPLEMENT_DYNAMIC_CLASS(GdaChoice, wxChoice) + +GdaChoice::GdaChoice(wxWindow *parent, wxWindowID id, const wxPoint &pos, + const wxSize &size, int n, const wxString choices[], + long style, const wxValidator &validator, + const wxString &name) +: wxChoice(parent, id, pos, size, n, choices, style, validator, name) +{ + table_int = NULL; +} + +GdaChoice::~GdaChoice() +{ +} + +void GdaChoice::Clear() +{ + wxChoice::Clear(); + var_items.Clear(); + name_to_nm.clear(); + name_to_tm_id.clear(); +} + +std::set GdaChoice::GetAllItems() +{ + std::set all_items; + for (size_t i=0; itable_int = table_int; + std::vector col_id_map; + if (data_type == (SHOW_INTEGER | SHOW_STRING | SHOW_FLOAT)) { + table_int->FillColIdMap(col_id_map); + } else if (data_type == (SHOW_INTEGER | SHOW_FLOAT)) { + table_int->FillNumericColIdMap(col_id_map); + } else if (data_type == SHOW_INTEGER) { + table_int->FillIntegerColIdMap(col_id_map); + } else if (data_type == SHOW_STRING) { + table_int->FillStringColIdMap(col_id_map); + } else if (data_type == (SHOW_INTEGER | SHOW_STRING)) { + table_int->FillStringAndIntegerColIdMap(col_id_map); + } + + for (size_t i=0; iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (size_t t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = id; + name_to_tm_id[nm] = t; + var_items.Add(nm); + } + } else { + name_to_nm[name] = id; + name_to_tm_id[name] = 0; + var_items.Add(name); + } + } + for (size_t i=0; iAppend(var_items[i]); + } +} + +wxString GdaChoice::GdaGetSelection(int& col_id, int& tm_id) +{ + if (table_int == NULL) return wxEmptyString; + if (var_items.IsEmpty()) return wxEmptyString; + + int sel_id = this->GetSelection(); + if (sel_id == wxNOT_FOUND) return wxEmptyString; + + if (sel_id >= var_items.size()) return wxEmptyString; + + wxString sel_str = var_items[sel_id]; + if (name_to_nm.find(sel_str) == name_to_nm.end() || + name_to_tm_id.find(sel_str) == name_to_tm_id.end()) + return wxEmptyString; + col_id = name_to_nm[sel_str]; + tm_id = name_to_tm_id[sel_str]; + + return table_int->GetColName(col_id, tm_id); +} + +GdaConst::FieldType GdaChoice::GdaGetSelectionFieldType(unsigned int pos) +{ + GdaConst::FieldType ftype = GdaConst::unknown_type; + if (table_int == NULL) return ftype; + if (var_items.IsEmpty()) return ftype; + + int sel_id = this->GetSelection(); + if (sel_id == wxNOT_FOUND) return ftype; + + if (sel_id >= var_items.size()) return ftype; + + wxString sel_str = var_items[sel_id]; + if (name_to_nm.find(sel_str) == name_to_nm.end() || + name_to_tm_id.find(sel_str) == name_to_tm_id.end()) + return ftype; + int col_id = name_to_nm[sel_str]; + int tm_id = name_to_tm_id[sel_str]; + + return table_int->GetColType(col_id, tm_id); +} + +bool GdaChoice::GdaCheckDuplicate(unsigned int pos) +{ + if (table_int == NULL) return true; + if (var_items.IsEmpty()) return true; + if (pos >= var_items.size()) return true; + + wxString sel_str = var_items[pos]; + if (name_to_nm.find(sel_str) == name_to_nm.end() || + name_to_tm_id.find(sel_str) == name_to_tm_id.end()) + return true; + + int col_id = name_to_nm[sel_str]; + int tm_id = name_to_tm_id[sel_str]; + std::vector values; + table_int->GetColData(col_id, tm_id, values); + + std::map dup_dict; + for (size_t i=0; i > GdaChoice::GdaGetUniqueValues(unsigned int pos) +{ + std::map > results; + + if (table_int == NULL) return results; + if (var_items.IsEmpty()) return results; + if (pos >= var_items.size()) return results; + + wxString sel_str = var_items[pos]; + if (name_to_nm.find(sel_str) == name_to_nm.end() || + name_to_tm_id.find(sel_str) == name_to_tm_id.end()) + return results; + + int col_id = name_to_nm[sel_str]; + int tm_id = name_to_tm_id[sel_str]; + std::vector values; + table_int->GetColData(col_id, tm_id, values); + + for (size_t i=0; i +#include +#include +#include + +#include "../DataViewer/TableInterface.h" + + +class GdaChoice : public wxChoice +{ + int data_type; + wxArrayString var_items; + std::map name_to_nm; + std::map name_to_tm_id; + TableInterface* table_int; + +public: + GdaChoice(){} + GdaChoice(wxWindow *parent, + wxWindowID id, + const wxPoint &pos=wxDefaultPosition, + const wxSize &size=wxDefaultSize, + int n=0, + const wxString choices[]=NULL, + long style=0, + const wxValidator &validator=wxDefaultValidator, + const wxString &name=wxChoiceNameStr); + virtual ~GdaChoice(); + + // customized functions: + // style for filling content in wxListBox + enum DataType { + SHOW_INTEGER = 1, //0b00000001 + SHOW_STRING = 2, //0b00000010 + SHOW_FLOAT = 4 + }; + + virtual void Clear(); + + // init content in wxListBox + void GdaInitContent(TableInterface* table_int, int data_type); + + // get selections and related values from wxListBox + wxString GdaGetSelection(int& col_id, int& tm_id); + + // check if selected has unique values + bool GdaCheckDuplicate(unsigned int pos); + + std::map > GdaGetUniqueValues(unsigned int pos); + + GdaConst::FieldType GdaGetSelectionFieldType(unsigned int pos); + + std::set GetAllItems(); + + DECLARE_DYNAMIC_CLASS(GdaChoice) +}; + +#endif diff --git a/DialogTools/GdaListBox.cpp b/DialogTools/GdaListBox.cpp new file mode 100644 index 000000000..e36212d7e --- /dev/null +++ b/DialogTools/GdaListBox.cpp @@ -0,0 +1,148 @@ + +#include "GdaListBox.h" + +IMPLEMENT_DYNAMIC_CLASS(GdaListBox, wxListBox) + +GdaListBox::GdaListBox(wxWindow *parent, wxWindowID id, const wxPoint &pos, + const wxSize &size, int n, const wxString choices[], + long style, const wxValidator &validator, + const wxString &name) +: wxListBox(parent, id, pos, size, n, choices, style, validator, name) +{ + table_int = NULL; +} + +GdaListBox::~GdaListBox() +{ +} + +void GdaListBox::Clear() +{ + wxListBox::Clear(); + var_items.Clear(); + name_to_nm.clear(); + name_to_tm_id.clear(); +} + +void GdaListBox::GdaInitContent(TableInterface *table_int, int data_type) { + std::vector col_id_map; + if (data_type == (SHOW_INTEGER | SHOW_STRING | SHOW_FLOAT)) { + table_int->FillColIdMap(col_id_map); + } else if (data_type == (SHOW_INTEGER | SHOW_FLOAT)) { + table_int->FillNumericColIdMap(col_id_map); + } else if (data_type == SHOW_INTEGER) { + table_int->FillIntegerColIdMap(col_id_map); + } else if (data_type == SHOW_STRING) { + table_int->FillStringColIdMap(col_id_map); + } else if (data_type == (SHOW_INTEGER | SHOW_STRING)) { + table_int->FillStringAndIntegerColIdMap(col_id_map); + } + + for (size_t i=0; iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (size_t t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = id; + name_to_tm_id[nm] = t; + var_items.Add(nm); + } + } else { + name_to_nm[name] = id; + name_to_tm_id[name] = 0; + var_items.Add(name); + } + } + if (!var_items.IsEmpty()) { + this->InsertItems(var_items, 0); + } +} + +void GdaListBox::GdaGetSelections(std::vector& col_ids, + std::vector& tm_ids) +{ + if (var_items.IsEmpty()) return; + + wxArrayInt sel_ids; + int n_sel = this->GetSelections(sel_ids); + if (n_sel == 0) return; + + for (size_t i=0; i= var_items.size()) + continue; + wxString sel_str = var_items[sel_id]; + if (name_to_nm.find(sel_str) == name_to_nm.end() || + name_to_tm_id.find(sel_str) == name_to_tm_id.end()) + continue; + int col_idx = name_to_nm[sel_str]; + int tm_idx = name_to_tm_id[sel_str]; + col_ids.push_back(col_idx); + tm_ids.push_back(tm_idx); + } +} + +void GdaListBox::GdaGetAllItems(std::vector& col_ids, + std::vector& tm_ids) +{ + if (var_items.IsEmpty()) return; + + for (size_t i=0; iAppend(item); +} + +wxString GdaListBox::GdaGetString(const int& i, int& col_id, int& tm_id) +{ + if (i <0 || i >= var_items.size()) return wxEmptyString; + + wxString sel_str = var_items[i]; + + if (name_to_nm.find(sel_str) == name_to_nm.end() || + name_to_tm_id.find(sel_str) == name_to_tm_id.end()) + return wxEmptyString; + + col_id = name_to_nm[sel_str]; + tm_id = name_to_tm_id[sel_str]; + + return sel_str; +} + +void GdaListBox::Delete(unsigned int i) +{ + if (i >= var_items.size()) return; + + wxListBox::Delete(i); + + wxString sel_str = var_items[i]; + if (name_to_nm.find(sel_str) != name_to_nm.end()) { + name_to_nm.erase(name_to_nm.find(sel_str)); + } + if (name_to_tm_id.find(sel_str) != name_to_tm_id.end()) { + name_to_tm_id.erase(name_to_tm_id.find(sel_str)); + } + var_items.erase(var_items.begin() + i); +} diff --git a/DialogTools/GdaListBox.h b/DialogTools/GdaListBox.h new file mode 100644 index 000000000..dbd8e94c3 --- /dev/null +++ b/DialogTools/GdaListBox.h @@ -0,0 +1,67 @@ + + + +#ifndef __GEODA_CENTER_GDALISTBOX_H__ +#define __GEODA_CENTER_GDALISTBOX_H__ + +#include +#include +#include +#include + +#include "../DataViewer/TableInterface.h" + + +class GdaListBox : public wxListBox +{ + int data_type; + wxArrayString var_items; + std::map name_to_nm; + std::map name_to_tm_id; + TableInterface* table_int; + +public: + GdaListBox(){} + GdaListBox(wxWindow *parent, + wxWindowID id, + const wxPoint &pos=wxDefaultPosition, + const wxSize &size=wxDefaultSize, + int n=0, + const wxString choices[]=NULL, + long style=0, + const wxValidator &validator=wxDefaultValidator, + const wxString &name=wxListBoxNameStr); + virtual ~GdaListBox(); + + virtual void Clear(); + + // customized functions: + // style for filling content in wxListBox + enum DataType { + SHOW_INTEGER = 1, //0b00000001 + SHOW_STRING = 2, //0b00000010 + SHOW_FLOAT = 4 + }; + + // init content in wxListBox + void GdaInitContent(TableInterface* table_int, int data_type); + + // get selections and related values from wxListBox + void GdaGetSelections(std::vector& col_ids, std::vector& tm_ids); + + // get all items and related values from wxListBox + void GdaGetAllItems(std::vector& col_ids, std::vector& tm_ids); + + // append item with column idx and time idx to wxListBox + void GdaAppend(const wxString& item, const int& col_id, const int& tm_id); + + // get selected string with column idx and time idx + wxString GdaGetString(const int& i, int& col_id, int& tm_id); + + // delete selected item and column idx/time idx + void Delete(unsigned int pos); + + DECLARE_DYNAMIC_CLASS(GdaListBox) +}; + +#endif diff --git a/DialogTools/HClusterDlg.cpp b/DialogTools/HClusterDlg.cpp index 62d43178c..2f96a3d7f 100644 --- a/DialogTools/HClusterDlg.cpp +++ b/DialogTools/HClusterDlg.cpp @@ -174,7 +174,7 @@ void HClusterDlg::CreateControls() gbox->Add(chk_contiguity, 1, wxEXPAND); chk_contiguity->Disable(); - wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, _(""), + wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, "", wxDefaultPosition, wxSize(128,-1)); combo_weights = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1)); diff --git a/DialogTools/MaxpDlg.cpp b/DialogTools/MaxpDlg.cpp index be3c6a124..2f2ee1257 100644 --- a/DialogTools/MaxpDlg.cpp +++ b/DialogTools/MaxpDlg.cpp @@ -92,7 +92,7 @@ void MaxpDlg::CreateControls() // Min regions st_minregions = new wxStaticText(panel, wxID_ANY, _("Min # per Region:"), wxDefaultPosition, wxSize(128,-1)); - txt_minregions = new wxTextCtrl(panel, wxID_ANY, _(""), wxDefaultPosition, wxSize(200,-1)); + txt_minregions = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(200,-1)); txt_minregions->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); gbox->Add(st_minregions, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(txt_minregions, 1, wxEXPAND); diff --git a/DialogTools/PCASettingsDlg.cpp b/DialogTools/PCASettingsDlg.cpp index 7c3feb0b8..d8c058a07 100644 --- a/DialogTools/PCASettingsDlg.cpp +++ b/DialogTools/PCASettingsDlg.cpp @@ -352,9 +352,9 @@ void PCASettingsDlg::OnOK(wxCommandEvent& event ) int num_pc = col_lim; vector > pc_data(num_pc); - for (int i=0; iSetValue(pca_log); combo_n->Clear(); - for (int i=0; iAppend(wxString::Format("%d", i+1)); } combo_n->SetSelection((int)thresh95 -1); diff --git a/DialogTools/PreferenceDlg.cpp b/DialogTools/PreferenceDlg.cpp index 75261d553..43576c38a 100644 --- a/DialogTools/PreferenceDlg.cpp +++ b/DialogTools/PreferenceDlg.cpp @@ -76,6 +76,7 @@ PreferenceDlg::PreferenceDlg(wxWindow* parent, : wxDialog(parent, id, title, pos, size, wxDEFAULT_DIALOG_STYLE) { highlight_state = NULL; + table_state = NULL; SetBackgroundColour(*wxWHITE); Init(); SetMinSize(wxSize(550, -1)); @@ -83,6 +84,7 @@ PreferenceDlg::PreferenceDlg(wxWindow* parent, PreferenceDlg::PreferenceDlg(wxWindow* parent, HLStateInt* _highlight_state, + TableState* _table_state, wxWindowID id, const wxString& title, const wxPoint& pos, @@ -90,6 +92,7 @@ PreferenceDlg::PreferenceDlg(wxWindow* parent, : wxDialog(parent, id, title, pos, size, wxDEFAULT_DIALOG_STYLE) { highlight_state = _highlight_state; + table_state = _table_state; SetBackgroundColour(*wxWHITE); Init(); SetMinSize(wxSize(550, -1)); @@ -99,22 +102,25 @@ void PreferenceDlg::Init() { ReadFromCache(); - wxNotebook* notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize); + long txt_num_style = wxTE_RIGHT | wxTE_PROCESS_ENTER; + wxPoint pos = wxDefaultPosition; + wxNotebook* notebook = new wxNotebook(this, wxID_ANY, pos, wxDefaultSize); // visualization tab - wxNotebookPage* vis_page = new wxNotebookPage(notebook, wxID_ANY, wxDefaultPosition, wxSize(560, 680)); + wxNotebookPage* vis_page = new wxNotebookPage(notebook, wxID_ANY, + pos, wxSize(560, 680)); #ifdef __WIN32__ vis_page->SetBackgroundColour(*wxWHITE); #endif notebook->AddPage(vis_page, _("System")); - wxFlexGridSizer* grid_sizer1 = new wxFlexGridSizer(21, 2, 8, 10); + wxFlexGridSizer* grid_sizer1 = new wxFlexGridSizer(22, 2, 8, 10); grid_sizer1->Add(new wxStaticText(vis_page, wxID_ANY, _("Maps:")), 1); grid_sizer1->AddSpacer(10); wxString lbl0 = _("Use classic yellow cross-hatching to highlight selection in maps:"); wxStaticText* lbl_txt0 = new wxStaticText(vis_page, wxID_ANY, lbl0); - cbox0 = new wxCheckBox(vis_page, XRCID("PREF_USE_CROSSHATCH"), "", wxDefaultPosition); + cbox0 = new wxCheckBox(vis_page, XRCID("PREF_USE_CROSSHATCH"), "", pos); grid_sizer1->Add(lbl_txt0, 1, wxEXPAND); grid_sizer1->Add(cbox0, 0, wxALIGN_RIGHT); cbox0->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnCrossHatch, this); @@ -126,11 +132,9 @@ void PreferenceDlg::Init() wxStaticText* lbl_txt1 = new wxStaticText(vis_page, wxID_ANY, lbl1); wxBoxSizer* box1 = new wxBoxSizer(wxHORIZONTAL); slider1 = new wxSlider(vis_page, wxID_ANY, - 0, 0, 255, - wxDefaultPosition, sl_sz, - wxSL_HORIZONTAL); + 0, 0, 255, pos, sl_sz, wxSL_HORIZONTAL); slider_txt1 = new wxTextCtrl(vis_page, XRCID("PREF_SLIDER1_TXT"), "", - wxDefaultPosition, txt_sz, wxTE_READONLY); + pos, txt_sz, wxTE_READONLY | wxTE_RIGHT); box1->Add(slider1); box1->Add(slider_txt1); grid_sizer1->Add(lbl_txt1, 1, wxEXPAND); @@ -141,21 +145,27 @@ void PreferenceDlg::Init() wxStaticText* lbl_txt2 = new wxStaticText(vis_page, wxID_ANY, lbl2); wxBoxSizer* box2 = new wxBoxSizer(wxHORIZONTAL); slider2 = new wxSlider(vis_page, wxID_ANY, - 0, 0, 255, - wxDefaultPosition, sl_sz, - wxSL_HORIZONTAL); + 0, 0, 255, pos, sl_sz, wxSL_HORIZONTAL); slider_txt2 = new wxTextCtrl(vis_page, XRCID("PREF_SLIDER2_TXT"), "", - wxDefaultPosition, txt_sz, wxTE_READONLY); + pos, txt_sz, wxTE_READONLY | wxTE_RIGHT); box2->Add(slider2); box2->Add(slider_txt2); grid_sizer1->Add(lbl_txt2, 1, wxEXPAND); grid_sizer1->Add(box2, 0, wxALIGN_RIGHT); slider2->Bind(wxEVT_SLIDER, &PreferenceDlg::OnSlider2, this); + wxString lbl26 = _("Enable transparency setup of category color in map (Windows only):"); + wxStaticText* lbl_txt26 = new wxStaticText(vis_page, wxID_ANY, lbl26); + cbox26 = new wxCheckBox(vis_page, XRCID("PREF_USE_CROSSHATCH"), "", pos); + grid_sizer1->Add(lbl_txt26, 1, wxEXPAND); + grid_sizer1->Add(cbox26, 0, wxALIGN_RIGHT); + cbox26->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnEnableTransparencyWin, this); + wxString lbl3 = _("Add basemap automatically:"); wxStaticText* lbl_txt3 = new wxStaticText(vis_page, wxID_ANY, lbl3); //wxStaticText* lbl_txt33 = new wxStaticText(vis_page, wxID_ANY, lbl3); - cmb33 = new wxComboBox(vis_page, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY); + cmb33 = new wxComboBox(vis_page, wxID_ANY, "", pos, wxDefaultSize, 0, + NULL, wxCB_READONLY); cmb33->Append("No basemap"); wxString basemap_sources = GdaConst::gda_basemap_sources; wxString encoded_str= wxString::FromUTF8((const char*)basemap_sources.mb_str()); @@ -185,17 +195,18 @@ void PreferenceDlg::Init() grid_sizer1->Add(lbl_txt3, 1, wxEXPAND); grid_sizer1->Add(cmb33, 0, wxALIGN_RIGHT); - grid_sizer1->Add(new wxStaticText(vis_page, wxID_ANY, _("Plots:")), 1, wxTOP | wxBOTTOM, 10); + grid_sizer1->Add(new wxStaticText(vis_page, wxID_ANY, _("Plots:")), 1, + wxTOP | wxBOTTOM, 10); grid_sizer1->AddSpacer(10); wxString lbl6 = _("Set transparency of highlighted objects in selection:"); wxStaticText* lbl_txt6 = new wxStaticText(vis_page, wxID_ANY, lbl6); wxBoxSizer* box6 = new wxBoxSizer(wxHORIZONTAL); slider6 = new wxSlider(vis_page, XRCID("PREF_SLIDER6"), - 255, 0, 255, - wxDefaultPosition, sl_sz, - wxSL_HORIZONTAL); - wxTextCtrl* slider_txt6 = new wxTextCtrl(vis_page, XRCID("PREF_SLIDER6_TXT"), "0.0", wxDefaultPosition, txt_sz, wxTE_READONLY); + 255, 0, 255, pos, sl_sz, wxSL_HORIZONTAL); + wxTextCtrl* slider_txt6 = new wxTextCtrl(vis_page, XRCID("PREF_SLIDER6_TXT"), + "0.0", pos, + txt_sz, wxTE_READONLY | wxTE_RIGHT); lbl_txt6->Hide(); slider6->Hide(); slider_txt6->Hide(); @@ -212,9 +223,10 @@ void PreferenceDlg::Init() wxBoxSizer* box7 = new wxBoxSizer(wxHORIZONTAL); slider7 = new wxSlider(vis_page, wxID_ANY, 0, 0, 255, - wxDefaultPosition, sl_sz, + pos, sl_sz, wxSL_HORIZONTAL); - slider_txt7 = new wxTextCtrl(vis_page, XRCID("PREF_SLIDER7_TXT"), "", wxDefaultPosition, txt_sz, wxTE_READONLY); + slider_txt7 = new wxTextCtrl(vis_page, XRCID("PREF_SLIDER7_TXT"), "", pos, + txt_sz, wxTE_READONLY); box7->Add(slider7); box7->Add(slider_txt7); grid_sizer1->Add(lbl_txt7, 1, wxEXPAND); @@ -229,7 +241,8 @@ void PreferenceDlg::Init() wxString lbl113 = _("Language:"); wxStaticText* lbl_txt113 = new wxStaticText(vis_page, wxID_ANY, lbl113); - cmb113 = new wxComboBox(vis_page, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY); + cmb113 = new wxComboBox(vis_page, wxID_ANY, "", pos, wxDefaultSize, 0, + NULL, wxCB_READONLY); cmb113->Append(""); cmb113->Append("English"); cmb113->Append("Chinese (Simplified)"); @@ -243,35 +256,35 @@ void PreferenceDlg::Init() wxString lbl8 = _("Show Recent/Sample Data panel in Connect Datasource Dialog:"); wxStaticText* lbl_txt8 = new wxStaticText(vis_page, wxID_ANY, lbl8); - cbox8 = new wxCheckBox(vis_page, XRCID("PREF_SHOW_RECENT"), "", wxDefaultPosition); + cbox8 = new wxCheckBox(vis_page, XRCID("PREF_SHOW_RECENT"), "", pos); grid_sizer1->Add(lbl_txt8, 1, wxEXPAND); grid_sizer1->Add(cbox8, 0, wxALIGN_RIGHT); cbox8->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnShowRecent, this); wxString lbl9 = _("Show CSV Configuration in Merge Data Dialog:"); wxStaticText* lbl_txt9 = new wxStaticText(vis_page, wxID_ANY, lbl9); - cbox9 = new wxCheckBox(vis_page, XRCID("PREF_SHOW_CSV_IN_MERGE"), "", wxDefaultPosition); + cbox9 = new wxCheckBox(vis_page, XRCID("PREF_SHOW_CSV_IN_MERGE"), "", pos); grid_sizer1->Add(lbl_txt9, 1, wxEXPAND); grid_sizer1->Add(cbox9, 0, wxALIGN_RIGHT); cbox9->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnShowCsvInMerge, this); wxString lbl10 = _("Enable High DPI/Retina support (Mac only):"); wxStaticText* lbl_txt10 = new wxStaticText(vis_page, wxID_ANY, lbl10); - cbox10 = new wxCheckBox(vis_page, XRCID("PREF_ENABLE_HDPI"), "", wxDefaultPosition); + cbox10 = new wxCheckBox(vis_page, XRCID("PREF_ENABLE_HDPI"), "", pos); grid_sizer1->Add(lbl_txt10, 1, wxEXPAND); grid_sizer1->Add(cbox10, 0, wxALIGN_RIGHT); cbox10->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnEnableHDPISupport, this); wxString lbl4 = _("Disable crash detection for bug report:"); wxStaticText* lbl_txt4 = new wxStaticText(vis_page, wxID_ANY, lbl4); - cbox4 = new wxCheckBox(vis_page, XRCID("PREF_CRASH_DETECT"), "", wxDefaultPosition); + cbox4 = new wxCheckBox(vis_page, XRCID("PREF_CRASH_DETECT"), "", pos); grid_sizer1->Add(lbl_txt4, 1, wxEXPAND); grid_sizer1->Add(cbox4, 0, wxALIGN_RIGHT); cbox4->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnDisableCrashDetect, this); wxString lbl5 = _("Disable auto upgrade:"); wxStaticText* lbl_txt5 = new wxStaticText(vis_page, wxID_ANY, lbl5); - cbox5 = new wxCheckBox(vis_page, XRCID("PREF_AUTO_UPGRADE"), "", wxDefaultPosition); + cbox5 = new wxCheckBox(vis_page, XRCID("PREF_AUTO_UPGRADE"), "", pos); grid_sizer1->Add(lbl_txt5, 1, wxEXPAND); grid_sizer1->Add(cbox5, 0, wxALIGN_RIGHT); cbox5->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnDisableAutoUpgrade, this); @@ -282,14 +295,15 @@ void PreferenceDlg::Init() wxString lbl16 = _("Use specified seed:"); wxStaticText* lbl_txt16 = new wxStaticText(vis_page, wxID_ANY, lbl16); - cbox6 = new wxCheckBox(vis_page, XRCID("PREF_USE_SPEC_SEED"), "", wxDefaultPosition); + cbox6 = new wxCheckBox(vis_page, XRCID("PREF_USE_SPEC_SEED"), "", pos); grid_sizer1->Add(lbl_txt16, 1, wxEXPAND); grid_sizer1->Add(cbox6, 0, wxALIGN_RIGHT); cbox6->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnUseSpecifiedSeed, this); wxString lbl17 = _("Set seed for randomization:"); wxStaticText* lbl_txt17 = new wxStaticText(vis_page, wxID_ANY, lbl17); - txt_seed = new wxTextCtrl(vis_page, XRCID("PREF_SEED_VALUE"), "", wxDefaultPosition, wxSize(85, -1)); + txt_seed = new wxTextCtrl(vis_page, XRCID("PREF_SEED_VALUE"), "", pos, + wxSize(85, -1), txt_num_style); grid_sizer1->Add(lbl_txt17, 1, wxEXPAND); grid_sizer1->Add(txt_seed, 0, wxALIGN_RIGHT); txt_seed->Bind(wxEVT_COMMAND_TEXT_UPDATED, &PreferenceDlg::OnSeedEnter, this); @@ -297,8 +311,9 @@ void PreferenceDlg::Init() wxString lbl18 = _("Set number of CPU cores manually:"); wxStaticText* lbl_txt18 = new wxStaticText(vis_page, wxID_ANY, lbl18); wxBoxSizer* box18 = new wxBoxSizer(wxHORIZONTAL); - cbox18 = new wxCheckBox(vis_page, XRCID("PREF_SET_CPU_CORES"), "", wxDefaultPosition); - txt_cores = new wxTextCtrl(vis_page, XRCID("PREF_TXT_CPU_CORES"), "", wxDefaultPosition, wxSize(85, -1)); + cbox18 = new wxCheckBox(vis_page, XRCID("PREF_SET_CPU_CORES"), "", pos); + txt_cores = new wxTextCtrl(vis_page, XRCID("PREF_TXT_CPU_CORES"), "", pos, + wxSize(85, -1), txt_num_style); box18->Add(cbox18); box18->Add(txt_cores); grid_sizer1->Add(lbl_txt18, 1, wxEXPAND); @@ -308,14 +323,15 @@ void PreferenceDlg::Init() wxString lbl19 = _("Stopping criterion for power iteration:"); wxStaticText* lbl_txt19 = new wxStaticText(vis_page, wxID_ANY, lbl19); - txt_poweriter_eps = new wxTextCtrl(vis_page, XRCID("PREF_POWER_EPS"), "", wxDefaultPosition, wxSize(85, -1)); + txt_poweriter_eps = new wxTextCtrl(vis_page, XRCID("PREF_POWER_EPS"), "", + pos, wxSize(85, -1), txt_num_style); grid_sizer1->Add(lbl_txt19, 1, wxEXPAND); grid_sizer1->Add(txt_poweriter_eps, 0, wxALIGN_RIGHT); txt_poweriter_eps->Bind(wxEVT_COMMAND_TEXT_UPDATED, &PreferenceDlg::OnPowerEpsEnter, this); wxString lbl20 = _("Use GPU to Accelerate computation:"); wxStaticText* lbl_txt20 = new wxStaticText(vis_page, wxID_ANY, lbl20); - cbox_gpu = new wxCheckBox(vis_page, XRCID("PREF_USE_GPU"), "", wxDefaultPosition); + cbox_gpu = new wxCheckBox(vis_page, XRCID("PREF_USE_GPU"), "", pos); grid_sizer1->Add(lbl_txt20, 1, wxEXPAND); grid_sizer1->Add(cbox_gpu, 0, wxALIGN_RIGHT); cbox_gpu->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnUseGPU, this); @@ -342,7 +358,7 @@ void PreferenceDlg::Init() wxString lbl21 = _("Hide system table in Postgresql connection:"); wxStaticText* lbl_txt21 = new wxStaticText(gdal_page, wxID_ANY, lbl21); - cbox21 = new wxCheckBox(gdal_page, wxID_ANY, "", wxDefaultPosition); + cbox21 = new wxCheckBox(gdal_page, wxID_ANY, "", pos); grid_sizer2->Add(lbl_txt21, 1, wxEXPAND | wxTOP, 10); grid_sizer2->Add(cbox21, 0, wxALIGN_RIGHT | wxTOP, 13); cbox21->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnHideTablePostGIS, this); @@ -350,7 +366,7 @@ void PreferenceDlg::Init() wxString lbl22 = _("Hide system table in SQLITE connection:"); wxStaticText* lbl_txt22 = new wxStaticText(gdal_page, wxID_ANY, lbl22); - cbox22 = new wxCheckBox(gdal_page, wxID_ANY, "", wxDefaultPosition); + cbox22 = new wxCheckBox(gdal_page, wxID_ANY, "", pos); grid_sizer2->Add(lbl_txt22, 1, wxEXPAND); grid_sizer2->Add(cbox22, 0, wxALIGN_RIGHT); cbox22->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnHideTableSQLITE, this); @@ -358,18 +374,28 @@ void PreferenceDlg::Init() wxString lbl23 = _("Http connection timeout (seconds) for e.g. WFS, Geojson etc.:"); wxStaticText* lbl_txt23 = new wxStaticText(gdal_page, wxID_ANY, lbl23); - txt23 = new wxTextCtrl(gdal_page, XRCID("ID_HTTP_TIMEOUT"), "", wxDefaultPosition, txt_sz, wxTE_PROCESS_ENTER); + txt23 = new wxTextCtrl(gdal_page, XRCID("ID_HTTP_TIMEOUT"), "", pos, + txt_sz, txt_num_style); grid_sizer2->Add(lbl_txt23, 1, wxEXPAND); grid_sizer2->Add(txt23, 0, wxALIGN_RIGHT); txt23->Bind(wxEVT_TEXT, &PreferenceDlg::OnTimeoutInput, this); wxString lbl24 = _("Date/Time formats (using comma to separate formats):"); wxStaticText* lbl_txt24 = new wxStaticText(gdal_page, wxID_ANY, lbl24); - txt24 = new wxTextCtrl(gdal_page, XRCID("ID_DATETIME_FORMATS"), "", wxDefaultPosition, wxSize(200, -1), wxTE_PROCESS_ENTER); + txt24 = new wxTextCtrl(gdal_page, XRCID("ID_DATETIME_FORMATS"), "", pos, + wxSize(200, -1), txt_num_style); grid_sizer2->Add(lbl_txt24, 1, wxEXPAND); grid_sizer2->Add(txt24, 0, wxALIGN_RIGHT); txt24->Bind(wxEVT_TEXT, &PreferenceDlg::OnDateTimeInput, this); - + + wxString lbl25 = _("Default displayed decimal places in Table:"); + wxStaticText* lbl_txt25 = new wxStaticText(gdal_page, wxID_ANY, lbl25); + txt25 = new wxTextCtrl(gdal_page, XRCID("ID_DISPLAYED_DECIMALS"), "", pos, + txt_sz, txt_num_style); + grid_sizer2->Add(lbl_txt25, 1, wxEXPAND); + grid_sizer2->Add(txt25, 0, wxALIGN_RIGHT); + txt25->Bind(wxEVT_TEXT, &PreferenceDlg::OnDisplayDecimal, this); + grid_sizer2->AddGrowableCol(0, 1); wxBoxSizer *nb_box2 = new wxBoxSizer(wxVERTICAL); @@ -384,9 +410,9 @@ void PreferenceDlg::Init() wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); - - wxButton *resetButton = new wxButton(this, wxID_ANY, _("Reset"), wxDefaultPosition, wxSize(70, 30)); - wxButton *closeButton = new wxButton(this, wxID_OK, _("Close"), wxDefaultPosition, wxSize(70, 30)); + wxSize bt_sz = wxSize(70, 30); + wxButton *resetButton = new wxButton(this, wxID_ANY, _("Reset"), pos, bt_sz); + wxButton *closeButton = new wxButton(this, wxID_OK, _("Close"), pos, bt_sz); resetButton->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &PreferenceDlg::OnReset, this); hbox->Add(resetButton, 1); @@ -429,7 +455,9 @@ void PreferenceDlg::OnReset(wxCommandEvent& ev) GdaConst::gdal_http_timeout = 5; GdaConst::use_gda_user_seed= true; GdaConst::gda_user_seed = 123456789; + GdaConst::default_display_decimals = 6; GdaConst::gda_datetime_formats_str = "%Y-%m-%d %H:%M:%S,%Y/%m/%d %H:%M:%S,%d.%m.%Y %H:%M:%S,%m/%d/%Y %H:%M:%S,%Y-%m-%d,%m/%d/%Y,%Y/%m/%d,%H:%M:%S,%H:%M,%Y/%m/%d %H:%M %p"; + GdaConst::gda_enable_set_transparency_windows = false; if (!GdaConst::gda_datetime_formats_str.empty()) { wxString patterns = GdaConst::gda_datetime_formats_str; wxStringTokenizer tokenizer(patterns, ","); @@ -467,6 +495,8 @@ void PreferenceDlg::OnReset(wxCommandEvent& ev) ogr_adapt.AddEntry("gda_eigen_tol", "1.0E-8"); ogr_adapt.AddEntry("gda_ui_language", "0"); ogr_adapt.AddEntry("gda_use_gpu", "0"); + ogr_adapt.AddEntry("gda_displayed_decimals", "6"); + ogr_adapt.AddEntry("gda_enable_set_transparency_windows", "0"); } void PreferenceDlg::SetupControls() @@ -499,7 +529,8 @@ void PreferenceDlg::SetupControls() txt23->SetValue(wxString::Format("%d", GdaConst::gdal_http_timeout)); txt24->SetValue(GdaConst::gda_datetime_formats_str); - + txt25->SetValue(wxString::Format("%d", GdaConst::default_display_decimals)); + cbox6->SetValue(GdaConst::use_gda_user_seed); wxString t_seed; t_seed << GdaConst::gda_user_seed; @@ -517,11 +548,14 @@ void PreferenceDlg::SetupControls() cmb113->SetSelection(GdaConst::gda_ui_language); cbox_gpu->SetValue(GdaConst::gda_use_gpu); + cbox26->SetValue(GdaConst::gda_enable_set_transparency_windows); } void PreferenceDlg::ReadFromCache() { - vector transp_h = OGRDataAdapter::GetInstance().GetHistory("transparency_highlighted"); + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + + vector transp_h = ogr_adapt.GetHistory("transparency_highlighted"); if (!transp_h.empty()) { long transp_l = 0; wxString transp = transp_h[0]; @@ -529,7 +563,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::transparency_highlighted = transp_l; } } - vector transp_uh = OGRDataAdapter::GetInstance().GetHistory("transparency_unhighlighted"); + vector transp_uh = ogr_adapt.GetHistory("transparency_unhighlighted"); if (!transp_uh.empty()) { long transp_l = 0; wxString transp = transp_uh[0]; @@ -537,7 +571,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::transparency_unhighlighted = transp_l; } } - vector plot_transparency_unhighlighted = OGRDataAdapter::GetInstance().GetHistory("plot_transparency_unhighlighted"); + vector plot_transparency_unhighlighted = ogr_adapt.GetHistory("plot_transparency_unhighlighted"); if (!plot_transparency_unhighlighted.empty()) { long transp_l = 0; wxString transp = plot_transparency_unhighlighted[0]; @@ -545,7 +579,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::plot_transparency_unhighlighted = transp_l; } } - vector basemap_sel = OGRDataAdapter::GetInstance().GetHistory("default_basemap_selection"); + vector basemap_sel = ogr_adapt.GetHistory("default_basemap_selection"); if (!basemap_sel.empty()) { long sel_l = 0; wxString sel = basemap_sel[0]; @@ -553,7 +587,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::default_basemap_selection = sel_l; } } - vector basemap_default = OGRDataAdapter::GetInstance().GetHistory("use_basemap_by_default"); + vector basemap_default = ogr_adapt.GetHistory("use_basemap_by_default"); if (!basemap_default.empty()) { long sel_l = 0; wxString sel = basemap_default[0]; @@ -564,7 +598,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::use_basemap_by_default = false; } } - vector crossht_sel = OGRDataAdapter::GetInstance().GetHistory("use_cross_hatching"); + vector crossht_sel = ogr_adapt.GetHistory("use_cross_hatching"); if (!crossht_sel.empty()) { long cross_l = 0; wxString cross = crossht_sel[0]; @@ -575,7 +609,18 @@ void PreferenceDlg::ReadFromCache() GdaConst::use_cross_hatching = false; } } - vector postgres_sys_sel = OGRDataAdapter::GetInstance().GetHistory("hide_sys_table_postgres"); + vector enable_transp_sel = ogr_adapt.GetHistory("gda_enable_set_transparency_windows"); + if (!enable_transp_sel.empty()) { + long enable_l = 0; + wxString enable_transp = enable_transp_sel[0]; + if (enable_transp.ToLong(&enable_l)) { + if (enable_l == 1) + GdaConst::gda_enable_set_transparency_windows = true; + else if (enable_l == 0) + GdaConst::gda_enable_set_transparency_windows = false; + } + } + vector postgres_sys_sel = ogr_adapt.GetHistory("hide_sys_table_postgres"); if (!postgres_sys_sel.empty()) { long sel_l = 0; wxString sel = postgres_sys_sel[0]; @@ -586,7 +631,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::hide_sys_table_postgres = false; } } - vector hide_sys_table_sqlite = OGRDataAdapter::GetInstance().GetHistory("hide_sys_table_sqlite"); + vector hide_sys_table_sqlite = ogr_adapt.GetHistory("hide_sys_table_sqlite"); if (!hide_sys_table_sqlite.empty()) { long sel_l = 0; wxString sel = hide_sys_table_sqlite[0]; @@ -597,7 +642,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::hide_sys_table_sqlite = false; } } - vector disable_crash_detect = OGRDataAdapter::GetInstance().GetHistory("disable_crash_detect"); + vector disable_crash_detect = ogr_adapt.GetHistory("disable_crash_detect"); if (!disable_crash_detect.empty()) { long sel_l = 0; wxString sel = disable_crash_detect[0]; @@ -608,7 +653,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::disable_crash_detect = false; } } - vector disable_auto_upgrade = OGRDataAdapter::GetInstance().GetHistory("disable_auto_upgrade"); + vector disable_auto_upgrade = ogr_adapt.GetHistory("disable_auto_upgrade"); if (!disable_auto_upgrade.empty()) { long sel_l = 0; wxString sel = disable_auto_upgrade[0]; @@ -620,7 +665,7 @@ void PreferenceDlg::ReadFromCache() } } - vector show_recent_sample_connect_ds_dialog = OGRDataAdapter::GetInstance().GetHistory("show_recent_sample_connect_ds_dialog"); + vector show_recent_sample_connect_ds_dialog = ogr_adapt.GetHistory("show_recent_sample_connect_ds_dialog"); if (!show_recent_sample_connect_ds_dialog.empty()) { long sel_l = 0; wxString sel = show_recent_sample_connect_ds_dialog[0]; @@ -632,7 +677,7 @@ void PreferenceDlg::ReadFromCache() } } - vector show_csv_configure_in_merge = OGRDataAdapter::GetInstance().GetHistory("show_csv_configure_in_merge"); + vector show_csv_configure_in_merge = ogr_adapt.GetHistory("show_csv_configure_in_merge"); if (!show_csv_configure_in_merge.empty()) { long sel_l = 0; wxString sel = show_csv_configure_in_merge[0]; @@ -643,7 +688,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::show_csv_configure_in_merge = false; } } - vector enable_high_dpi_support = OGRDataAdapter::GetInstance().GetHistory("enable_high_dpi_support"); + vector enable_high_dpi_support = ogr_adapt.GetHistory("enable_high_dpi_support"); if (!enable_high_dpi_support.empty()) { long sel_l = 0; wxString sel = enable_high_dpi_support[0]; @@ -654,7 +699,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::enable_high_dpi_support = false; } } - vector gdal_http_timeout = OGRDataAdapter::GetInstance().GetHistory("gdal_http_timeout"); + vector gdal_http_timeout = ogr_adapt.GetHistory("gdal_http_timeout"); if (!gdal_http_timeout.empty()) { long sel_l = 0; wxString sel = gdal_http_timeout[0]; @@ -663,7 +708,7 @@ void PreferenceDlg::ReadFromCache() } } - vector gda_datetime_formats_str = OGRDataAdapter::GetInstance().GetHistory("gda_datetime_formats_str"); + vector gda_datetime_formats_str = ogr_adapt.GetHistory("gda_datetime_formats_str"); if (!gda_datetime_formats_str.empty()) { wxString patterns = gda_datetime_formats_str[0]; wxStringTokenizer tokenizer(patterns, ","); @@ -675,7 +720,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::gda_datetime_formats_str = patterns; } - vector gda_user_seed = OGRDataAdapter::GetInstance().GetHistory("gda_user_seed"); + vector gda_user_seed = ogr_adapt.GetHistory("gda_user_seed"); if (!gda_user_seed.empty()) { long sel_l = 0; wxString sel = gda_user_seed[0]; @@ -683,7 +728,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::gda_user_seed = sel_l; } } - vector use_gda_user_seed = OGRDataAdapter::GetInstance().GetHistory("use_gda_user_seed"); + vector use_gda_user_seed = ogr_adapt.GetHistory("use_gda_user_seed"); if (!use_gda_user_seed.empty()) { long sel_l = 0; wxString sel = use_gda_user_seed[0]; @@ -697,7 +742,7 @@ void PreferenceDlg::ReadFromCache() } } - vector gda_set_cpu_cores = OGRDataAdapter::GetInstance().GetHistory("gda_set_cpu_cores"); + vector gda_set_cpu_cores = ogr_adapt.GetHistory("gda_set_cpu_cores"); if (!gda_set_cpu_cores.empty()) { long sel_l = 0; wxString sel = gda_set_cpu_cores[0]; @@ -708,7 +753,7 @@ void PreferenceDlg::ReadFromCache() GdaConst::gda_set_cpu_cores = false; } } - vector gda_cpu_cores = OGRDataAdapter::GetInstance().GetHistory("gda_cpu_cores"); + vector gda_cpu_cores = ogr_adapt.GetHistory("gda_cpu_cores"); if (!gda_cpu_cores.empty()) { long sel_l = 0; wxString sel = gda_cpu_cores[0]; @@ -717,7 +762,7 @@ void PreferenceDlg::ReadFromCache() } } - vector gda_eigen_tol = OGRDataAdapter::GetInstance().GetHistory("gda_eigen_tol"); + vector gda_eigen_tol = ogr_adapt.GetHistory("gda_eigen_tol"); if (!gda_eigen_tol.empty()) { double sel_l = 0; wxString sel = gda_eigen_tol[0]; @@ -726,7 +771,7 @@ void PreferenceDlg::ReadFromCache() } } - vector gda_ui_language = OGRDataAdapter::GetInstance().GetHistory("gda_ui_language"); + vector gda_ui_language = ogr_adapt.GetHistory("gda_ui_language"); if (!gda_ui_language.empty()) { long sel_l = 0; wxString sel = gda_ui_language[0]; @@ -735,7 +780,7 @@ void PreferenceDlg::ReadFromCache() } } - vector gda_use_gpu = OGRDataAdapter::GetInstance().GetHistory("gda_use_gpu"); + vector gda_use_gpu = ogr_adapt.GetHistory("gda_use_gpu"); if (!gda_use_gpu.empty()) { long sel_l = 0; wxString sel = gda_use_gpu[0]; @@ -746,14 +791,22 @@ void PreferenceDlg::ReadFromCache() GdaConst::gda_use_gpu = false; } } - + + vector gda_disp_decimals = ogr_adapt.GetHistory("gda_displayed_decimals"); + if (!gda_disp_decimals.empty()) { + long sel_l = 0; + wxString sel = gda_disp_decimals[0]; + if (sel.ToLong(&sel_l)) { + GdaConst::default_display_decimals = sel_l; + } + } + // following are not in this UI, but still global variable - vector gda_user_email = OGRDataAdapter::GetInstance().GetHistory("gda_user_email"); + vector gda_user_email = ogr_adapt.GetHistory("gda_user_email"); if (!gda_user_email.empty()) { wxString email = gda_user_email[0]; GdaConst::gda_user_email = email; } - } void PreferenceDlg::OnChooseLanguage(wxCommandEvent& ev) @@ -793,6 +846,7 @@ void PreferenceDlg::OnChooseLanguage(wxCommandEvent& ev) wxMessageDialog dlg(NULL, msg, _("Info"), wxOK | wxICON_INFORMATION); dlg.ShowModal(); } + void PreferenceDlg::OnDateTimeInput(wxCommandEvent& ev) { GdaConst::gda_datetime_formats.clear(); @@ -807,6 +861,20 @@ void PreferenceDlg::OnDateTimeInput(wxCommandEvent& ev) OGRDataAdapter::GetInstance().AddEntry("gda_datetime_formats_str", formats_str); } +void PreferenceDlg::OnDisplayDecimal(wxCommandEvent& ev) +{ + wxString val = txt25->GetValue(); + long _val; + if (val.ToLong(&_val)) { + GdaConst::default_display_decimals = _val; + OGRDataAdapter::GetInstance().AddEntry("gda_displayed_decimals", val); + if (table_state) { + table_state->SetRefreshEvtTyp(); + table_state->notifyObservers(); + } + } +} + void PreferenceDlg::OnTimeoutInput(wxCommandEvent& ev) { wxString sec_str = txt23->GetValue(); @@ -922,6 +990,19 @@ void PreferenceDlg::OnCrossHatch(wxCommandEvent& ev) } } +void PreferenceDlg::OnEnableTransparencyWin(wxCommandEvent& ev) +{ + int setup_transp_sel = ev.GetSelection(); + if (setup_transp_sel == 0) { + GdaConst::gda_enable_set_transparency_windows = false; + OGRDataAdapter::GetInstance().AddEntry("gda_enable_set_transparency_windows", "0"); + } + else if (setup_transp_sel == 1) { + GdaConst::gda_enable_set_transparency_windows = true; + OGRDataAdapter::GetInstance().AddEntry("gda_enable_set_transparency_windows", "1"); + } +} + void PreferenceDlg::OnHideTablePostGIS(wxCommandEvent& ev) { int sel = ev.GetSelection(); diff --git a/DialogTools/PreferenceDlg.h b/DialogTools/PreferenceDlg.h index 41f13aafa..b9267c48c 100644 --- a/DialogTools/PreferenceDlg.h +++ b/DialogTools/PreferenceDlg.h @@ -31,6 +31,7 @@ #include #include "../HLStateInt.h" +#include "../DataViewer/TableState.h" #include "../HighlightStateObserver.h" using namespace std; @@ -51,6 +52,7 @@ class PreferenceDlg : public wxDialog PreferenceDlg(wxWindow* parent, HLStateInt* highlight_state, + TableState* table_state, wxWindowID id = wxID_ANY, const wxString& title = _("GeoDa Preference Setup"), const wxPoint& pos = wxDefaultPosition, @@ -60,6 +62,7 @@ class PreferenceDlg : public wxDialog protected: HLStateInt* highlight_state; + TableState* table_state; // PREF_USE_CROSSHATCH wxCheckBox* cbox0; // PREF_SLIDER1_TXT @@ -97,6 +100,8 @@ class PreferenceDlg : public wxDialog wxTextCtrl* txt23; // data/tome wxTextCtrl* txt24; + // displayed decimals + wxTextCtrl* txt25; // cpu cores wxCheckBox* cbox18; wxTextCtrl* txt_cores; @@ -106,11 +111,11 @@ class PreferenceDlg : public wxDialog wxComboBox* cmb113; // gpu wxCheckBox* cbox_gpu; + // transp + wxCheckBox* cbox26; void Init(); - void SetupControls(); - - + void SetupControls(); void OnChooseLanguage(wxCommandEvent& ev); void OnCrossHatch(wxCommandEvent& ev); void OnSlider1(wxCommandEvent& ev); @@ -130,7 +135,7 @@ class PreferenceDlg : public wxDialog void OnHideTableSQLITE(wxCommandEvent& ev); void OnTimeoutInput(wxCommandEvent& ev); void OnDateTimeInput(wxCommandEvent& ev); - + void OnDisplayDecimal(wxCommandEvent& ev); void OnUseSpecifiedSeed(wxCommandEvent& ev); void OnSeedEnter(wxCommandEvent& ev); @@ -140,6 +145,8 @@ class PreferenceDlg : public wxDialog void OnPowerEpsEnter(wxCommandEvent& ev); void OnUseGPU(wxCommandEvent& ev); + void OnEnableTransparencyWin(wxCommandEvent& ev); + void OnReset(wxCommandEvent& ev); }; diff --git a/DialogTools/ProjectInfoDlg.cpp b/DialogTools/ProjectInfoDlg.cpp index c5bdaed77..170becfe6 100644 --- a/DialogTools/ProjectInfoDlg.cpp +++ b/DialogTools/ProjectInfoDlg.cpp @@ -24,18 +24,13 @@ #include "../Project.h" #include "ProjectInfoDlg.h" +using namespace std; + ProjectInfoDlg::ProjectInfoDlg(Project* project) -: wxDialog(NULL, wxID_ANY, "Project Information", wxDefaultPosition, wxSize(250, 150)) +: wxDialog(NULL, wxID_ANY, _("Project Information"), wxDefaultPosition, + wxSize(250, 150), wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) { wxLogMessage("Open ProjectInfoDlg."); - - using namespace std; - wxPanel* panel = new wxPanel(this, -1); - - wxBoxSizer* vbox = new wxBoxSizer(wxVERTICAL); - wxBoxSizer* hbox = new wxBoxSizer(wxHORIZONTAL); - - vector key; vector val; key.push_back("Project Title"); @@ -118,26 +113,57 @@ ProjectInfoDlg::ProjectInfoDlg(Project* project) double minx = 0, miny = 0, maxx = 0, maxy = 0; project->GetMapExtent(minx, miny, maxx, maxy); val.push_back(wxString::Format("Lower left: %f, %f Upper right: %f, %f", minx, miny, maxx, maxy)); + + key.push_back("CRS (proj4 format)"); + OGRSpatialReference* sr = project->GetSpatialReference(); + wxString str_crs = "Unknown"; + if (sr) { + char* tmp = new char[1024]; + if (sr->exportToProj4(&tmp) == OGRERR_NONE) { + str_crs = tmp; + } + delete[] tmp; + } + val.push_back(str_crs); + + key.push_back("CRS (EPSG code)"); + wxString str_EPSG = "Unknown"; + if (sr) { + int epsg_code = sr->GetEPSGGeogCS(); + if (epsg_code > -1) { + str_EPSG = wxString::Format("%d", epsg_code); + } + } + val.push_back(str_EPSG); } - - const int left_offset = 0; - const int top_offset = 0; - const int line_space = 25; + + wxPanel* panel = new wxPanel(this, -1); + + wxBoxSizer* vbox = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* hbox = new wxBoxSizer(wxHORIZONTAL); + + wxFlexGridSizer* gbox = new wxFlexGridSizer(12, 2, 5, 5); + gbox->SetFlexibleDirection(wxBOTH); + gbox->AddGrowableCol(1, 1); for (int i=0, sz=key.size(); iAdd(txt, 1, wxEXPAND); + gbox->Add(st); + gbox->Add(txtbox, 1, wxEXPAND | wxALL); } - - wxButton* ok_btn = new wxButton(this, wxID_OK, "OK", wxDefaultPosition, + panel->SetSizerAndFit(gbox); + + wxButton* ok_btn = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); hbox->Add(ok_btn, 1, wxLEFT, 15); - - vbox->Add(panel, 1, wxALL, 15); + vbox->Add(panel, 1, wxALL | wxEXPAND, 15); vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); SetSizer(vbox); diff --git a/DialogTools/RandomizationDlg.cpp b/DialogTools/RandomizationDlg.cpp index dcb4df2e2..430466c24 100644 --- a/DialogTools/RandomizationDlg.cpp +++ b/DialogTools/RandomizationDlg.cpp @@ -75,12 +75,12 @@ InferenceSettingsDlg::InferenceSettingsDlg(wxWindow* parent, wxFlexGridSizer* gbox = new wxFlexGridSizer(9,2,10,0); m_rdo_1 = new wxRadioButton(panel, wxID_ANY, _("Bonferroni bound:"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP); - m_txt_bo = new wxStaticText(panel, wxID_ANY, _(""), wxDefaultPosition, wxSize(150,-1)); + m_txt_bo = new wxStaticText(panel, wxID_ANY, "", wxDefaultPosition, wxSize(150,-1)); gbox->Add(m_rdo_1, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_txt_bo, 1, wxEXPAND); m_rdo_2 = new wxRadioButton(panel, wxID_ANY, _("False Discovery Rate:"), wxDefaultPosition, wxDefaultSize); - m_txt_fdr = new wxStaticText(panel, wxID_ANY, _(""), wxDefaultPosition, wxSize(150,-1)); + m_txt_fdr = new wxStaticText(panel, wxID_ANY, "", wxDefaultPosition, wxSize(150,-1)); gbox->Add(m_rdo_2, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_txt_fdr, 1, wxEXPAND); diff --git a/DialogTools/RangeSelectionDlg.cpp b/DialogTools/RangeSelectionDlg.cpp index 37168b897..6f2d9545d 100644 --- a/DialogTools/RangeSelectionDlg.cpp +++ b/DialogTools/RangeSelectionDlg.cpp @@ -51,7 +51,6 @@ BEGIN_EVENT_TABLE( RangeSelectionDlg, wxDialog ) EVT_BUTTON( XRCID("ID_SEL_RANGE_BUTTON"), RangeSelectionDlg::OnSelRangeClick ) EVT_BUTTON( XRCID("ID_SEL_UNDEF_BUTTON"), RangeSelectionDlg::OnSelUndefClick ) EVT_BUTTON( XRCID("ID_INVERT_SEL_BUTTON"), RangeSelectionDlg::OnInvertSelClick ) - //EVT_BUTTON( XRCID("ID_RANDOM_SEL_BUTTON"), RangeSelectionDlg::OnRandomSelClick ) EVT_BUTTON( XRCID("ID_CLEAR_SEL_BUTTON"), RangeSelectionDlg::OnClearSelClick ) EVT_BUTTON( XRCID("ID_ADD_NEIGHS_TO_SEL_BUTTON"), RangeSelectionDlg::OnAddNeighsToSelClick ) EVT_BUTTON( XRCID("ID_ADD_FIELD"), RangeSelectionDlg::OnAddField ) @@ -115,85 +114,59 @@ void RangeSelectionDlg::CreateControls() "IDD_RANGE_SELECTION_DLG"); m_field_choice = wxDynamicCast(FindWindow(XRCID("ID_FIELD_CHOICE")), wxChoice); - m_field_choice_tm = wxDynamicCast(FindWindow(XRCID("ID_FIELD_CHOICE_TM")), wxChoice); - m_min_text = wxDynamicCast(FindWindow(XRCID("ID_MIN_TEXT")), wxTextCtrl); m_min_text->Clear(); m_min_text->AppendText("0"); m_min_text->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); - m_field_static_txt = wxDynamicCast(FindWindow(XRCID("ID_FIELD_STATIC_TXT")), wxStaticText); - m_field2_static_txt = - wxDynamicCast(FindWindow(XRCID("ID_FIELD2_STATIC_TXT")), wxStaticText); - + m_field2_static_txt = wxDynamicCast(FindWindow(XRCID("ID_FIELD2_STATIC_TXT")), + wxStaticText); m_max_text = wxDynamicCast(FindWindow(XRCID("ID_MAX_TEXT")), wxTextCtrl); m_max_text->Clear(); m_max_text->AppendText("1"); m_max_text->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); - m_sel_range_button = wxDynamicCast(FindWindow(XRCID("ID_SEL_RANGE_BUTTON")), wxButton); m_sel_range_button->Enable(false); - m_sel_undef_button = wxDynamicCast(FindWindow(XRCID("ID_SEL_UNDEF_BUTTON")), wxButton); m_sel_undef_button->Enable(false); - m_clear_sel_button = wxDynamicCast( FindWindow(XRCID("ID_CLEAR_SEL_BUTTON")), wxButton); - m_invert_sel_button = wxDynamicCast( FindWindow(XRCID("ID_INVERT_SEL_BUTTON")), wxButton); - - //m_num_to_rand_sel_txt = wxDynamicCast(FindWindow(XRCID("ID_NUM_TO_RAND_SEL")), wxTextCtrl); - //m_num_to_rand_sel_txt->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); - // Select 10% of objects by default wxString num_to_sel; num_to_sel << (project->GetNumRecords() / 10); - //m_num_to_rand_sel_txt->SetValue(num_to_sel); - - //m_random_sel_button = wxDynamicCast(FindWindow(XRCID("ID_RANDOM_SEL_BUTTON")), wxButton); - - - m_add_neighs_to_sel_button = wxDynamicCast( - FindWindow(XRCID("ID_ADD_NEIGHS_TO_SEL_BUTTON")), wxButton); - + m_add_neighs_to_sel_button = wxDynamicCast(FindWindow(XRCID("ID_ADD_NEIGHS_TO_SEL_BUTTON")), + wxButton); m_weights_choice = wxDynamicCast(FindWindow(XRCID("ID_WEIGHTS")), wxChoice); - - m_save_field_choice = - wxDynamicCast(FindWindow(XRCID("ID_SAVE_FIELD_CHOICE")), wxChoice); - m_save_field_choice_tm = - wxDynamicCast(FindWindow(XRCID("ID_SAVE_FIELD_CHOICE_TM")), wxChoice); - + m_save_field_choice = wxDynamicCast(FindWindow(XRCID("ID_SAVE_FIELD_CHOICE")), + wxChoice); + m_save_field_choice_tm = wxDynamicCast(FindWindow(XRCID("ID_SAVE_FIELD_CHOICE_TM")), + wxChoice); m_sel_check_box = wxDynamicCast(FindWindow(XRCID("ID_SEL_CHECK_BOX")), - wxCheckBox); - + wxCheckBox); m_sel_val_text = wxDynamicCast(FindWindow(XRCID("ID_SEL_VAL_TEXT")), wxTextCtrl); m_sel_val_text->Clear(); m_sel_val_text->AppendText("1"); m_sel_val_text->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); - m_unsel_check_box = wxDynamicCast(FindWindow(XRCID("ID_UNSEL_CHECK_BOX")), - wxCheckBox); - + wxCheckBox); m_unsel_val_text = wxDynamicCast(FindWindow(XRCID("ID_UNSEL_VAL_TEXT")), wxTextCtrl); m_unsel_val_text->Clear(); m_unsel_val_text->AppendText("0"); m_unsel_val_text->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); - - m_apply_save_button = wxDynamicCast( - FindWindow(XRCID("ID_APPLY_SAVE_BUTTON")), wxButton); + m_apply_save_button = wxDynamicCast(FindWindow(XRCID("ID_APPLY_SAVE_BUTTON")), + wxButton); m_apply_save_button->Disable(); - - m_radio_newselect = XRCCTRL(*this, "IDC_RADIO_NEWSELECT", wxRadioButton); m_radio_subselect = XRCCTRL(*this, "IDC_RADIO_SUBSELECT", wxRadioButton); m_radio_appendselect = XRCCTRL(*this, "IDC_RADIO_APPENDSELECT", wxRadioButton); @@ -263,14 +236,12 @@ void RangeSelectionDlg::OnSelRangeClick( wxCommandEvent& event ) } } std::vector cur_sel(n); - - - double min_dval = 0; + double min_dval = 0, max_dval = 1; m_min_text->GetValue().ToDouble(&min_dval); - double max_dval = 1; m_max_text->GetValue().ToDouble(&max_dval); std::vector undefined; - table_int->GetColUndefined(mcol, f_tm, undefined); + table_int->GetColUndefined(mcol, f_tm, undefined); + wxString col_name = table_int->GetColName(mcol, f_tm), selection_lbl; if (table_int->GetColType(mcol) == GdaConst::long64_type) { wxInt64 min_ival = ceil(min_dval); wxInt64 max_ival = floor(max_dval); @@ -282,7 +253,8 @@ void RangeSelectionDlg::OnSelRangeClick( wxCommandEvent& event ) } else { cur_sel[i] = false; } - } + } + selection_lbl = wxString::Format("[%lld, %lld]", min_ival, max_ival); } else if (table_int->GetColType(mcol) == GdaConst::double_type) { std::vector vec; table_int->GetColData(mcol, f_tm, vec); @@ -292,7 +264,8 @@ void RangeSelectionDlg::OnSelRangeClick( wxCommandEvent& event ) } else { cur_sel[i] = false; } - } + } + selection_lbl = wxString::Format("[%f, %f]", min_dval, max_dval); } else { wxString msg("Selected field is should be numeric."); wxMessageDialog dlg (this, msg, _("Error"), wxOK | wxICON_ERROR); @@ -321,7 +294,11 @@ void RangeSelectionDlg::OnSelRangeClick( wxCommandEvent& event ) } } - if (update_flag) { + if (update_flag) { + std::map meta_data; + meta_data["original_variable"] = col_name; + meta_data["selection_range"] = selection_lbl; + hs.SetMetaData(meta_data); hs.SetEventType(HLStateInt::delta); hs.notifyObservers(); } @@ -451,20 +428,16 @@ void RangeSelectionDlg::OnSelUnselTextChange( wxCommandEvent& event ) void RangeSelectionDlg::OnApplySaveClick( wxCommandEvent& event ) { wxLogMessage("In RangeSelectionDlg::OnApplySaveClick()"); - // The Apply button is only enable when Selected / Unselected values - // are valid (only when checked), and at least one checkbox is - // selected. The Target Variable is not empty, but has not been - // checked for validity. - + // The Apply button is only enable when Selected / Unselected values + // are valid (only when checked), and at least one checkbox is + // selected. The Target Variable is not empty, but has not been + // checked for validity. int write_col = GetSaveColInt(); - TableState* ts = project->GetTableState(); wxString grp_nm = table_int->GetColName(write_col); if (!Project::CanModifyGrpAndShowMsgIfNot(ts, grp_nm)) return; - bool sel_checked = m_sel_check_box->GetValue() == 1; bool unsel_checked = m_unsel_check_box->GetValue() == 1; - double sel_c = 0; wxString sel_c_str = m_sel_val_text->GetValue(); if (sel_checked && !sel_c_str.IsEmpty()) { @@ -477,10 +450,11 @@ void RangeSelectionDlg::OnApplySaveClick( wxCommandEvent& event ) unsel_c_str.Trim(false); unsel_c_str.Trim(true); unsel_c_str.ToDouble(&unsel_c); } - - int sf_tm = GetSaveColTmInt(); - - std::vector& h = project->GetHighlightState()->GetHighlight(); + int sf_tm = GetSaveColTmInt(); + HighlightState* hl_state = project->GetHighlightState(); + std::vector& h = hl_state->GetHighlight(); + std::map meta_data = hl_state->GetMetaData(); + // write_col now refers to a valid field in grid base, so write out // results to that field. int obs = h.size(); @@ -510,7 +484,8 @@ void RangeSelectionDlg::OnApplySaveClick( wxCommandEvent& event ) } } table_int->SetColData(write_col, sf_tm, t); - table_int->SetColUndefined(write_col, sf_tm, undefined); + table_int->SetColUndefined(write_col, sf_tm, undefined); + } else if (table_int->GetColType(write_col) == GdaConst::double_type) { std::vector t(table_int->GetNumberRows()); table_int->GetColData(write_col, sf_tm, t); @@ -537,12 +512,21 @@ void RangeSelectionDlg::OnApplySaveClick( wxCommandEvent& event ) table_int->SetColUndefined(write_col, sf_tm, undefined); } else { wxString msg = _("Chosen field is not a numeric type. Please select a numeric type field."); - wxMessageDialog dlg(this, msg, _("Error"), wxOK | wxICON_ERROR ); dlg.ShowModal(); return; - } - + } + wxString col_nm = table_int->GetColName(write_col, sf_tm); + std::map::iterator it; + for (it = meta_data.begin(); it != meta_data.end(); ++it) { + wxString key = it->first; + wxString val = it->second; + table_int->AddMetaInfo(col_nm, key, val); + } + // clean meta_data in hl_state + std::map empty_meta_data; + hl_state->SetMetaData(empty_meta_data); + wxString msg = _("Values assigned to target field successfully."); wxMessageDialog dlg(this, msg, "Success", wxOK | wxICON_INFORMATION ); dlg.ShowModal(); @@ -696,8 +680,8 @@ void RangeSelectionDlg::CheckRangeButtonSettings() m_field_static_txt->SetLabelText(fn); m_field2_static_txt->SetLabelText(fn); } else { - m_field_static_txt->SetLabelText("choose a variable"); - m_field2_static_txt->SetLabelText("choose a variable"); + m_field_static_txt->SetLabelText(_("choose a variable")); + m_field2_static_txt->SetLabelText(_("choose a variable")); } /** Check that min and max range text is valid. If not valid, set diff --git a/DialogTools/RedcapDlg.cpp b/DialogTools/RedcapDlg.cpp index 1a4aaedcc..57c45f963 100644 --- a/DialogTools/RedcapDlg.cpp +++ b/DialogTools/RedcapDlg.cpp @@ -180,11 +180,18 @@ void RedcapDlg::CreateControls() wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:"), wxDefaultPosition, wxDefaultSize); m_textbox = new wxTextCtrl(panel, wxID_ANY, "CL", wxDefaultPosition, wxSize(158,-1)); + chk_save_mst = new wxCheckBox(panel, wxID_ANY, "Save Minimum Spanning Tree"); + + wxFlexGridSizer* gbox_out = new wxFlexGridSizer(2,2,5,0); + gbox_out->Add(st3, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox_out->Add(m_textbox, 1, wxEXPAND); + gbox_out->Add(new wxStaticText(panel, wxID_ANY, _("(Optional)")), + 0, wxALIGN_RIGHT | wxRIGHT | wxLEFT, 10); + gbox_out->Add(chk_save_mst, 1, wxEXPAND); + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Output:")); - hbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL); - hbox1->Add(m_textbox, 1, wxALIGN_CENTER_VERTICAL |wxLEFT, 10); - - + hbox1->Add(gbox_out, 1, wxEXPAND); + // Buttons wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, wxSize(70, 30)); @@ -420,16 +427,30 @@ void RedcapDlg::OnSaveTree(wxCommandEvent& event ) file.Create(new_txt); file.Open(new_txt); file.Clear(); - + wxString header; - header << "0 " << project->GetNumRecords() << " " << project->GetProjectTitle() << " " << id; - file.AddLine(header); - - + header << "0 " << project->GetNumRecords() << " "; + header << "\"" << project->GetProjectTitle() << "\" "; + header << id; + + vector > cluster_ids = redcap->GetRegions(); + map nid_cid; // node id -> cluster id + for (int c=0; cordered_edges.size(); i++) { wxString line; int from_idx = redcap->ordered_edges[i]->orig->id; int to_idx = redcap->ordered_edges[i]->dest->id; + + if (chk_save_mst->GetValue() == false) { + if (nid_cid[from_idx] != nid_cid[to_idx]) + continue; + } + double cost = redcap->ordered_edges[i]->length; wxString line1; line1 << ids[from_idx] << " " << ids[to_idx] << " " << cost; diff --git a/DialogTools/RedcapDlg.h b/DialogTools/RedcapDlg.h index e8241be55..124e7fc8d 100644 --- a/DialogTools/RedcapDlg.h +++ b/DialogTools/RedcapDlg.h @@ -73,6 +73,8 @@ class RedcapDlg : public AbstractClusterDlg wxButton* seedButton; wxButton* saveButton; + + wxCheckBox* chk_save_mst; SpanningTreeClustering::AbstractClusterFactory* redcap; GeoDaWeight* weights; diff --git a/DialogTools/SaveToTableDlg.cpp b/DialogTools/SaveToTableDlg.cpp index 074a0c09e..29972f855 100644 --- a/DialogTools/SaveToTableDlg.cpp +++ b/DialogTools/SaveToTableDlg.cpp @@ -265,10 +265,6 @@ void SaveToTableDlg::OnTimeChoice( wxCommandEvent& event ) void SaveToTableDlg::OnCheck( wxCommandEvent& event ) { - /* - if (!all_init) return; - UpdateOkButton(); - */ } void SaveToTableDlg::UpdateOkButton() @@ -377,9 +373,7 @@ void SaveToTableDlg::OnOkClick( wxCommandEvent& event ) if (is_check[i]) names.insert(s); } - for (int i=0, iend=data.size(); iGetValue(); int time=0; @@ -400,10 +394,8 @@ void SaveToTableDlg::OnOkClick( wxCommandEvent& event ) m_length_val = GdaConst::default_dbf_string_len; m_decimals_val = 0; } - col = table_int->InsertCol(data[i].type, field_name, col_insert_pos, time_steps, m_length_val, m_decimals_val); } - if (col > 0) { if (data[i].d_val) { table_int->SetColData(col, time, *data[i].d_val); diff --git a/DialogTools/SkaterDlg.cpp b/DialogTools/SkaterDlg.cpp index 6424dea1a..f520efd4b 100644 --- a/DialogTools/SkaterDlg.cpp +++ b/DialogTools/SkaterDlg.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -106,7 +107,7 @@ void SkaterDlg::CreateControls() // Min regions st_minregions = new wxStaticText(panel, wxID_ANY, _("Min Region Size:"), wxDefaultPosition, wxSize(128,-1)); - txt_minregions = new wxTextCtrl(panel, wxID_ANY, _(""), wxDefaultPosition, wxSize(200,-1)); + txt_minregions = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(200,-1)); txt_minregions->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); gbox->Add(st_minregions, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(txt_minregions, 1, wxEXPAND); @@ -143,14 +144,20 @@ void SkaterDlg::CreateControls() hbox->Add(gbox, 1, wxEXPAND); // Output - wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:"), + wxFlexGridSizer* gbox_out = new wxFlexGridSizer(2,2,5,0); + wxStaticText* st3 = new wxStaticText(panel, wxID_ANY, _("Save Cluster in Field:"), wxDefaultPosition, wxDefaultSize); m_textbox = new wxTextCtrl(panel, wxID_ANY, "CL", wxDefaultPosition, wxSize(158,-1)); + gbox_out->Add(st3, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox_out->Add(m_textbox, 1, wxEXPAND); + chk_save_mst = new wxCheckBox(panel, wxID_ANY, "Save Minimum Spanning Tree"); + gbox_out->Add(new wxStaticText(panel, wxID_ANY, _("(Optional)")), + 0, wxALIGN_RIGHT | wxRIGHT | wxLEFT, 10); + gbox_out->Add(chk_save_mst, 1, wxEXPAND); + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Output:")); - //wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); - hbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL); - hbox1->Add(m_textbox, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); - + hbox1->Add(gbox_out, 1, wxEXPAND); + // Buttons wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, wxSize(70, 30)); @@ -169,7 +176,7 @@ void SkaterDlg::CreateControls() vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); vbox->Add(hbox1, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); - + // Summary control wxBoxSizer *vbox1 = new wxBoxSizer(wxVERTICAL); wxNotebook* notebook = AddSimpleReportCtrls(panel); @@ -260,13 +267,28 @@ void SkaterDlg::OnSaveTree(wxCommandEvent& event ) file.Clear(); wxString header; - header << "0 " << project->GetNumRecords() << " " << project->GetProjectTitle() << " " << id; + header << "0 " << project->GetNumRecords() << " "; + header << "\"" << project->GetProjectTitle() << "\" "; + header << id; file.AddLine(header); - + vector > cluster_ids = skater->GetRegions(); + map nid_cid; // node id -> cluster id + for (int c=0; cordered_edges.size(); i++) { int from_idx = skater->ordered_edges[i]->orig->id; int to_idx = skater->ordered_edges[i]->dest->id; + + if (chk_save_mst->GetValue() == false) { + if (nid_cid[from_idx] != nid_cid[to_idx]) + continue; + } + double cost = skater->ordered_edges[i]->length; wxString line1; line1 << ids[from_idx] << " " << ids[to_idx] << " " << cost; diff --git a/DialogTools/SkaterDlg.h b/DialogTools/SkaterDlg.h index 279299b0e..42c4c90a7 100644 --- a/DialogTools/SkaterDlg.h +++ b/DialogTools/SkaterDlg.h @@ -70,6 +70,8 @@ class SkaterDlg : public AbstractClusterDlg wxButton* seedButton; wxButton* saveButton; + + wxCheckBox* chk_save_mst; SpanningTreeClustering::Skater* skater; diff --git a/DialogTools/SpatialJoinDlg.cpp b/DialogTools/SpatialJoinDlg.cpp index f1abb86f2..1dc5b0e73 100644 --- a/DialogTools/SpatialJoinDlg.cpp +++ b/DialogTools/SpatialJoinDlg.cpp @@ -23,22 +23,40 @@ using namespace std; SpatialJoinWorker::SpatialJoinWorker(BackgroundMapLayer* _ml, Project* _project) { + duplicate_count = false; ml = _ml; project = _project; - spatial_counts.resize(project->GetNumRecords()); - + int n_joins = project->GetNumRecords(); + spatial_counts.resize(n_joins); + spatial_joins.resize(n_joins); + join_ids.resize(n_joins); // always use points to create a rtree, since in normal case // the number of points are larger than the number of polygons } SpatialJoinWorker::~SpatialJoinWorker() { - + +} + +bool SpatialJoinWorker::IsDuplicateCount() +{ + return duplicate_count; +} + +bool SpatialJoinWorker::JoinVariable() +{ + return join_variable; +} + +vector SpatialJoinWorker::GetJoinResults() +{ + return spatial_joins; } vector SpatialJoinWorker::GetResults() { - return spatial_counts; + return spatial_counts; } void SpatialJoinWorker::Run() @@ -48,7 +66,7 @@ void SpatialJoinWorker::Run() int quotient = initial / nCPUs; int remainder = initial % nCPUs; int tot_threads = (quotient > 0) ? nCPUs : remainder; - + boost::thread_group threadPool; for (int i=0; iGetNumRecords(); + if (is_spatial_assign == false) { + wxInt64 sum = 0; + for (size_t i=0; i ml->GetNumRecords()) { + duplicate_count = true; + } + } + + // join variable if needed + if (join_variable) { + int n_values = join_values.size(); + for (size_t i=0; i vals(cnt, 0); + for (size_t j=0; jGetDoubleColumnData(join_variable_nm, join_values); + num_polygons = project->GetNumRecords(); - + // using selected layer (points) to create rtree int n = ml->shapes.size(); double x, y; @@ -98,18 +164,29 @@ void CountPointsInPolygon::sub_run(int start, int end) OGRGeometry* ogr_poly = ogr_layer->GetGeometry(i); for (int j=0; j(); double y = v.first.get<1>(); OGRPoint ogr_pt(x, y); if (ogr_pt.Within(ogr_poly)) { spatial_counts[i] += 1; + if (join_variable) { + mutex.lock(); + join_ids[i].push_back(pt_idx); + mutex.unlock(); + } } } } } -AssignPolygonToPoint::AssignPolygonToPoint(BackgroundMapLayer* _ml, Project* _project, vector& _poly_ids) + + + +AssignPolygonToPoint::AssignPolygonToPoint(BackgroundMapLayer* _ml, + Project* _project, vector& _poly_ids) : SpatialJoinWorker(_ml, _project) { + is_spatial_assign = true; poly_ids = _poly_ids; num_polygons = ml->GetNumRecords(); // using current map(points) to create rtree @@ -134,7 +211,7 @@ void AssignPolygonToPoint::sub_run(int start, int end) // create a box, tl, br OGREnvelope box; ogr_poly->getEnvelope(&box); - + box_2d b(pt_2d(box.MinX, box.MinY), pt_2d(box.MaxX, box.MaxY)); // query points in this box std::vector q; @@ -153,58 +230,242 @@ void AssignPolygonToPoint::sub_run(int start, int end) } +CountLinesInPolygon::CountLinesInPolygon(BackgroundMapLayer* _ml, + Project* _project, + wxString join_variable_nm, + Operation _op) +: SpatialJoinWorker(_ml, _project) +{ + is_spatial_assign = false; + join_operation = _op; + join_variable = _ml->GetDoubleColumnData(join_variable_nm, join_values); + + num_polygons = project->GetNumRecords(); + + // using selected layer (lines) to create rtree + int n = ml->shapes.size(); + double x, y; + for (int i=0; igeoms[i]; + OGREnvelope bbox; + geom->getEnvelope(&bbox); + pt_2d ll(bbox.MinX, bbox.MinY); + pt_2d ur(bbox.MaxX, bbox.MaxY); + box_2d b(ll, ur); + rtree.insert(std::make_pair(b, i)); + } +} + +void CountLinesInPolygon::sub_run(int start, int end) +{ + Shapefile::Main& main_data = project->main_data; + OGRLayerProxy* ogr_layer = project->layer_proxy; + Shapefile::PolygonContents* pc; + for (int i=start; i<=end; i++) { + pc = (Shapefile::PolygonContents*)main_data.records[i].contents_p; + // create a box, tl, br + box_2d b(pt_2d(pc->box[0], pc->box[1]), + pt_2d(pc->box[2], pc->box[3])); + // query boxes in this box + std::vector q; + rtree.query(bgi::within(b), std::back_inserter(q)); + OGRGeometry* ogr_poly = ogr_layer->GetGeometry(i); + for (int j=0; jgeoms[row_idx]; + if (geom->Intersects(ogr_poly)) { + spatial_counts[i] += 1; + if (join_variable) { + mutex.lock(); + join_ids[i].push_back(row_idx); + mutex.unlock(); + } + } + } + } +} + +AssignPolygonToLine::AssignPolygonToLine(BackgroundMapLayer* _ml, + Project* _project, + vector& _poly_ids) +: SpatialJoinWorker(_ml, _project) +{ + is_spatial_assign = true; + poly_ids = _poly_ids; + num_polygons = ml->GetNumRecords(); + // using current map(lines) to create rtree + Shapefile::Main& main_data = project->main_data; + Shapefile::PolyLineContents* pc; + int n = project->GetNumRecords(); + std::vector box; + for (int i=0; ibox; + pt_2d ll(box[0], box[1]); + pt_2d ur(box[2], box[3]); + box_2d b(ll, ur); + rtree.insert(std::make_pair(b, i)); + spatial_counts[i] = -1; + } +} + +void AssignPolygonToLine::sub_run(int start, int end) +{ + // for every polygon in sub-layer + for (int i=start; i<=end; i++) { + OGRGeometry* ogr_poly = ml->geoms[i]; + // create a box, tl, br + OGREnvelope box; + ogr_poly->getEnvelope(&box); + box_2d b(pt_2d(box.MinX, box.MinY), pt_2d(box.MaxX, box.MaxY)); + // query lines in this box + std::vector q; + rtree.query(bgi::intersects(b), std::back_inserter(q)); + for (int j=0; jlayer_proxy->GetGeometry(row_idx); + if (geom->Intersects(ogr_poly)) { + spatial_counts[row_idx] = poly_ids[i]; + } + } + } +} + + + +CountPolygonInPolygon::CountPolygonInPolygon(BackgroundMapLayer* _ml, + Project* _project, + wxString join_variable_nm, + Operation _op) +: SpatialJoinWorker(_ml, _project) +{ + is_spatial_assign = false; + join_operation = _op; + join_variable = _ml->GetDoubleColumnData(join_variable_nm, join_values); + + num_polygons = project->GetNumRecords(); + + // using selected layer (polygons) to create rtree + int n = ml->shapes.size(); + double x, y; + for (int i=0; igeoms[i]; + OGREnvelope bbox; + geom->getEnvelope(&bbox); + pt_2d ll(bbox.MinX, bbox.MinY); + pt_2d ur(bbox.MaxX, bbox.MaxY); + box_2d b(ll, ur); + rtree.insert(std::make_pair(b, i)); + } +} + +void CountPolygonInPolygon::sub_run(int start, int end) +{ + Shapefile::Main& main_data = project->main_data; + OGRLayerProxy* ogr_layer = project->layer_proxy; + Shapefile::PolygonContents* pc; + for (int i=start; i<=end; i++) { + pc = (Shapefile::PolygonContents*)main_data.records[i].contents_p; + // create a box, tl, br + box_2d b(pt_2d(pc->box[0], pc->box[1]), + pt_2d(pc->box[2], pc->box[3])); + // query boxes in this box + std::vector q; + rtree.query(bgi::intersects(b), std::back_inserter(q)); + OGRGeometry* ogr_poly = ogr_layer->GetGeometry(i); + for (int j=0; jgeoms[row_idx]; + if (geom->Intersects(ogr_poly)) { + spatial_counts[i] += 1; + if (join_variable) { + mutex.lock(); + join_ids[i].push_back(row_idx); + mutex.unlock(); + } + } + } + } +} + SpatialJoinDlg::SpatialJoinDlg(wxWindow* parent, Project* _project) : wxDialog(parent, wxID_ANY, "Spatial Join", wxDefaultPosition, wxSize(350, 250)) { project = _project; panel = new wxPanel(this, -1); - - wxString info = _("Please select a map layer to apply spatial join to current map (%s):"); + + wxString info = _("Please select a map layer to apply " + "spatial join to current map (%s):"); info = wxString::Format(info, project->GetProjectTitle()); wxStaticText* st = new wxStaticText(panel, wxID_ANY, info); - + map_list = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(160,-1)); - field_st = new wxStaticText(panel, wxID_ANY, "Select ID Variable (Optional)"); + field_st = new wxStaticText(panel, wxID_ANY, _("Select ID Variable (Optional)")); field_list = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(100,-1)); wxBoxSizer* mbox = new wxBoxSizer(wxHORIZONTAL); mbox->Add(map_list, 0, wxALIGN_CENTER | wxALL, 5); mbox->Add(field_st, 0, wxALIGN_CENTER | wxALL, 5); mbox->Add(field_list, 0, wxALIGN_CENTER | wxALL, 5); - + + join_var_st = new wxStaticText(panel, wxID_ANY, _("Join Variable:")); + join_var_list = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(160,-1)); + wxBoxSizer* join_box = new wxBoxSizer(wxHORIZONTAL); + join_box->Add(join_var_st, 0, wxALIGN_LEFT | wxALL, 0); + join_box->Add(join_var_list, 0, wxALIGN_LEFT | wxLEFT, 12); + + join_op_st = new wxStaticText(panel, wxID_ANY, _("Join Operation:")); + join_op_list = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(160,-1)); + wxBoxSizer* join_op_box = new wxBoxSizer(wxHORIZONTAL); + join_op_box->Add(join_op_st, 0, wxALIGN_LEFT | wxTOP, 5); + join_op_box->Add(join_op_list, 0, wxALIGN_LEFT | wxTOP, 5); + cbox = new wxBoxSizer(wxVERTICAL); cbox->Add(st, 0, wxALIGN_CENTER | wxALL, 15); cbox->Add(mbox, 0, wxALIGN_CENTER | wxALL, 10); + cbox->AddSpacer(10); + cbox->Add(join_box, 0, wxALIGN_LEFT | wxLEFT, 10); + cbox->Add(join_op_box, 0, wxALIGN_LEFT | wxLEFT, 10); panel->SetSizerAndFit(cbox); - - wxButton* ok_btn = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); - wxButton* cancel_btn = new wxButton(this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); - + + wxButton* ok_btn = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, + wxDefaultSize, wxBU_EXACTFIT); + wxButton* cancel_btn = new wxButton(this, wxID_CANCEL, _("Close"), + wxDefaultPosition, wxDefaultSize, + wxBU_EXACTFIT); + wxBoxSizer* hbox = new wxBoxSizer(wxHORIZONTAL); hbox->Add(ok_btn, 0, wxALIGN_CENTER | wxALL, 5); hbox->Add(cancel_btn, 0, wxALIGN_CENTER | wxALL, 5); - + vbox = new wxBoxSizer(wxVERTICAL); vbox->Add(panel, 1, wxALL, 15); vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); - + SetSizer(vbox); vbox->Fit(this); - + Center(); - + map_list->Bind(wxEVT_CHOICE, &SpatialJoinDlg::OnLayerSelect, this); ok_btn->Bind(wxEVT_BUTTON, &SpatialJoinDlg::OnOK, this); - + join_var_list->Bind(wxEVT_CHOICE, &SpatialJoinDlg::OnJoinVariableSel, this); + InitMapList(); - field_st->Disable(); - field_list->Disable(); + //field_st->Disable(); + //field_list->Disable(); + + wxCommandEvent e; + OnLayerSelect(e); } void SpatialJoinDlg::InitMapList() { map_list->Clear(); map::iterator it; - + for (it=project->bg_maps.begin(); it!=project->bg_maps.end(); it++) { wxString name = it->first; map_list->Append(name); @@ -225,7 +486,7 @@ void SpatialJoinDlg::UpdateFieldList(wxString name) BackgroundMapLayer* ml = project->GetMapLayer(name); if (ml) { if (Shapefile::POLYGON == ml->GetShapeType() && - project->IsPointTypeData()) { + project->GetShapeType() != Shapefile::POLYGON ) { // assign polygon to point field_list->Clear(); vector field_names = ml->GetIntegerFieldNames(); @@ -233,17 +494,52 @@ void SpatialJoinDlg::UpdateFieldList(wxString name) for (int i=0; iAppend(field_names[i]); } - field_list->Enable(); - field_st->Enable(); - + field_list->Show(); + field_st->Show(); + + join_var_list->Hide(); + join_var_st->Hide(); + join_op_list->Hide(); + join_op_st->Hide(); } else { field_list->Clear(); - field_list->Disable(); - field_st->Disable(); + field_list->Hide(); + field_st->Hide(); + + join_var_list->Show(); + join_var_st->Show(); + join_op_list->Show(); + join_op_st->Show(); + // spatial join + join_var_list->Clear(); + vector field_names = ml->GetNumericFieldNames(); + join_var_list->Append("(Spatial Count)"); + for (int i=0; iAppend(field_names[i]); + } + join_var_list->SetSelection(0); + join_op_list->Clear(); + join_op_list->Append(""); + join_op_list->Append("Mean"); + join_op_list->Append("Median"); + join_op_list->Append("Standard Deviation"); + join_op_list->Append("Sum"); + join_op_list->Disable(); } } } +void SpatialJoinDlg::OnJoinVariableSel(wxCommandEvent& e) +{ + int sel = join_var_list->GetSelection(); + if (sel == 0) { + join_op_list->SetSelection(0); + join_op_list->Disable(); + } else { + join_op_list->Enable(); + } +} + void SpatialJoinDlg::OnLayerSelect(wxCommandEvent& e) { int layer_idx = map_list->GetSelection(); @@ -263,58 +559,134 @@ void SpatialJoinDlg::OnOK(wxCommandEvent& e) wxString layer_name = map_list->GetString(layer_idx); BackgroundMapLayer* ml = NULL; ml = project->GetMapLayer(layer_name); - + if (ml) { int n = ml->GetNumRecords(); if (project->IsPointTypeData() && ml->GetShapeType() == Shapefile::POINT_TYP) { - wxMessageDialog dlg (this, _("Spatial Join can not be applied on two points layers. Please select another layer."), _("Warning"), wxOK | wxICON_INFORMATION); + wxMessageDialog dlg (this, _("Spatial Join can not be applied on " + "two points layers. Please select " + "another layer."), + _("Warning"), wxOK | wxICON_INFORMATION); dlg.ShowModal(); return; } wxString label = "Spatial Count"; wxString field_name = "SC"; - + SpatialJoinWorker* sj; - if (project->IsPointTypeData()) { + if (project->GetShapeType() == Shapefile::POINT_TYP || + project->GetShapeType() == Shapefile::POLY_LINE) { + // working layer is Points/Lines vector poly_ids; for (int i=0; iGetSelection(); if (field_idx > 0) { wxString field_name = field_list->GetString(field_idx); bool success = ml->GetIntegerColumnData(field_name, poly_ids); if ( !success || poly_ids.size() != n) { - wxMessageDialog dlg (this, _("Select field is not integer type. Default record order will be used instead."), _("Warning"), wxOK | wxICON_INFORMATION); + wxMessageDialog dlg (this, _("Select field is not integer " + "type. Default record order " + "will be used instead."), + _("Warning"), wxOK | wxICON_INFORMATION); dlg.ShowModal(); poly_ids.clear(); } } - sj = new AssignPolygonToPoint(ml, project, poly_ids); + if (project->GetShapeType() == Shapefile::POINT_TYP) { + sj = new AssignPolygonToPoint(ml, project, poly_ids); + } else if (project->GetShapeType() == Shapefile::POLY_LINE) { + sj = new AssignPolygonToLine(ml, project, poly_ids); + } label = "Spatial Assign"; field_name = "SA"; + } else { - sj = new CountPointsInPolygon(ml, project); + // working layer is Polygon: spatial count + int join_list_sel = join_var_list->GetSelection(); + bool join_variable = join_list_sel > 0; + if (join_variable) { + label = "Spatial Join"; + field_name = "SJ"; + if (join_op_list->GetSelection() == 0) { + wxMessageDialog dlg (this, _("Please select Join Operation with Join Variable."), + _("Warning"), wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + return; + } + } + wxString var_nm = ""; + SpatialJoinWorker::Operation join_op = SpatialJoinWorker::NONE; + if (join_variable) { + int op_sel = join_op_list->GetSelection(); + if (op_sel == 1) { + join_op = SpatialJoinWorker::MEAN; + } else if (op_sel == 2) { + join_op = SpatialJoinWorker::MEDIAN; + } else if (op_sel == 3) { + join_op = SpatialJoinWorker::STD; + } else if (op_sel == 4) { + join_op = SpatialJoinWorker::SUM; + } + if (op_sel >0) var_nm = join_var_list->GetString(join_list_sel); + } + if (ml->GetShapeType() == Shapefile::POINT_TYP) { + sj = new CountPointsInPolygon(ml, project, var_nm, join_op); + } else if (ml->GetShapeType() == Shapefile::POLY_LINE) { + sj = new CountLinesInPolygon(ml, project, var_nm, join_op); + } else if (ml->GetShapeType() == Shapefile::POLYGON) { + sj = new CountPolygonInPolygon(ml, project, var_nm, join_op); + } else { + wxMessageDialog dlg (this, _("Spatial Join can not be applied on " + "unknonwn layers. Please select " + "another layer."), + _("Warning"), wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + return; + } } sj->Run(); - + wxString dlg_title = _("Save Results to Table: ") + label; - vector spatial_counts = sj->GetResults(); - // save results - int new_col = 1; - std::vector new_data(new_col); - vector undefs(project->GetNumRecords(), false); - new_data[0].l_val = &spatial_counts; - new_data[0].label = label; - new_data[0].field_default = field_name; - new_data[0].type = GdaConst::long64_type; - new_data[0].undefined = &undefs; - SaveToTableDlg dlg(project, this, new_data, dlg_title, - wxDefaultPosition, wxSize(400,400)); - dlg.ShowModal(); - + + if (sj->IsDuplicateCount()) { + wxMessageDialog dlg (this, _("There are spatial objects being counted more than once. Please check the results."), + _("Warning"), wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + } + + if (sj->JoinVariable()) { + // Spatial Join with variable + vector spatial_joins = sj->GetJoinResults(); + int new_col = 1; + std::vector new_data(new_col); + vector undefs(project->GetNumRecords(), false); + new_data[0].d_val = &spatial_joins; + new_data[0].label = label; + new_data[0].field_default = field_name; + new_data[0].type = GdaConst::double_type; + new_data[0].undefined = &undefs; + SaveToTableDlg dlg(project, this, new_data, dlg_title, + wxDefaultPosition, wxSize(400,400)); + dlg.ShowModal(); + } else { + // Spatial count or Spatial assigning + vector spatial_counts = sj->GetResults(); + int new_col = 1; + std::vector new_data(new_col); + vector undefs(project->GetNumRecords(), false); + new_data[0].l_val = &spatial_counts; + new_data[0].label = label; + new_data[0].field_default = field_name; + new_data[0].type = GdaConst::long64_type; + new_data[0].undefined = &undefs; + SaveToTableDlg dlg(project, this, new_data, dlg_title, + wxDefaultPosition, wxSize(400,400)); + dlg.ShowModal(); + } delete sj; EndDialog(wxID_OK); } diff --git a/DialogTools/SpatialJoinDlg.h b/DialogTools/SpatialJoinDlg.h index 170b0673e..1ca08dba8 100644 --- a/DialogTools/SpatialJoinDlg.h +++ b/DialogTools/SpatialJoinDlg.h @@ -8,6 +8,7 @@ #ifndef SpatialJoinDlg_hpp #define SpatialJoinDlg_hpp +#include #include #include #include "../SpatialIndTypes.h" @@ -19,58 +20,114 @@ class MapLayerStateObserver; class SpatialJoinWorker { -protected: - rtree_pt_2d_t rtree; - vector spatial_counts; - Project* project; - BackgroundMapLayer* ml; - int num_polygons; - public: + enum Operation {NONE, MEAN, MEDIAN, STD, SUM}; SpatialJoinWorker(BackgroundMapLayer* ml, Project* project); virtual ~SpatialJoinWorker(); - + + bool IsDuplicateCount(); void Run(); void points_in_polygons(int start, int end); void polygon_at_point(int start, int end); + bool JoinVariable(); vector GetResults(); - + vector GetJoinResults(); virtual void sub_run(int start, int end) = 0; + +protected: + Project* project; + BackgroundMapLayer* ml; + int num_polygons; + boost::mutex mutex; + + bool is_spatial_assign; + bool duplicate_count; + + // results + vector spatial_counts; + vector spatial_joins; + + // for join variable + bool join_variable; + std::vector join_values; + Operation join_operation; + std::vector > join_ids; }; class CountPointsInPolygon : public SpatialJoinWorker { public: - CountPointsInPolygon(BackgroundMapLayer* ml, Project* project); + CountPointsInPolygon(BackgroundMapLayer* ml, Project* project, + wxString join_variable_nm, Operation op); + virtual void sub_run(int start, int end); +protected: + rtree_pt_2d_t rtree; +}; + +class CountLinesInPolygon : public SpatialJoinWorker +{ +public: + CountLinesInPolygon(BackgroundMapLayer* ml, Project* project, + wxString join_variable_nm, Operation op); + virtual void sub_run(int start, int end); +protected: + rtree_box_2d_t rtree; +}; + +class CountPolygonInPolygon : public SpatialJoinWorker +{ +protected: + rtree_box_2d_t rtree; +public: + CountPolygonInPolygon(BackgroundMapLayer* ml, Project* project, + wxString join_variable_nm, Operation op); virtual void sub_run(int start, int end); }; class AssignPolygonToPoint : public SpatialJoinWorker { +protected: vector poly_ids; + rtree_pt_2d_t rtree; public: AssignPolygonToPoint(BackgroundMapLayer* ml, Project* project, vector& poly_ids); virtual void sub_run(int start, int end); }; +class AssignPolygonToLine : public SpatialJoinWorker +{ +protected: + vector poly_ids; + rtree_box_2d_t rtree; +public: + AssignPolygonToLine(BackgroundMapLayer* ml, Project* project, vector& poly_ids); + virtual void sub_run(int start, int end); +}; + + + class SpatialJoinDlg : public wxDialog { Project* project; wxChoice* map_list; + wxChoice* join_var_list; + wxChoice* join_op_list; wxChoice* field_list; wxStaticText* field_st; + wxStaticText* join_var_st; + wxStaticText* join_op_st; wxBoxSizer* vbox; wxBoxSizer* cbox; wxPanel* panel; void UpdateFieldList(wxString name); - + public: SpatialJoinDlg(wxWindow* parent, Project* project); void OnOK(wxCommandEvent& e); void OnLayerSelect(wxCommandEvent& e); - + void OnJoinVariableSel(wxCommandEvent& e); void InitMapList(); }; diff --git a/DialogTools/VarGroupingEditorDlg.cpp b/DialogTools/VarGroupingEditorDlg.cpp index 37885d565..5679ca7af 100644 --- a/DialogTools/VarGroupingEditorDlg.cpp +++ b/DialogTools/VarGroupingEditorDlg.cpp @@ -481,8 +481,9 @@ void VarGroupingEditorDlg::OnCreateGrpClick( wxCommandEvent& event ) // check that new field name is valid wxString grp_nm = new_group_name_txt_ctrl->GetValue(); grp_nm.Trim(true); - grp_nm.Trim(false); - bool case_sensitive = project->IsFieldCaseSensitive(); + grp_nm.Trim(false); + // make sure no duplicated group when adding a new group + bool case_sensitive = false; if (!table_int->IsValidGroupName(grp_nm) || table_int->DoesNameExist(grp_nm, case_sensitive)) { wxString m; diff --git a/DialogTools/VariableSettingsDlg.cpp b/DialogTools/VariableSettingsDlg.cpp index b6e148e84..a394e97d1 100644 --- a/DialogTools/VariableSettingsDlg.cpp +++ b/DialogTools/VariableSettingsDlg.cpp @@ -129,7 +129,7 @@ void DiffMoranVarSettingDlg::CreateControls() wxStaticText *st3 = new wxStaticText (panel, wxID_ANY, _("Weights"), wxDefaultPosition, wxSize(70,-1)); - wxComboBox* box3 = new wxComboBox(panel, wxID_ANY, _(""), wxDefaultPosition, + wxComboBox* box3 = new wxComboBox(panel, wxID_ANY, "", wxDefaultPosition, wxSize(160,-1), 0, NULL, wxCB_READONLY); hbox1->Add(st3, 0, wxALIGN_CENTER | wxLEFT| wxTOP | wxBOTTOM, 10); diff --git a/DialogTools/WeightsManDlg.cpp b/DialogTools/WeightsManDlg.cpp index e8f11f7bb..551b5ebd9 100644 --- a/DialogTools/WeightsManDlg.cpp +++ b/DialogTools/WeightsManDlg.cpp @@ -511,7 +511,7 @@ void WeightsManFrame::OnLoadBtn(wxCommandEvent& ev) return; } ids.push_back(id); - long last = ids.size()-1; + long last = GetIdCount() - 1; w_list->InsertItem(last, wxEmptyString); w_list->SetItem(last, TITLE_COL, w_man_int->GetTitle(id)); w_man_int->MakeDefault(id); @@ -521,6 +521,17 @@ void WeightsManFrame::OnLoadBtn(wxCommandEvent& ev) suspend_w_man_state_updates = false; } +int WeightsManFrame::GetIdCount() +{ + int cnt = 0; + for (size_t i=0; iIsInternalUse(ids[i]) == false) { + cnt += 1; + } + } + return cnt; +} + void WeightsManFrame::OnRemoveBtn(wxCommandEvent& ev) { wxLogMessage("Entering WeightsManFrame::OnRemoveBtn"); @@ -564,20 +575,23 @@ void WeightsManFrame::update(WeightsManState* o) return; } boost::uuids::uuid id = o->GetWeightsId(); + if (w_man_int->IsInternalUse(id)) { + return; + } + if (o->GetEventType() == WeightsManState::add_evt) { ids.push_back(id); - if (!ids.size()-1 == w_list->GetItemCount()) { - } - long x = w_list->InsertItem(ids.size(), wxEmptyString); - if (x == -1) { - } else { + long x = w_list->InsertItem(GetIdCount(), wxEmptyString); + if (x >= 0) { w_list->SetItem(x, TITLE_COL, w_man_int->GetTitle(id)); } HighlightId(id); Refresh(); + } else if (o->GetEventType() == WeightsManState::remove_evt) { std::vector new_ids; for (size_t i=0; iIsInternalUse(id)) continue; if (ids[i] == id) { w_list->DeleteItem(i); } else { @@ -585,10 +599,12 @@ void WeightsManFrame::update(WeightsManState* o) } } ids = new_ids; - if (ids.size() > 0) HighlightId(ids[0]); + if (GetIdCount() > 0) HighlightId(ids[0]); SelectId(GetHighlightId()); + } else if (o->GetEventType() == WeightsManState::name_change_evt) { for (size_t i=0; iIsInternalUse(id)) continue; if (ids[i] == id) { // no need to change default w_list->SetItem(i, TITLE_COL, w_man_int->GetTitle(ids[i])); @@ -653,19 +669,21 @@ void WeightsManFrame::InitWeightsList() w_man_int->GetIds(ids); boost::uuids::uuid def_id = w_man_int->GetDefault(); for (size_t i=0; iInsertItem(i, wxEmptyString); - w_list->SetItem(i, TITLE_COL, w_man_int->GetTitle(ids[i])); - if (ids[i] == def_id) { - w_list->SetItemState(i, wxLIST_STATE_SELECTED, - wxLIST_STATE_SELECTED); - } + if (w_man_int->IsInternalUse(ids[i]) == false) { + w_list->InsertItem(i, wxEmptyString); + w_list->SetItem(i, TITLE_COL, w_man_int->GetTitle(ids[i])); + if (ids[i] == def_id) { + w_list->SetItemState(i, wxLIST_STATE_SELECTED, + wxLIST_STATE_SELECTED); + } + } } } void WeightsManFrame::SetDetailsForId(boost::uuids::uuid id) { wxLogMessage("In WeightsManFrame::SetDetailsForItem"); - if (id.is_nil()) { + if (id.is_nil() || w_man_int->IsInternalUse(id)) { SetDetailsWin(std::vector(0), std::vector(0)); return; } @@ -903,6 +921,7 @@ void WeightsManFrame::SelectId(boost::uuids::uuid id) void WeightsManFrame::HighlightId(boost::uuids::uuid id) { for (size_t i=0; iIsInternalUse(ids[i])) continue; if (ids[i] == id) { w_list->SetItemState(i, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); diff --git a/DialogTools/WeightsManDlg.h b/DialogTools/WeightsManDlg.h index a58c2513d..3c9670d9b 100644 --- a/DialogTools/WeightsManDlg.h +++ b/DialogTools/WeightsManDlg.h @@ -84,6 +84,7 @@ class WeightsManFrame : public TemplateFrame, public WeightsManStateObserver void OnSelectIsolates(wxCommandEvent& event); protected: + int GetIdCount(); void InitWeightsList(); void SetDetailsForId(boost::uuids::uuid id); void SetDetailsWin(const std::vector& row_title, diff --git a/Explore/3DPlotView.cpp b/Explore/3DPlotView.cpp index 7494d171e..44f053c27 100644 --- a/Explore/3DPlotView.cpp +++ b/Explore/3DPlotView.cpp @@ -65,7 +65,7 @@ scaled_d(v_info.size()), c3d_plot_frame(t_frame) { wxLogMessage("Open C3DPlotCanvas."); - + hs = highlight_state->GetHighlight(); m_context = new wxGLContext(this); selectable_fill_color = GdaConst::three_d_plot_default_point_colour; highlight_color = GdaConst::three_d_plot_default_highlight_colour; @@ -463,8 +463,9 @@ void C3DPlotCanvas::UpdateSelect() if (selection_changed) { highlight_state->SetEventType(HLStateInt::delta); - highlight_state->notifyObservers(); + highlight_state->notifyObservers(this); } + this->hs = hs; // update local hs for rendering } void C3DPlotCanvas::SelectByRect() @@ -579,8 +580,9 @@ void C3DPlotCanvas::SelectByRect() } if (selection_changed) { highlight_state->SetEventType(HLStateInt::delta); - highlight_state->notifyObservers(); + highlight_state->notifyObservers(this); } + this->hs = hs; // update local hs for rendering } void C3DPlotCanvas::InitGL(void) @@ -645,8 +647,6 @@ void C3DPlotCanvas::SetCanvasBackgroundColor(wxColour color) void C3DPlotCanvas::RenderScene() { - std::vector& hs = highlight_state->GetHighlight(); - int xt = var_info[0].time; int yt = var_info[1].time; int zt = var_info[2].time; @@ -986,9 +986,6 @@ void C3DPlotCanvas::TimeChange() } } SetCurrentTmStep(ref_time - ref_time_min); - - //invalidateBms(); - //PopulateCanvas(); Refresh(); } @@ -1016,8 +1013,6 @@ void C3DPlotCanvas::VarInfoAttributeChange() num_time_vals = (var_info[ref_var_index].time_max - var_info[ref_var_index].time_min) + 1; } - - //GdaVarTools::PrintVarInfoVector(var_info); } void C3DPlotCanvas::UpdateScaledData() @@ -1062,16 +1057,8 @@ void C3DPlotCanvas::TimeSyncVariableToggle(int var_index) that its state has changed. */ void C3DPlotCanvas::update(HLStateInt* o) { - HLStateInt::EventType type = highlight_state->GetEventType(); - if (type == HLStateInt::delta) { - - Refresh(); - } else { - // type == HLStateInt::unhighlight_all - // type == HLStateInt::invert - - Refresh(); - } + hs = highlight_state->GetHighlight(); + Refresh(); } diff --git a/Explore/3DPlotView.h b/Explore/3DPlotView.h index 5fa1c2d1e..625a6a813 100644 --- a/Explore/3DPlotView.h +++ b/Explore/3DPlotView.h @@ -72,7 +72,7 @@ class C3DPlotCanvas: public wxGLCanvas, public HighlightStateObserver void UpdateSelect(); void SelectByRect(); void InitGL(void); - + bool isInit; float m_ClearColorBlue; @@ -122,7 +122,7 @@ class C3DPlotCanvas: public wxGLCanvas, public HighlightStateObserver std::vector data; std::vector data_undef; std::vector all_undefs; - + std::vector hs; std::vector scaled_d; std::vector< std::vector > data_stats; std::vector var_min; // min over time diff --git a/Explore/Basemap.cpp b/Explore/Basemap.cpp index c9ff6b7b0..1d908967a 100644 --- a/Explore/Basemap.cpp +++ b/Explore/Basemap.cpp @@ -214,7 +214,7 @@ Basemap::~Basemap() { void Basemap::CleanCache() { wxString filename; - filename << cachePath << "basemap_cache"<< separator(); + filename << cachePath << separator(); wxDir dir(filename); if (dir.IsOpened() ) { wxString file; @@ -610,6 +610,7 @@ void Basemap::_GetTiles(int i, int start_y, int end_y) int idx_y = j < 0 ? nn + j : j; if (idx_x > nn) idx_x = idx_x - nn; + wxMicroSleep(10); DownloadTile(idx_x, idx_y); } } @@ -659,6 +660,8 @@ void Basemap::DownloadTile(int x, int y) curl_easy_setopt(image, CURLOPT_WRITEFUNCTION, curlCallback); curl_easy_setopt(image, CURLOPT_WRITEDATA, fp); //curl_easy_setopt(image, CURLOPT_FOLLOWLOCATION, 1); + curl_easy_setopt(image, CURLOPT_SSL_VERIFYHOST, 0); + curl_easy_setopt(image, CURLOPT_SSL_VERIFYPEER, 0); curl_easy_setopt(image, CURLOPT_CONNECTTIMEOUT, 10L); curl_easy_setopt(image, CURLOPT_NOSIGNAL, 1L); @@ -723,13 +726,9 @@ void Basemap::LatLngToXY(double lng, double lat, int &x, int &y) double yy = (1.0 - log(tan(lat_rad) + 1.0 / cos(lat_rad)) / M_PI) / 2.0 * nn; y = (int)(yy * 256 - topP) - offsetY; - double xx = (lng + 180.0 ); - xx = xx / 360.0 * nn; + double xx = (lng + 180.0 ) / 360.0 * nn; + x = (int)(xx * 256 - leftP) - offsetX; - x = (int)(xx *256 - leftP); - if (x < -256) x = nn*256 + x; - x = x - offsetX; - if ( endX > nn) { if (x <0) { x = nn*256 + x; @@ -752,7 +751,7 @@ wxString Basemap::GetTilePath(int x, int y) { //std::ostringstream filepathBuf; wxString filepathBuf; - filepathBuf << cachePath << "basemap_cache"<< separator(); + filepathBuf << cachePath << separator(); filepathBuf << basemapName << "-"; filepathBuf << zoom << "-" << x << "-" << y << imageSuffix; diff --git a/Explore/BoxNewPlotView.cpp b/Explore/BoxNewPlotView.cpp index 9df32a96d..670fab770 100644 --- a/Explore/BoxNewPlotView.cpp +++ b/Explore/BoxNewPlotView.cpp @@ -76,7 +76,7 @@ hinge_15(true) { using namespace Shapefile; wxLogMessage("Open BoxPlotCanvas."); - + display_precision = 4; TableInterface* table_int = project->GetTableInt(); table_int->GetColData(col_ids[0], data[0]); @@ -584,7 +584,8 @@ void BoxPlotCanvas::PopulateCanvas() if (var_info[0].min[t] < y_min) y_min = var_info[0].min[t]; } if (show_axes) { - axis_scale = AxisScale(y_min, y_max, 5, axis_display_precision); + axis_scale = AxisScale(y_min, y_max, 5, axis_display_precision, + axis_display_fixed_point); y_min = axis_scale.scale_min; y_max = axis_scale.scale_max; vert_axis = new GdaAxis(var_info[0].name, axis_scale, @@ -624,45 +625,14 @@ void BoxPlotCanvas::PopulateCanvas() int rows = 8; std::vector vals(rows); - if ((int)hinge_stats[t].min_val == hinge_stats[t].min_val) - vals[0] << GenUtils::IntToStr(hinge_stats[t].min_val); - else - vals[0] << GenUtils::DblToStr(hinge_stats[t].min_val, 4); - - if ((int)hinge_stats[t].max_val == hinge_stats[t].max_val) - vals[1] << GenUtils::IntToStr(hinge_stats[t].max_val); - else - vals[1] << GenUtils::DblToStr(hinge_stats[t].max_val, 4); - - if ((int)hinge_stats[t].Q1 == hinge_stats[t].Q1) - vals[2] << GenUtils::IntToStr(hinge_stats[t].Q1); - else - vals[2] << GenUtils::DblToStr(hinge_stats[t].Q1, 4); - - if ((int)hinge_stats[t].Q2 == hinge_stats[t].Q2) - vals[3] << GenUtils::IntToStr(hinge_stats[t].Q2); - else - vals[3] << GenUtils::DblToStr(hinge_stats[t].Q2, 4); - - if ((int)hinge_stats[t].Q3 == hinge_stats[t].Q3) - vals[4] << GenUtils::IntToStr(hinge_stats[t].Q3); - else - vals[4] << GenUtils::DblToStr(hinge_stats[t].Q3, 4); - - if ((int)hinge_stats[t].IQR == hinge_stats[t].IQR) - vals[5] << GenUtils::IntToStr(hinge_stats[t].IQR); - else - vals[5] << GenUtils::DblToStr(hinge_stats[t].IQR, 4); - - if ((int)data_stats[t].mean == data_stats[t].mean) - vals[6] << GenUtils::IntToStr(data_stats[t].mean); - else - vals[6] << GenUtils::DblToStr(data_stats[t].mean, 4); - - if ((int)data_stats[t].sd_with_bessel == data_stats[t].sd_with_bessel) - vals[7] << GenUtils::IntToStr(data_stats[t].sd_with_bessel); - else - vals[7] << GenUtils::DblToStr(data_stats[t].sd_with_bessel, 4); + vals[0] << GenUtils::DblToStr(hinge_stats[t].min_val, display_precision, display_precision_fixed_point); + vals[1] << GenUtils::DblToStr(hinge_stats[t].max_val, display_precision, display_precision_fixed_point); + vals[2] << GenUtils::DblToStr(hinge_stats[t].Q1, display_precision, display_precision_fixed_point); + vals[3] << GenUtils::DblToStr(hinge_stats[t].Q2, display_precision, display_precision_fixed_point); + vals[4] << GenUtils::DblToStr(hinge_stats[t].Q3, display_precision, display_precision_fixed_point); + vals[5] << GenUtils::DblToStr(hinge_stats[t].IQR, display_precision, display_precision_fixed_point); + vals[6] << GenUtils::DblToStr(data_stats[t].mean, display_precision, display_precision_fixed_point); + vals[7] << GenUtils::DblToStr(data_stats[t].sd_with_bessel, display_precision, display_precision_fixed_point); std::vector attribs(0); // undefined s = new GdaShapeTable(vals, attribs, rows, cols, diff --git a/Explore/CartogramNewView.cpp b/Explore/CartogramNewView.cpp index 30909830f..cde7d0036 100644 --- a/Explore/CartogramNewView.cpp +++ b/Explore/CartogramNewView.cpp @@ -182,13 +182,33 @@ improve_table(6), realtime_updates(false), all_init(false) // Enable realtime_updates for future calls to ImproveAll realtime_updates = true; - double max_rad = - SampleStatistics::CalcMax(carts[cur_cart_ts]->output_radius); - double min_out_x, max_out_x, min_out_y, max_out_y; - SampleStatistics::CalcMinMax(carts[cur_cart_ts]->output_x, - min_out_x, max_out_x); - SampleStatistics::CalcMinMax(carts[cur_cart_ts]->output_y, - min_out_y, max_out_y); + double max_rad = DBL_MIN; + double min_out_x = DBL_MAX, max_out_x = DBL_MIN; + double min_out_y = DBL_MAX, max_out_y = DBL_MIN; + for (int t=0; toutput_radius[i]) { + max_rad = carts[cur_cart_ts]->output_radius[i]; + } + if (min_out_x > carts[cur_cart_ts]->output_x[i]) { + min_out_x = carts[cur_cart_ts]->output_x[i]; + } + if (min_out_y > carts[cur_cart_ts]->output_y[i]) { + min_out_y = carts[cur_cart_ts]->output_y[i]; + } + if (max_out_x < carts[cur_cart_ts]->output_x[i]) { + max_out_x = carts[cur_cart_ts]->output_x[i]; + } + if (max_out_y < carts[cur_cart_ts]->output_y[i]) { + max_out_y = carts[cur_cart_ts]->output_y[i]; + } + } + } + } min_out_x -= max_rad; min_out_y -= max_rad; max_out_x += max_rad; @@ -686,6 +706,7 @@ void CartogramNewCanvas::CreateAndUpdateCategories() if (cat_classif_def.cat_classif_type != CatClassification::custom) { CatClassification::ChangeNumCats(GetNumCats(), cat_classif_def); } + bool useUndefinedCategory = true; cat_classif_def.color_scheme = CatClassification::GetColSchmForType(cat_classif_def.cat_classif_type); CatClassification::PopulateCatClassifData(cat_classif_def, @@ -693,7 +714,9 @@ void CartogramNewCanvas::CreateAndUpdateCategories() var_undefs, cat_data, map_valid, map_error_message, - this->useScientificNotation); + this->useScientificNotation, + useUndefinedCategory, + this->category_disp_precision); if (ref_var_index != -1) { cat_data.SetCurrentCanvasTmStep(var_info[ref_var_index].time - var_info[ref_var_index].time_min); diff --git a/Explore/CartogramNewView.h b/Explore/CartogramNewView.h index 862f04511..a7ef840a0 100644 --- a/Explore/CartogramNewView.h +++ b/Explore/CartogramNewView.h @@ -112,9 +112,7 @@ class CartogramNewCanvas : public TemplateCanvas, public CatClassifStateObserver std::vector data; std::vector data_undef; std::vector > var_undefs; - - //std::vector data_undef; - + bool is_any_time_variant; bool is_any_sync_with_global_time; std::vector map_valid; diff --git a/Explore/CatClassifManager.cpp b/Explore/CatClassifManager.cpp index 3f6f1e70e..7a27d963a 100644 --- a/Explore/CatClassifManager.cpp +++ b/Explore/CatClassifManager.cpp @@ -76,7 +76,7 @@ void CatClassifManager::RemoveClassifState(CatClassifState* ccs) { ccs->closeAndDeleteWhenEmpty(); classif_states.remove(ccs); - delete ccs; + //delete ccs; } bool CatClassifManager::VerifyAgainstTable() diff --git a/Explore/CatClassification.cpp b/Explore/CatClassification.cpp index f6bd287c4..cb5efc485 100644 --- a/Explore/CatClassification.cpp +++ b/Explore/CatClassification.cpp @@ -126,11 +126,13 @@ double calc_gvf(const std::vector& b, const std::vector& v, void CatClassification::CatLabelsFromBreaks(const std::vector& breaks, std::vector& cat_labels, const CatClassifType theme, - bool useScientificNotation) + bool useScientificNotation, + int cat_disp_precision) { stringstream s; - if (useScientificNotation) s << std::setprecision(3) << std::scientific; - else s << std::setprecision(3) << std::fixed; + if (useScientificNotation) + s << std::setprecision(cat_disp_precision) << std::scientific; + else s << std::setprecision(cat_disp_precision) << std::fixed; int num_breaks = breaks.size(); int cur_intervals = num_breaks+1; @@ -178,7 +180,7 @@ void CatClassification::CatLabelsFromBreaks(const std::vector& breaks, s << breaks[ival]; s << b; } - cat_labels[ival] = s.str(); + if (cat_labels[ival].IsEmpty()) cat_labels[ival] = s.str(); } } @@ -189,15 +191,12 @@ void CatClassification::SetBreakPoints(std::vector& breaks, const std::vector& var_undef, const CatClassifType theme, int num_cats, - bool useScientificNotation) + bool useScientificNotation, + int cat_disp_precision) { int num_obs = var.size(); - - if (num_cats < 1) - num_cats = 1; - - if (num_cats > 10) - num_cats = 10; + if (num_cats < 1) num_cats = 1; + if (num_cats > 10) num_cats = 10; breaks.resize(num_cats-1); cat_labels.resize(num_cats); @@ -240,7 +239,8 @@ void CatClassification::SetBreakPoints(std::vector& breaks, Gda::percentile(((i+1.0)*100.0)/((double) num_cats), var); } } - CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); + CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation, + cat_disp_precision); } else if (theme == percentile) { breaks[0] = Gda::percentile(1, var); @@ -266,7 +266,8 @@ void CatClassification::SetBreakPoints(std::vector& breaks, breaks[3] = stats.mean + 1.0 * stats.sd_with_bessel; breaks[4] = stats.mean + 2.0 * stats.sd_with_bessel; - CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); + CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation, + cat_disp_precision); } else if (theme == unique_values) { std::vector v(num_obs); @@ -283,7 +284,6 @@ void CatClassification::SetBreakPoints(std::vector& breaks, num_cats = num_unique_vals; if (num_unique_vals > 10) { num_cats = 10; - //FindNaturalBreaks(num_cats, var, var_undef, breaks); } breaks.resize(num_cats - 1); for (int i = 0; i& breaks, if (num_unique_vals > 10) { cat_labels[9] = "Others"; } - - // don't need to correct for - //CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); - } else if (theme == natural_breaks) { FindNaturalBreaks(num_cats, var, var_undef, breaks); - CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); + CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation, + cat_disp_precision); } else { double min_val = var[0].first; @@ -330,7 +327,8 @@ void CatClassification::SetBreakPoints(std::vector& breaks, } } if (theme != custom) - CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation); + CatLabelsFromBreaks(breaks, cat_labels, theme, useScientificNotation, + cat_disp_precision); } } @@ -343,7 +341,8 @@ PopulateCatClassifData(const CatClassifDef& cat_def, std::vector& cats_valid, std::vector& cats_error_message, bool useSciNotation, - bool useUndefinedCategory) + bool useUndefinedCategory, + int cat_disp_precision) { // this function is only for string type unique values (categorical classification) // theme == unique_values) @@ -463,7 +462,8 @@ PopulateCatClassifData(const CatClassifDef& cat_def, std::vector& cats_valid, std::vector& cats_error_message, bool useSciNotation, - bool useUndefinedCategory) + bool useUndefinedCategory, + int cat_disp_precision) { int num_cats = cat_def.num_cats; CatClassifType theme = cat_def.cat_classif_type; @@ -549,8 +549,10 @@ PopulateCatClassifData(const CatClassifDef& cat_def, } stringstream ss; - if (useSciNotation) ss << std::setprecision(3) << std::scientific; - else ss << std::setprecision(3) << std::fixed; + if (useSciNotation) + ss << std::setprecision(cat_disp_precision) << std::scientific; + else + ss << std::setprecision(cat_disp_precision) << std::fixed; if (num_cats > num_obs) { for (int t=0; t= -2 sd && < -1 sd // >= -1 sd && < mean - // => mean && <= 1 sd + // >= mean && <= 1 sd // > 1 sd && <= 2 sd // > 2 sd @@ -1333,7 +1335,10 @@ PopulateCatClassifData(const CatClassifDef& cat_def, } } } else if (theme == natural_breaks) { - SetNaturalBreaksCats(num_cats, var, var_undef, cat_data, cats_valid, CatClassification::sequential_color_scheme, useSciNotation); + SetNaturalBreaksCats(num_cats, var, var_undef, cat_data, cats_valid, + CatClassification::sequential_color_scheme, + useSciNotation, + cat_disp_precision); } else if (theme == equal_intervals) { for (int t=0; tGetNumberRows(); CatClassifDef cc; cc = _cc; std::vector user_def_labels = cc.names; - - std::sort(cc.breaks.begin(), cc.breaks.end()); + + // correct cc.uniform_dist_min, cc.uniform_dist_max if (cc.uniform_dist_min > cc.uniform_dist_max) { double t = cc.uniform_dist_min; cc.uniform_dist_min = cc.uniform_dist_max; cc.uniform_dist_max = t; } if (cc.breaks.size() > 0) { + std::sort(cc.breaks.begin(), cc.breaks.end()); + // use min/max breaks as min/max for uniform dist if (cc.uniform_dist_min > cc.breaks[0]) { cc.uniform_dist_min = cc.breaks[0]; } @@ -1537,23 +1543,16 @@ bool CatClassification::CorrectCatClassifFromTable(CatClassifDef& _cc, cc.uniform_dist_max = cc.breaks[cc.breaks.size()-1]; } } - // At this point, uniform_dist min/max and breaks consistent with each - // other + int col = -1, tm = 0; - // first ensure that assoc_db_fld_name exists in table - bool field_removed = (cc.assoc_db_fld_name != "" && (!table_int->DbColNmToColAndTm(cc.assoc_db_fld_name, col, tm) || !table_int->IsColNumeric(col))); - - if (field_removed) { - // use min/max breaks as min/max for uniform dist - if (cc.breaks.size() > 0) { - cc.uniform_dist_min = cc.breaks[0]; - cc.uniform_dist_max = cc.breaks[cc.breaks.size()-1]; - } - cc.assoc_db_fld_name = ""; - } + // ensure that assoc_db_fld_name exists in table + bool field_removed = cc.assoc_db_fld_name != ""; + field_removed = field_removed && (!table_int->DbColNmToColAndTm(cc.assoc_db_fld_name, col, tm) || !table_int->IsColNumeric(col)); + if (field_removed) cc.assoc_db_fld_name = ""; bool uni_dist_mode = cc.assoc_db_fld_name.IsEmpty(); + Gda::dbl_int_pair_vec_type data(num_obs); std::vector data_undef(num_obs, false); @@ -1578,23 +1577,9 @@ bool CatClassification::CorrectCatClassifFromTable(CatClassifDef& _cc, std::sort(data.begin(), data.end(), Gda::dbl_int_pair_cmp_less); } - // ensure that CatClassifType and BreakValsType are consistent - if (cc.cat_classif_type != CatClassification::custom) { - cc.break_vals_type = CatClassification::by_cat_classif_type; - } - if (cc.cat_classif_type == CatClassification::custom && - cc.break_vals_type == CatClassification::by_cat_classif_type) { - // this is an illegal combination, so default to quantile_break_vals - cc.break_vals_type = CatClassification::quantile_break_vals; - } - // ensure that num_cats is correct - if (cc.num_cats < 1) - cc.num_cats = 1; - - if (cc.num_cats > 10) - cc.num_cats = 10; - + if (cc.num_cats < 1) cc.num_cats = 1; + if (cc.num_cats > 10) cc.num_cats = 10; if (cc.cat_classif_type == CatClassification::no_theme || cc.break_vals_type == CatClassification::no_theme_break_vals) { @@ -1624,15 +1609,11 @@ bool CatClassification::CorrectCatClassifFromTable(CatClassifDef& _cc, } std::vector uv_mapping; create_unique_val_mapping(uv_mapping, v, v_undef); - int num_unique_vals = uv_mapping.size(); - if (num_unique_vals > 10) { - num_unique_vals = 10; - } + if (num_unique_vals > 10) num_unique_vals = 10; cc.num_cats = num_unique_vals; } - // otherwise the user can choose the number of categories - + // ensure that size of breaks, colors and names matches num_cats if (cc.breaks.size() != cc.num_cats-1) cc.breaks.resize(cc.num_cats-1); if (cc.colors.size() != cc.num_cats) cc.colors.resize(cc.num_cats); @@ -1647,51 +1628,52 @@ bool CatClassification::CorrectCatClassifFromTable(CatClassifDef& _cc, cc.uniform_dist_min = col_min; cc.uniform_dist_max = col_max; for (int i=0, sz=cc.breaks.size(); i col_max) - cc.breaks[i] = col_max; + if (cc.breaks[i] < col_min) { + if (i == 0) cc.breaks[i] = col_min; + else cc.breaks[i] = cc.breaks[i-1]; + } + if (cc.breaks[i] > col_max) { + if (i == 0) cc.breaks[i] = col_max; + else cc.breaks[i] = cc.breaks[i-1]; + } } } - - if (cc.cat_classif_type == CatClassification::hinge_15 || - cc.break_vals_type == CatClassification::hinge_15_break_vals || - cc.cat_classif_type == CatClassification::hinge_30 || - cc.break_vals_type == CatClassification::hinge_30_break_vals || - cc.cat_classif_type == CatClassification::percentile || - cc.break_vals_type == CatClassification::percentile_break_vals || - cc.cat_classif_type == CatClassification::stddev || - cc.break_vals_type == CatClassification::stddev_break_vals || - cc.cat_classif_type == CatClassification::quantile || - cc.break_vals_type == CatClassification::quantile_break_vals || - cc.cat_classif_type == CatClassification::unique_values || - cc.break_vals_type == CatClassification::unique_values_break_vals || - cc.cat_classif_type == CatClassification::natural_breaks || - cc.break_vals_type == CatClassification::natural_breaks_break_vals || - cc.cat_classif_type == CatClassification::equal_intervals || - cc.break_vals_type == CatClassification::equal_intervals_break_vals) - { - } - // Calculate breaks from data - CatClassification::CatClassifType cct = cc.cat_classif_type; - if (cc.break_vals_type != CatClassification::by_cat_classif_type) { - cct = BreakValsTypeToCatClassifType(cc.break_vals_type); + // re-Calculate breaks from data if needed (non-custom) + if (cc.cat_classif_type == CatClassification::hinge_15 || + cc.break_vals_type == CatClassification::hinge_15_break_vals || + cc.cat_classif_type == CatClassification::hinge_30 || + cc.break_vals_type == CatClassification::hinge_30_break_vals || + cc.cat_classif_type == CatClassification::percentile || + cc.break_vals_type == CatClassification::percentile_break_vals || + cc.cat_classif_type == CatClassification::stddev || + cc.break_vals_type == CatClassification::stddev_break_vals || + cc.cat_classif_type == CatClassification::quantile || + cc.break_vals_type == CatClassification::quantile_break_vals || + cc.cat_classif_type == CatClassification::unique_values || + cc.break_vals_type == CatClassification::unique_values_break_vals || + cc.cat_classif_type == CatClassification::natural_breaks || + cc.break_vals_type == CatClassification::natural_breaks_break_vals || + cc.cat_classif_type == CatClassification::equal_intervals || + cc.break_vals_type == CatClassification::equal_intervals_break_vals) + { + CatClassification::SetBreakPoints(cc.breaks, cc.names, data, data_undef, + cc.cat_classif_type, cc.num_cats); } - CatClassification::SetBreakPoints(cc.breaks, cc.names, data, data_undef, cct, cc.num_cats); - - if (cc.color_scheme != CatClassification::custom_color_scheme) - { - // Calculate colors + + // ensure that CatClassifType and BreakValsType are consistent + if (cc.cat_classif_type == CatClassification::custom && + cc.break_vals_type != CatClassification::custom_break_vals) + { + cc.break_vals_type = CatClassification::custom_break_vals; + } + + // re-Generate colors + if (cc.color_scheme != CatClassification::custom_color_scheme) { CatClassification::PickColorSet(cc.colors, cc.color_scheme, cc.num_cats); } - - bool changed = false; - if (cc != _cc) { - _cc = cc; - changed = true; - } - + + // re-Generate labels if auto is ON if (auto_label == false) { int best_n = user_def_labels.size(); if (cc.names.size() < best_n) best_n = cc.names.size(); @@ -1700,6 +1682,12 @@ bool CatClassification::CorrectCatClassifFromTable(CatClassifDef& _cc, cc.names[t] = user_def_labels[t]; } } + + bool changed = false; + if (cc != _cc) { + _cc = cc; + changed = true; + } return changed; } @@ -1786,7 +1774,8 @@ SetNaturalBreaksCats(int num_cats, const std::vector >& var_undef, CatClassifData& cat_data, std::vector& cats_valid, CatClassification::ColorScheme coltype, - bool useSciNotation) + bool useSciNotation, + int cat_disp_precision) { int num_time_vals = var.size(); int num_obs = var[0].size(); @@ -1825,13 +1814,13 @@ SetNaturalBreaksCats(int num_cats, int num_unique_vals = uv_mapping.size(); int t_cats = std::min(num_unique_vals, num_cats); - double mean = 0; + double mean = 0, max_val; int valid_obs = 0; for (int i=0; i max_val) max_val = val; + if (var_undef[t][ind]) continue; mean += val; valid_obs += 1; } @@ -1841,8 +1830,7 @@ SetNaturalBreaksCats(int num_cats, for (int i=0; i0) cat_data.AppendUndefCategory(t, undef_cnts_tms[t]); - - /* - for (int i=0, nb=best_breaks.size(); i<=nb; i++) { - int ss = (i == 0) ? 0 : best_breaks[i-1]; - int tt = (i == nb) ? v.size() : best_breaks[i]; - for (int j=ss; j "; - if (var[t][ss].first == (int)var[t][ss].first) s << (int)var[t][ss].first; - else s << var[t][ss].first; - offset_ss = 1; - - } else if (ival == cur_intervals-1 && cur_intervals == 2) { + double tt_val = var[t][tt].first; + // if floating point number can be render as integer + if (tt_val == (int)tt_val) s << (int)tt_val; + else s << tt_val; + + } else if (ival == cur_intervals-1) { + // last break ss = best_breaks[ival-1]; tt = v.size(); - + double ss_val = var[t][ss].first; + // if there is only 2 categories, or last break is equal to + // the max value s << ">= "; - if (var[t][ss].first == (int)var[t][ss].first) s << (int)var[t][ss].first; - else s << var[t][ss].first; + // if floating point number can be render as integer + if (ss_val == (int)ss_val) s << (int)ss_val; + else s << ss_val; + //if (cur_intervals != 2 && ss_val != max_val) offset_ss = 1; } else { int num_breaks = cur_intervals-1; int num_breaks_lower = (num_breaks+1)/2; - wxString a; - wxString b; - if (ival < num_breaks_lower) { - a = "["; - b = ")"; - ss = best_breaks[ival-1]; - tt = best_breaks[ival]; - } else if (ival == num_breaks_lower) { - a = "["; - b = "]"; - ss = best_breaks[ival-1]; - tt = best_breaks[ival]; - offset_tt = 1; - } else { - a = "("; - b = "]"; - ss = best_breaks[ival-1]; - tt = best_breaks[ival]; - offset_ss = 1; - offset_tt = 1; - } + wxString a,b; + a = "["; + b = ")"; + ss = best_breaks[ival-1]; + tt = best_breaks[ival]; + double ss_val = var[t][ss].first; + double tt_val = var[t][tt].first; s << a; - if (var[t][ss].first == (int)var[t][ss].first) s << (int)var[t][ss].first; - else s << var[t][ss].first; + if (ss_val == (int)ss_val) s << (int)ss_val; + else s << ss_val; s << ", "; - if (var[t][tt].first == (int)var[t][tt].first) s << (int)var[t][tt].first; - else s << var[t][tt].first; + if (tt_val == (int)tt_val) s << (int)tt_val; + else s << tt_val; s << b; } cat_data.SetCategoryLabel(t, ival, s.str()); @@ -2100,39 +2058,30 @@ void CatClassification::PickColorSet(std::vector& color_vec, wxColour Color1[56] = { //Sequential (colorblind safe) wxColour(217, 95, 14), - wxColour(254, 196, 79), wxColour(217, 95, 14), - wxColour(255, 247, 188), wxColour(254, 196, 79), wxColour(217, 95, 14), - wxColour(255, 255, 212), wxColour(254, 217, 142), wxColour(254, 153, 41), wxColour(204, 76, 2), - wxColour(255, 255, 212), wxColour(254, 217, 142), wxColour(254, 153, 41), wxColour(217, 95, 14), wxColour(153, 52, 4), - wxColour(255, 255, 212), wxColour(254, 227, 145), wxColour(254, 196, 79), wxColour(254, 153, 41), wxColour(217, 95, 14), wxColour(153, 52, 4), - wxColour(255, 255, 212), wxColour(254, 227, 145), wxColour(254, 196, 79), wxColour(254, 153, 41), wxColour(236, 112, 20), wxColour(204, 76, 2), wxColour(140, 45, 4), - wxColour(255, 255, 229), wxColour(255, 247, 188), wxColour(254, 227, 145), wxColour(254, 196, 79), wxColour(254, 153, 41), wxColour(236, 112, 20), wxColour(204, 76, 2), wxColour(140, 45, 4), - wxColour(255, 255, 229), wxColour(255, 247, 188), wxColour(254, 227, 145), wxColour(254, 196, 79), wxColour(254, 153, 41), wxColour(236, 112, 20), wxColour(204, 76, 2), wxColour(153, 52, 4), wxColour(102, 37, 6), - wxColour(255, 255, 229), wxColour(255, 247, 188), wxColour(254, 227, 145), wxColour(254, 196, 79), wxColour(254, 153, 41), wxColour(236, 112, 20), @@ -2142,39 +2091,30 @@ void CatClassification::PickColorSet(std::vector& color_vec, wxColour Color2[56] = { // Diverging (colorblind safe) wxColour(103, 169, 207), - wxColour(239, 138, 98), wxColour(103, 169, 207), - wxColour(239, 138, 98), wxColour(247, 247, 247), wxColour(103, 169, 207), - wxColour(202, 0, 32), wxColour(244, 165, 130), wxColour(146, 197, 222), wxColour(5, 113, 176), - wxColour(202, 0, 32), wxColour(244, 165, 130), wxColour(247, 247, 247), wxColour(146, 197, 222), wxColour(5, 113, 176), - wxColour(178, 24, 43), wxColour(239, 138, 98), wxColour(253, 219, 199), wxColour(209, 229, 240), wxColour(103, 169, 207), wxColour(33, 102, 172), - wxColour(178, 24, 43), wxColour(239, 138, 98), wxColour(253, 219, 199), wxColour(247, 247, 247), wxColour(209, 229, 240), wxColour(103, 169, 207), wxColour(33, 102, 172), - wxColour(178, 24, 43), wxColour(214, 96, 77), wxColour(244, 165, 130), wxColour(253, 219, 199), wxColour(209, 229, 240), wxColour(146, 197, 222), wxColour(67, 147, 195), wxColour(33, 102, 172), - wxColour(178, 24, 43), wxColour(214, 96, 77), wxColour(244, 165, 130), wxColour(253, 219, 199), wxColour(247, 247, 247), wxColour(209, 229, 240), wxColour(146, 197, 222), wxColour(67, 147, 195), wxColour(33, 102, 172), - wxColour(103, 0, 31), wxColour(178, 24, 43), wxColour(214, 96, 77), wxColour(244, 165, 130), wxColour(253, 219, 199), wxColour(209, 229, 240), @@ -2184,39 +2124,30 @@ void CatClassification::PickColorSet(std::vector& color_vec, wxColour Color3[56] = { // Qualitative (colorblind safe up to 4) wxColour(31, 120, 180), - wxColour(31, 120, 180), wxColour(51, 160, 44), - wxColour(166, 206, 227), wxColour(31, 120, 180), wxColour(178, 223, 138), - wxColour(166, 206, 227), wxColour(31, 120, 180), wxColour(178, 223, 138), wxColour(51, 160, 44), - wxColour(166, 206, 227), wxColour(31, 120, 180), wxColour(178, 223, 138), wxColour(51, 160, 44), wxColour(251, 154, 153), - wxColour(166, 206, 227), wxColour(31, 120, 180), wxColour(178, 223, 138), wxColour(51, 160, 44), wxColour(251, 154, 153), wxColour(227, 26, 28), - wxColour(166, 206, 227), wxColour(31, 120, 180), wxColour(178, 223, 138), wxColour(51, 160, 44), wxColour(251, 154, 153), wxColour(227, 26, 28), wxColour(253, 191, 111), - wxColour(166, 206, 227), wxColour(31, 120, 180), wxColour(178, 223, 138), wxColour(51, 160, 44), wxColour(251, 154, 153), wxColour(227, 26, 28), wxColour(253, 191, 111), wxColour(255, 127, 0), - wxColour(166, 206, 227), wxColour(31, 120, 180), wxColour(178, 223, 138), wxColour(51, 160, 44), wxColour(251, 154, 153), wxColour(227, 26, 28), wxColour(253, 191, 111), wxColour(255, 127, 0), wxColour(202, 178, 214), - wxColour(166, 206, 227), wxColour(31, 120, 180), wxColour(178, 223, 138), wxColour(51, 160, 44), wxColour(251, 154, 153), wxColour(227, 26, 28), @@ -2508,9 +2439,6 @@ CatClassifDef& CatClassifDef::operator=(const CatClassifDef& s) bool CatClassifDef::operator==(const CatClassifDef& s) const { - if (cat_classif_type == s.cat_classif_type && - num_cats == s.num_cats && - cat_classif_type != CatClassification::custom) return true; if (cat_classif_type != s.cat_classif_type) return false; if (break_vals_type != s.break_vals_type) return false; if (num_cats != s.num_cats) return false; @@ -2623,9 +2551,11 @@ void CatClassifData::ExchangeLabels(int from, int to) void CatClassifData::AppendUndefCategory(int t, int count) { + wxColour brush_clr = wxColour(70, 70, 70); + wxColour pen_clr = GdaColorUtils::ChangeBrightness(brush_clr); Category c_undef; - c_undef.brush.SetColour(wxColour(70, 70, 70)); - //c_undef.pen.SetColour(wxColour(0,0,0)); + c_undef.brush.SetColour(brush_clr); + c_undef.pen.SetColour(pen_clr); c_undef.label = "undefined"; c_undef.min_val = 0; c_undef.max_val = 0; @@ -2660,12 +2590,20 @@ void CatClassifData::SetCategoryBrushesAllCanvasTms( for (int t=0; t colors) +{ + for (int t=0; t colors; + CatClassification::PickColorSet(colors, coltype, ncolor, reversed); + for (int t=0; t colors; + CatClassification::PickColorSet(colors, coltype, ncolor, reversed); + for (int i=0; i= categories[canvas_tm].cat_vec.size()) return; categories[canvas_tm].cat_vec[cat].brush.SetColour(color); - categories[canvas_tm].cat_vec[cat].pen.SetColour( - GdaColorUtils::ChangeBrightness(color)); + categories[canvas_tm].cat_vec[cat].pen.SetColour(GdaColorUtils::ChangeBrightness(color)); } void CatClassifData::SetCategoryBrushColor(int canvas_tm, int cat, wxColour color) @@ -2734,12 +2692,25 @@ void CatClassifData::SetCategoryPenColor(int canvas_tm, int cat, wxColour color) categories[canvas_tm].cat_vec[cat].pen.SetColour(color); } +wxColour CatClassifData::GetCategoryPenColor(int canvas_tm, int cat) +{ + if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) + return *wxBLACK; + return categories[canvas_tm].cat_vec[cat].pen.GetColour(); +} + +wxColour CatClassifData::GetCategoryBrushColor(int canvas_tm, int cat) +{ + if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) + return *wxWHITE; + return categories[canvas_tm].cat_vec[cat].brush.GetColour(); +} + wxColour CatClassifData::GetCategoryColor(int canvas_tm, int cat) { if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) return *wxBLACK; - return - categories[canvas_tm].cat_vec[cat].brush.GetColour(); + return categories[canvas_tm].cat_vec[cat].brush.GetColour(); } wxBrush CatClassifData::GetCategoryBrush(int canvas_tm, int cat) @@ -2784,6 +2755,7 @@ void CatClassifData::ClearAllCategoryIds() wxString CatClassifData::GetCatLblWithCnt(int canvas_tm, int cat) { + if (categories.empty()) return wxEmptyString; if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) { return wxEmptyString; } @@ -2797,6 +2769,7 @@ wxString CatClassifData::GetCatLblWithCnt(int canvas_tm, int cat) wxString CatClassifData::GetCategoryLabel(int canvas_tm, int cat) { + if (categories.empty()) return wxEmptyString; if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) { return wxEmptyString; } @@ -2806,6 +2779,7 @@ wxString CatClassifData::GetCategoryLabel(int canvas_tm, int cat) void CatClassifData::SetCategoryLabel(int canvas_tm, int cat, const wxString& label) { + if (categories.empty()) return; if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) return; categories[canvas_tm].cat_vec[cat].label = label; } @@ -2813,12 +2787,14 @@ void CatClassifData::SetCategoryLabel(int canvas_tm, int cat, void CatClassifData::SetCategoryLabelExt(int canvas_tm, int cat, const wxString& label) { + if (categories.empty()) return; if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) return; categories[canvas_tm].cat_vec[cat].label_ext = label; } int CatClassifData::GetCategoryCount(int canvas_tm, int cat) { + if (categories.empty()) return 0; if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) return 0; return categories[canvas_tm].cat_vec[cat].count; } diff --git a/Explore/CatClassification.h b/Explore/CatClassification.h index dc64fb6b6..8ae2c1f5a 100644 --- a/Explore/CatClassification.h +++ b/Explore/CatClassification.h @@ -37,7 +37,8 @@ namespace CatClassification { enum CatClassifType { no_theme, hinge_15, hinge_30, quantile, percentile, - stddev, excess_risk_theme, unique_values, colocation, natural_breaks, equal_intervals, + stddev, excess_risk_theme, unique_values, colocation, + natural_breaks, equal_intervals, lisa_categories, lisa_significance, custom, getis_ord_categories, getis_ord_significance, local_geary_categories, local_geary_significance, @@ -51,22 +52,27 @@ namespace CatClassification { no_theme_break_vals, hinge_15_break_vals, hinge_30_break_vals, quantile_break_vals, percentile_break_vals, stddev_break_vals, unique_values_break_vals, natural_breaks_break_vals, - equal_intervals_break_vals, custom_break_vals }; + equal_intervals_break_vals, custom_break_vals + }; - enum ColorScheme { sequential_color_scheme, diverging_color_scheme, qualitative_color_scheme, custom_color_scheme, unique_color_scheme }; + enum ColorScheme { sequential_color_scheme, diverging_color_scheme, + qualitative_color_scheme, custom_color_scheme, unique_color_scheme + }; void CatLabelsFromBreaks(const std::vector& breaks, std::vector& cat_labels, const CatClassifType theme, - bool useScientifcNotation=false); + bool useScientifcNotation=false, + int cat_disp_precision=3); void SetBreakPoints(std::vector& breaks, std::vector& cat_labels, const Gda::dbl_int_pair_vec_type& var, const std::vector& var_undef, const CatClassifType theme, int num_cats, - bool useScientificNotation=false); + bool useScientificNotation=false, + int cat_disp_precision=3); void PopulateCatClassifData(const CatClassifDef& cat_def, const std::vector& var, @@ -74,7 +80,8 @@ namespace CatClassification { CatClassifData& cat_data, std::vector& cats_valid, std::vector& cats_error_message, bool useSciNotation=false, - bool useUndefinedCategory=true); + bool useUndefinedCategory=true, + int cat_disp_precision=3); void PopulateCatClassifData(const CatClassifDef& cat_def, const std::vector& var, @@ -82,7 +89,8 @@ namespace CatClassification { CatClassifData& cat_data, std::vector& cats_valid, std::vector& cats_error_message, bool useSciNotation=false, - bool useUndefinedCategory=true); + bool useUndefinedCategory=true, + int cat_disp_precision=3); bool CorrectCatClassifFromTable(CatClassifDef& cc, TableInterface* table_int, @@ -98,7 +106,8 @@ namespace CatClassification { const std::vector >& var_undef, CatClassifData& cat_data, std::vector& cats_valid, ColorScheme coltype=CatClassification::sequential_color_scheme, - bool useSciNotation=false); + bool useSciNotation=false, + int cat_disp_precision=3); ColorScheme GetColSchmForType(CatClassifType theme_type); @@ -192,16 +201,23 @@ struct CatClassifData { int num_obs); void CreateCategoriesAtCanvasTm(int num_cats, int canvas_tm); void SetCategoryBrushesAllCanvasTms(std::vector colors); + void SetCategoryPensAllCanvasTms(std::vector colors); void SetCategoryBrushesAllCanvasTms(CatClassification::ColorScheme coltype, int ncolor, bool reversed); + void SetCategoryPensAllCanvasTms(CatClassification::ColorScheme coltype, + int ncolor, bool reversed); void SetCategoryBrushesAtCanvasTm(CatClassification::ColorScheme coltype, int ncolor, bool reversed, int canvas_tm); + void SetCategoryPensAtCanvasTm(CatClassification::ColorScheme coltype, + int ncolor, bool reversed, int canvas_tm); int GetNumCategories(int canvas_tm); int GetNumObsInCategory(int canvas_tm, int cat); std::vector& GetIdsRef(int canvas_tm, int cat); void SetCategoryColor(int canvas_tm, int cat, wxColour color); void SetCategoryBrushColor(int canvas_tm, int cat, wxColour color); void SetCategoryPenColor(int canvas_tm, int cat, wxColour color); + wxColour GetCategoryPenColor(int canvas_tm, int cat); + wxColour GetCategoryBrushColor(int canvas_tm, int cat); wxColour GetCategoryColor(int canvas_tm, int cat); wxBrush GetCategoryBrush(int canvas_tm, int cat); wxPen GetCategoryPen(int canvas_tm, int cat); diff --git a/Explore/ConditionalClusterMapView.cpp b/Explore/ConditionalClusterMapView.cpp index 17677e68b..f764f0aef 100644 --- a/Explore/ConditionalClusterMapView.cpp +++ b/Explore/ConditionalClusterMapView.cpp @@ -257,6 +257,7 @@ ChangeCatThemeType(CatClassification::CatClassifType new_cat_theme, VarInfoAttributeChange(); CreateAndUpdateCategories(); UserChangedCellCategories(); + full_map_redraw_needed = true; PopulateCanvas(); if (all_init && template_frame) { template_frame->UpdateTitle(); @@ -461,7 +462,7 @@ void ConditionalClusterMapCanvas::ResizeSelectableShps(int virtual_scrn_w, } else { b = cat_classif_def_vert.breaks[row]; } - tmp_lbl = GenUtils::DblToStr(b); + tmp_lbl = GenUtils::DblToStr(b, display_precision, display_precision_fixed_point); } else { tmp_lbl = vert_cat_data.GetCategoryLabel(vt, row); } @@ -493,7 +494,7 @@ void ConditionalClusterMapCanvas::ResizeSelectableShps(int virtual_scrn_w, } else { b = cat_classif_def_horiz.breaks[col]; } - tmp_lbl = GenUtils::DblToStr(b); + tmp_lbl = GenUtils::DblToStr(b, display_precision, display_precision_fixed_point); } else { tmp_lbl = horiz_cat_data.GetCategoryLabel(ht, col); } diff --git a/Explore/ConditionalHistogramView.cpp b/Explore/ConditionalHistogramView.cpp index 159e201d6..aebe206b6 100644 --- a/Explore/ConditionalHistogramView.cpp +++ b/Explore/ConditionalHistogramView.cpp @@ -340,7 +340,8 @@ void ConditionalHistogramCanvas::ResizeSelectableShps(int virtual_scrn_w, } else { b = cat_classif_def_vert.breaks[row]; } - tmp_lbl = GenUtils::DblToStr(b); + tmp_lbl = GenUtils::DblToStr(b, display_precision, + display_precision_fixed_point); } else { tmp_lbl << vert_cat_data.GetCategoryLabel(vt, row); } @@ -378,7 +379,8 @@ void ConditionalHistogramCanvas::ResizeSelectableShps(int virtual_scrn_w, } else { b = cat_classif_def_horiz.breaks[col]; } - tmp_lbl = GenUtils::DblToStr(b); + tmp_lbl = GenUtils::DblToStr(b, display_precision, + display_precision_fixed_point); } else { tmp_lbl << horiz_cat_data.GetCategoryLabel(ht, col); } @@ -450,13 +452,15 @@ void ConditionalHistogramCanvas::PopulateCanvas() last_scale_trans.SetData(x_min, 0, x_max, y_max); if (show_axes) { - axis_scale_y = AxisScale(0, y_max, 3, axis_display_precision); + axis_scale_y = AxisScale(0, y_max, 3, axis_display_precision, + axis_display_fixed_point); y_max = axis_scale_y.scale_max; y_axis = new GdaAxis(_("Frequency"), axis_scale_y, wxRealPoint(0,0), wxRealPoint(0, y_max), -9, 0); - axis_scale_x = AxisScale(0, max_ival_val[t], 5, axis_display_precision); + axis_scale_x = AxisScale(0, max_ival_val[t], 5, axis_display_precision, + axis_display_fixed_point); //shps_orig_xmax = axis_scale_x.scale_max; axis_scale_x.data_min = min_ival_val[t]; axis_scale_x.data_max = max_ival_val[t]; @@ -473,8 +477,9 @@ void ConditionalHistogramCanvas::PopulateCanvas() axis_scale_x.tics[i] = axis_scale_x.data_min + range*((double) i)/((double) axis_scale_x.ticks-1); - //wxString flt = wxString::Format("%.2g", axis_scale_x.tics[i]); - wxString flt = GenUtils::DblToStr(axis_scale_x.tics[i], axis_display_precision); + wxString flt = GenUtils::DblToStr(axis_scale_x.tics[i], + axis_display_precision, + axis_display_fixed_point); axis_scale_x.tics_str[i] = flt.ToStdString(); axis_scale_x.tics_str_show[i] = false; } @@ -581,13 +586,18 @@ void ConditionalHistogramCanvas::UpdateSelection(bool shiftdown, bool pointsel) } } if (!any_selected) { + for (size_t j=0; jSetEventType(HLStateInt::unhighlight_all); - highlight_state->notifyObservers(this); selection_changed = true; + //highlight_timer->Start(50); + //highlight_state->notifyObservers(this); + //selection_changed = true; + //return; } } if (selection_changed == false) { + std::vector new_hs(hs.size(), false); for (int i=0; i::iterator it = - cell_data[0][r][c].ival_to_obs_ids[ival].begin(); - it != cell_data[0][r][c].ival_to_obs_ids[ival].end(); it++) { - hs[(*it)]= false; + if (selected) { + // select currently unselected in ival + for (std::list::iterator it = + cell_data[0][r][c].ival_to_obs_ids[ival].begin(); + it != cell_data[0][r][c].ival_to_obs_ids[ival].end(); it++) { + new_hs[(*it)]= true; selection_changed = true; - } - } else if (!all_sel && selected) { - // select currently unselected in ival - for (std::list::iterator it = - cell_data[0][r][c].ival_to_obs_ids[ival].begin(); - it != cell_data[0][r][c].ival_to_obs_ids[ival].end(); it++) { - if (hs[*it]) continue; - hs[(*it)]= true; - selection_changed = true; - } - } else if (!selected && !shiftdown) { - // unselect all selected in ival - for (std::list::iterator it = - cell_data[0][r][c].ival_to_obs_ids[ival].begin(); - it != cell_data[0][r][c].ival_to_obs_ids[ival].end(); it++) { - if (!hs[*it]) continue; - hs[(*it)]= false; - selection_changed = true; - } - } + } + } } if ( selection_changed ) { - highlight_state->SetEventType(HLStateInt::delta); - highlight_state->notifyObservers(this); + hs = new_hs; + } } @@ -638,11 +630,10 @@ void ConditionalHistogramCanvas::UpdateSelection(bool shiftdown, bool pointsel) layer1_valid = false; UpdateIvalSelCnts(); DrawLayers(); - Refresh(); + + highlight_state->SetEventType(HLStateInt::delta); + highlight_timer->Start(50); } - - - UpdateStatusBar(); } @@ -670,10 +661,10 @@ void ConditionalHistogramCanvas::DrawHighlightedShapes(wxMemoryDC &dc) for (int r=0; rgetPen()); dc.SetBrush(shp->getBrush()); @@ -682,7 +673,6 @@ void ConditionalHistogramCanvas::DrawHighlightedShapes(wxMemoryDC &dc) rec->lower_left.y, rec->upper_right.x - rec->lower_left.x, (rec->upper_right.y - rec->lower_left.y)*s); - } i++; } @@ -766,8 +756,13 @@ void ConditionalHistogramCanvas::InitIntervals() if (var_info[HOR_VAR].sync_with_global_time) ht += t; - int rows = vert_cat_data.categories[vt].cat_vec.size(); - int cols = horiz_cat_data.categories[ht].cat_vec.size(); + int rows = 1, cols = 1; + if (!vert_cat_data.categories.empty()) { + rows = vert_cat_data.categories[vt].cat_vec.size(); + } + if (!horiz_cat_data.categories.empty()) { + cols = horiz_cat_data.categories[ht].cat_vec.size(); + } cell_data[0].resize(boost::extents[rows][cols]); for (int r=0; r= ival_breaks[0][cur_ival]) { cur_ival++; } - int r = vert_cat_data.categories[vt].id_to_cat[id]; - int c = horiz_cat_data.categories[ht].id_to_cat[id]; - + int r = 0, c = 0; + if (!vert_cat_data.categories.empty()) { + r = vert_cat_data.categories[vt].id_to_cat[id]; + } + if (!horiz_cat_data.categories.empty()) { + c = horiz_cat_data.categories[ht].id_to_cat[id]; + } obs_id_to_sel_shp[t][id] = cell_to_sel_shp_gen(r, c, cur_ival, cols, cur_intervals); - cell_data[0][r][c].ival_to_obs_ids[cur_ival].push_front(id); - cell_data[0][r][c].ival_obs_cnt[cur_ival]++; - if (cell_data[0][r][c].ival_obs_cnt[cur_ival] > max_num_obs_in_ival[t]) { max_num_obs_in_ival[t] = @@ -819,7 +811,6 @@ void ConditionalHistogramCanvas::InitIntervals() overall_max_num_obs_in_ival = max_num_obs_in_ival[t]; } } - if (hs[data_sorted[dt][i].second]) { cell_data[0][r][c].ival_obs_sel_cnt[cur_ival]++; } @@ -835,12 +826,15 @@ void ConditionalHistogramCanvas::UpdateIvalSelCnts() for (int t=0; t& hs = highlight_state->GetHighlight(); - std::vector& nuh = highlight_state->GetNewlyUnhighlighted(); - int nh_cnt = highlight_state->GetTotalNewlyHighlighted(); - int nuh_cnt = highlight_state->GetTotalNewlyUnhighlighted(); - + for (int t=0; t= 4 || horiz_num_cats >=4) + if (vert_num_cats >= 4 || horiz_num_cats >=4) { fac = 0.015; - + } double pad_w = scn_w * fac; double pad_h = scn_h * fac; @@ -569,13 +569,17 @@ void ConditionalMapCanvas::ResizeSelectableShps(int virtual_scrn_w, bin_bm_redraw_needed = false; } - int row_c; - int col_c; + int row_c = 0; + int col_c = 0; for (int i=0; iapplyScaleTrans(st[row_c][col_c]); } @@ -624,7 +628,7 @@ void ConditionalMapCanvas::ResizeSelectableShps(int virtual_scrn_w, else { b = cat_classif_def_vert.breaks[row]; } - tmp_lbl = GenUtils::DblToStr(b); + tmp_lbl = GenUtils::DblToStr(b, display_precision, display_precision_fixed_point); } else { tmp_lbl << vert_cat_data.GetCategoryLabel(vt, row); } @@ -658,7 +662,7 @@ void ConditionalMapCanvas::ResizeSelectableShps(int virtual_scrn_w, else { b = cat_classif_def_horiz.breaks[col]; } - tmp_lbl = GenUtils::DblToStr(b); + tmp_lbl = GenUtils::DblToStr(b, display_precision, display_precision_fixed_point); } else { tmp_lbl << horiz_cat_data.GetCategoryLabel(ht, col); } @@ -697,7 +701,6 @@ void ConditionalMapCanvas::ResizeSelectableShps(int virtual_scrn_w, for (int i=0; iuseScientificNotation); + this->useScientificNotation, + useUndefinedCategory, + this->category_disp_precision); if (ref_var_index != -1) { cat_data.SetCurrentCanvasTmStep(var_info[ref_var_index].time - var_info[ref_var_index].time_min); diff --git a/Explore/ConditionalNewView.cpp b/Explore/ConditionalNewView.cpp index d73366b01..35d199dcb 100644 --- a/Explore/ConditionalNewView.cpp +++ b/Explore/ConditionalNewView.cpp @@ -243,33 +243,37 @@ void ConditionalNewCanvas::SetCheckMarks(wxMenu* menu) GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_COND_VERT_THEMELESS"), GetCatType(VERT_VAR) == CatClassification::no_theme); - - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_THEMELESS"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_QUANT_SUBMENU"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_CHOROPLETH_PERCENTILE"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_HINGE_15"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_HINGE_30"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_CHOROPLETH_STDDEV"), VERT_VAR_NUM); - //GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_UNIQUE_VALUES"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_EQU_INTS_SUBMENU"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_NAT_BRKS_SUBMENU"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_B"), VERT_VAR_NUM); + + bool vert_flag = VERT_VAR_NUM; + if (var_info[VERT_VAR].is_hide) vert_flag = false; + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_THEMELESS"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_QUANT_SUBMENU"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_CHOROPLETH_PERCENTILE"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_HINGE_15"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_HINGE_30"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_CHOROPLETH_STDDEV"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_UNIQUE_VALUES"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_EQU_INTS_SUBMENU"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_NAT_BRKS_SUBMENU"), vert_flag); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_B"), vert_flag); for (size_t j=0; j= (int)var_info.size()) return wxEmptyString; + if (var_info[var].is_hide) return "N/A"; + wxString s(var_info[var].name); if (var_info[var].is_time_variant) { s << " (" << project->GetTableInt()->GetTimeString(var_info[var].time); @@ -626,16 +632,13 @@ void ConditionalNewCanvas::CreateAndUpdateCategories(int var_id) for (int t=0; tuseScientificNotation, - useUndefinedCategory); + useUndefinedCategory, + this->category_disp_precision); else CatClassification::PopulateCatClassifData(cat_classif_def_vert, vert_str_var_sorted, @@ -654,28 +658,31 @@ void ConditionalNewCanvas::CreateAndUpdateCategories(int var_id) vert_cats_valid, vert_cats_error_message, this->useScientificNotation, - useUndefinedCategory); + useUndefinedCategory, + this->category_disp_precision); int vt = var_info[var_id].time; - vert_num_cats = vert_cat_data.categories[vt].cat_vec.size(); - CatClassification::ChangeNumCats(vert_num_cats, cat_classif_def_vert); + if (!vert_cat_data.categories.empty()) { + vert_num_cats = vert_cat_data.categories[vt].cat_vec.size(); + if (vert_num_cats != cat_classif_def_vert.num_cats) { + CatClassification::ChangeNumCats(vert_num_cats, + cat_classif_def_vert); + } + } } else { - for (int t=0; tuseScientificNotation, useUndefinedCategory); int ht = var_info[var_id].time; - horiz_num_cats = horiz_cat_data.categories[ht].cat_vec.size(); - CatClassification::ChangeNumCats(horiz_num_cats, cat_classif_def_horiz); + if (!horiz_cat_data.categories.empty()) { + horiz_num_cats = horiz_cat_data.categories[ht].cat_vec.size(); + if (horiz_num_cats != cat_classif_def_horiz.num_cats) { + CatClassification::ChangeNumCats(horiz_num_cats, + cat_classif_def_horiz); + } + } } } diff --git a/Explore/ConditionalScatterPlotView.cpp b/Explore/ConditionalScatterPlotView.cpp index 53a4985fe..1939fd396 100644 --- a/Explore/ConditionalScatterPlotView.cpp +++ b/Explore/ConditionalScatterPlotView.cpp @@ -74,9 +74,11 @@ show_lowess_smoother(false) double y_min = var_info[DEP_VAR].min_over_time; double x_pad = 0.1 * (x_max - x_min); double y_pad = 0.1 * (y_max - y_min); - axis_scale_x = AxisScale(x_min - x_pad, x_max + x_pad, 4, axis_display_precision); + axis_scale_x = AxisScale(x_min - x_pad, x_max + x_pad, 4, + axis_display_precision, axis_display_fixed_point); axis_scale_x.SkipEvenTics(); - axis_scale_y = AxisScale(y_min - y_pad, y_max + y_pad, 4, axis_display_precision); + axis_scale_y = AxisScale(y_min - y_pad, y_max + y_pad, 4, + axis_display_precision, axis_display_fixed_point); axis_scale_y.SkipEvenTics(); highlight_color = GdaConst::scatterplot_regression_selected_color; @@ -310,7 +312,7 @@ void ConditionalScatterPlotCanvas::ResizeSelectableShps(int virtual_scrn_w, } else { b = cat_classif_def_vert.breaks[row]; } - tmp_lbl = GenUtils::DblToStr(b); + tmp_lbl = GenUtils::DblToStr(b, display_precision, display_precision_fixed_point); } else { tmp_lbl << horiz_cat_data.GetCategoryLabel(vt, row); } @@ -350,7 +352,7 @@ void ConditionalScatterPlotCanvas::ResizeSelectableShps(int virtual_scrn_w, } else { b = cat_classif_def_horiz.breaks[col]; } - tmp_lbl = GenUtils::DblToStr(b); + tmp_lbl = GenUtils::DblToStr(b, display_precision, display_precision_fixed_point); } else { tmp_lbl << horiz_cat_data.GetCategoryLabel(ht, col); } @@ -441,13 +443,16 @@ void ConditionalScatterPlotCanvas::ResizeSelectableShps(int virtual_scrn_w, } } - int row_c; - int col_c; + int row_c = 0, col_c = 0; for (int i=0; iapplyScaleTrans(st[row_c][col_c]); } isResize = true; @@ -472,9 +477,11 @@ void ConditionalScatterPlotCanvas::PopulateCanvas() double y_min = var_info[DEP_VAR].min_over_time; double x_pad = 0.1 * (x_max - x_min); double y_pad = 0.1 * (y_max - y_min); - axis_scale_x = AxisScale(x_min - x_pad, x_max + x_pad, 4, axis_display_precision); + axis_scale_x = AxisScale(x_min - x_pad, x_max + x_pad, 4, + axis_display_precision, axis_display_fixed_point); axis_scale_x.SkipEvenTics(); - axis_scale_y = AxisScale(y_min - y_pad, y_max + y_pad, 4, axis_display_precision); + axis_scale_y = AxisScale(y_min - y_pad, y_max + y_pad, 4, + axis_display_precision, axis_display_fixed_point); axis_scale_y.SkipEvenTics(); for (int i=0; i& xref = *dvec_xp[row][col]; std::vector& yref = *dvec_yp[row][col]; int index = ind[row][col]; diff --git a/Explore/ConnectivityHistView.cpp b/Explore/ConnectivityHistView.cpp index a5f133063..2b69dcccd 100644 --- a/Explore/ConnectivityHistView.cpp +++ b/Explore/ConnectivityHistView.cpp @@ -317,12 +317,13 @@ void ConnectivityHistCanvas::PopulateCanvas() last_scale_trans.SetData(x_min, 0, x_max, y_max); if (show_axes) { - axis_scale_y = AxisScale(0, y_max, 5, 0); + axis_scale_y = AxisScale(0, y_max, 5, 0/*count*/, axis_display_fixed_point); y_max = axis_scale_y.scale_max; y_axis = new GdaAxis(_("Frequency"), axis_scale_y, wxRealPoint(0,0), wxRealPoint(0, y_max), -9, 0); foreground_shps.push_back(y_axis); - axis_scale_x = AxisScale(0, max_ival_val, 5, axis_display_precision); + axis_scale_x = AxisScale(0, max_ival_val, 5, axis_display_precision, + axis_display_fixed_point); axis_scale_x.data_min = min_ival_val; axis_scale_x.data_max = max_ival_val; diff --git a/Explore/CorrelogramView.cpp b/Explore/CorrelogramView.cpp index 9585fa0f1..f2aa942c0 100644 --- a/Explore/CorrelogramView.cpp +++ b/Explore/CorrelogramView.cpp @@ -34,6 +34,7 @@ #include "../GeoDa.h" #include "../logger.h" #include "../Project.h" +#include "../DialogTools/AdjustYAxisDlg.h" #include "SimpleAxisCanvas.h" #include "SimpleHistCanvas.h" #include "CorrelogramView.h" @@ -57,7 +58,10 @@ CorrelogramFrame::CorrelogramFrame(wxFrame *parent, Project* project, : TemplateFrame(parent, project, title, pos, size, wxDEFAULT_FRAME_STYLE), correl_params_frame(0), panel(0),lowess_param_frame(0), sp_can(0), panel_v_szr(0), bag_szr(0), top_h_sizer(0), -hist_plot(0), local_hl_state(0), message_win(0), project(project), shs_plot(0), display_statistics(false) +hist_plot(0), local_hl_state(0), message_win(0), project(project), +shs_plot(0), display_statistics(false), display_precision(3), +axis_display_precision(1), display_fixed_point(false), +axis_display_fixed_point(false) { wxLogMessage("Open CorrelogramFrame."); local_hl_state = new HighlightState(); @@ -100,7 +104,6 @@ hist_plot(0), local_hl_state(0), message_win(0), project(project), shs_plot(0), SetupPanelForNumVariables(var_man.GetVarsCount()); - Show(true); wxCommandEvent ev; @@ -143,7 +146,8 @@ void CorrelogramFrame::OnEditLowessParams(wxCommandEvent& event) lowess_param_frame->SetFocus(); } else { Lowess l; - lowess_param_frame = new LowessParamFrame(l.GetF(), l.GetIter(), l.GetDeltaFactor(), project); + lowess_param_frame = new LowessParamFrame(l.GetF(), l.GetIter(), + l.GetDeltaFactor(), project); lowess_param_frame->registerObserver(this); } } @@ -167,16 +171,36 @@ void CorrelogramFrame::OnRightClick(const wxPoint& pos) if (!optMenu) return; UpdateContextMenuItems(optMenu); - GeneralWxUtils::CheckMenuItem(optMenu, XRCID("ID_CORRELOGRAM_DISPLAY_STATS"), display_statistics); + GeneralWxUtils::CheckMenuItem(optMenu, XRCID("ID_CORRELOGRAM_DISPLAY_STATS"), + display_statistics); PopupMenu(optMenu, pos); UpdateOptionMenuItems(); - wxMenuItem* save_menu = optMenu->FindItem(XRCID("ID_SAVE_CORRELOGRAM_STATS")); Connect(save_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(CorrelogramFrame::OnSaveResult)); } +void CorrelogramFrame::OnSetAxisDisplayPrecision(wxCommandEvent& event) +{ + SetDisplayPrecisionDlg dlg(axis_display_precision, + axis_display_fixed_point, this); + if (dlg.ShowModal () != wxID_OK) return; + axis_display_precision = dlg.precision; + axis_display_fixed_point = dlg.fixed_point; + ReDraw(); +} + +void CorrelogramFrame::OnDisplayPrecision(wxCommandEvent& event) +{ + SetDisplayPrecisionDlg dlg(display_precision, + display_fixed_point, this); + if (dlg.ShowModal () != wxID_OK) return; + display_precision = dlg.precision; + display_fixed_point = dlg.fixed_point; + ReDraw(); +} + void CorrelogramFrame::OnSaveResult(wxCommandEvent& event) { wxLogMessage("In CorrelogramFrame::OnSaveResult()"); @@ -187,9 +211,9 @@ void CorrelogramFrame::OnSaveResult(wxCommandEvent& event) return; wxFileOutputStream output_stream(saveFileDialog.GetPath()); - if (!output_stream.IsOk()) - { - wxLogError("Cannot save current contents in file '%s'.", saveFileDialog.GetPath()); + if (!output_stream.IsOk()) { + wxLogError("Cannot save current contents in file '%s'.", + saveFileDialog.GetPath()); return; } // write logReport to a text file @@ -202,7 +226,6 @@ void CorrelogramFrame::OnSaveResult(wxCommandEvent& event) lbls.push_back(_("Max")); lbls.push_back(_("# Pairs")); - wxString header = ""; int total_pairs = 0; for (size_t i=0; iRemoveGrowableRow(num_top_rows); } bag_szr->AddGrowableRow(num_top_rows, 1); - - // last row - /* - if (bag_szr->IsRowGrowable(num_top_rows+1)) { - bag_szr->RemoveGrowableRow(num_top_rows+1); - } - bag_szr->AddGrowableRow(num_top_rows+1, 1); - if (bag_szr->IsRowGrowable(num_top_rows+2)) { - bag_szr->RemoveGrowableRow(num_top_rows+2); - } - bag_szr->AddGrowableRow(num_top_rows+2, 1); - */ + panel_v_szr->Add(bag_szr, 1, wxALL | wxEXPAND); - - + vector lbls; lbls.push_back(_("Autocorr.")); lbls.push_back(_("Min")); @@ -791,7 +797,8 @@ void CorrelogramFrame::SetupPanelForNumVariables(int num_vars) SimpleHistStatsCanvas* shs_can = 0; shs_can = new SimpleHistStatsCanvas(panel, this, project, local_hl_state, - lbls, vals, stats, + lbls, vals, stats, display_precision, + display_fixed_point, "ID_CORRELOGRAM_MENU_OPTIONS", wxDefaultPosition, wxSize(-1, 110)); shs_can->SetFixedAspectRatioMode(false); diff --git a/Explore/CorrelogramView.h b/Explore/CorrelogramView.h index 8c0661401..4ee8b0935 100644 --- a/Explore/CorrelogramView.h +++ b/Explore/CorrelogramView.h @@ -55,7 +55,8 @@ typedef std::map data_undef_map_type; CorrelogramFrame manages all of its canvas child windows. */ class CorrelogramFrame : public TemplateFrame, public CorrelParamsObserver, -public SimpleScatterPlotCanvasCbInt, public SimpleBinsHistCanvasCbInt, public LowessParamObserver +public SimpleScatterPlotCanvasCbInt, public SimpleBinsHistCanvasCbInt, +public LowessParamObserver { public: CorrelogramFrame(wxFrame *parent, Project* project, @@ -75,6 +76,8 @@ public SimpleScatterPlotCanvasCbInt, public SimpleBinsHistCanvasCbInt, public Lo void OnDisplayStatistics(wxCommandEvent& event); void OnSaveResult(wxCommandEvent& event); void OnEditLowessParams(wxCommandEvent& event); + virtual void OnSetAxisDisplayPrecision(wxCommandEvent& event); + virtual void OnDisplayPrecision(wxCommandEvent& event); /** Implementation of TableStateObserver interface */ virtual void update(TableState* o); @@ -123,6 +126,10 @@ public SimpleScatterPlotCanvasCbInt, public SimpleBinsHistCanvasCbInt, public Lo HLStateInt* local_hl_state; SimpleScatterPlotCanvas* sp_can; + int display_precision; + bool display_fixed_point; + int axis_display_precision; + bool axis_display_fixed_point; bool display_statistics; wxBoxSizer* top_h_sizer; diff --git a/Explore/GroupingMapView.cpp b/Explore/GroupingMapView.cpp new file mode 100644 index 000000000..ab1590bb0 --- /dev/null +++ b/Explore/GroupingMapView.cpp @@ -0,0 +1,582 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../DataViewer/TableInterface.h" +#include "../DataViewer/TimeState.h" +#include "../GeneralWxUtils.h" +#include "../GenUtils.h" +#include "../GeoDa.h" +#include "../logger.h" +#include "../Project.h" +#include "../DialogTools/PermutationCounterDlg.h" +#include "../DialogTools/SaveToTableDlg.h" +#include "../DialogTools/VariableSettingsDlg.h" +#include "../DialogTools/RandomizationDlg.h" +#include "../DialogTools/AbstractClusterDlg.h" +#include "../VarCalc/WeightsManInterface.h" +#include "../ShapeOperations/WeightsManager.h" +#include "GroupingMapView.h" + +using namespace std; + +HierachicalMapSelectDlg::HierachicalMapSelectDlg(wxFrame* parent_s, Project* project_s) +: wxDialog(parent_s, wxID_ANY, "Hierarchical Map", wxDefaultPosition, + wxSize(350, 250)) +{ + wxLogMessage("Open GroupingSelectDlg."); + + project = project_s; + wxPanel* panel = new wxPanel(this, -1); + + wxFlexGridSizer* gbox = new wxFlexGridSizer(2, 2, 5, 5); + wxStaticText* root_var_st = new wxStaticText(panel, wxID_ANY, + _("Root Variable:")); + root_var_list = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(160,-1)); + gbox->Add(root_var_st, 0, wxALIGN_LEFT | wxALL, 0); + gbox->Add(root_var_list, 0, wxALIGN_LEFT | wxLEFT, 12); + + wxStaticText* group_var_st = new wxStaticText(panel, wxID_ANY, + _("Group Variable:")); + group_var_list = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(160,-1)); + gbox->Add(group_var_st, 0, wxALIGN_LEFT | wxALL, 0); + gbox->Add(group_var_list, 0, wxALIGN_LEFT | wxLEFT, 12); + + wxButton* ok_btn = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, + wxDefaultSize, wxBU_EXACTFIT); + wxButton* cancel_btn = new wxButton(this, wxID_CANCEL, _("Close"), + wxDefaultPosition, wxDefaultSize, + wxBU_EXACTFIT); + wxBoxSizer* hbox = new wxBoxSizer(wxHORIZONTAL); + hbox->Add(ok_btn, 0, wxALIGN_CENTER | wxALL, 5); + hbox->Add(cancel_btn, 0, wxALIGN_CENTER | wxALL, 5); + + wxBoxSizer* cbox = new wxBoxSizer(wxVERTICAL); + cbox->Add(gbox, 0, wxALIGN_CENTER | wxALL, 10); + panel->SetSizerAndFit(cbox); + + wxBoxSizer* vbox = new wxBoxSizer(wxVERTICAL); + vbox->Add(panel, 1, wxALL, 15); + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + + SetSizer(vbox); + vbox->Fit(this); + + Center(); + ok_btn->Bind(wxEVT_BUTTON, &HierachicalMapSelectDlg::OnOK, this); + + std::vector col_id_map; + table_int = project->GetTableInt(); + table_int->FillIntegerColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + group_var_list->Append(nm); + root_var_list->Append(nm); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + group_var_list->Append(name); + root_var_list->Append(name); + } + } +} + +HierachicalMapSelectDlg::~HierachicalMapSelectDlg() +{ + +} + +std::vector HierachicalMapSelectDlg::GetVarInfo() +{ + return vars; +} + +std::vector HierachicalMapSelectDlg::GetColIds() +{ + return col_ids; +} + +void HierachicalMapSelectDlg::OnOK( wxCommandEvent& event) +{ + wxLogMessage("GroupingSelectDlg::OnOK()"); + vars.resize(2); + col_ids.resize(2); + + wxString group_nm = group_var_list->GetString(group_var_list->GetSelection()); + wxString group_field = name_to_nm[group_nm]; + int time1 = name_to_tm_id[group_nm]; + int col1 = table_int->GetColIdx(group_field); + if (col1 < 0) return; + + vars[0].name = group_field; + vars[0].is_time_variant = table_int->IsColTimeVariant(col1); + vars[0].time = time1; + col_ids[0] = col1; + + wxString root_nm = root_var_list->GetString(root_var_list->GetSelection()); + wxString root_field = name_to_nm[root_nm]; + int time2 = name_to_tm_id[root_nm]; + int col2 = table_int->GetColIdx(root_field); + if (col2 < 0) return; + + vars[1].name = root_field; + vars[1].is_time_variant = table_int->IsColTimeVariant(col2); + vars[1].time = time2; + col_ids[1] = col2; + + // create a weights + vector vals, root_ids; + table_int->GetColData(col1, time1, vals); + if (vals.empty()) return; + table_int->GetColData(col2, time2, root_ids); + if (root_ids.empty()) return; + + std::map grp_root; + std::map > grp_vals; + int n = vals.size(); + for (int i=0; inum_obs = n; + Wp->is_symmetric = true; + Wp->symmetry_checked = true; + Wp->gal = new GalElement[n]; + Wp->is_internal_use = true; + + std::map::iterator it; + for (it=grp_root.begin(); it != grp_root.end(); ++it) { + wxInt64 grp_id = it->first; + int r_id = it->second; + if (grp_vals.find(grp_id) != grp_vals.end()) { + std::vector& ids = grp_vals[grp_id]; + int n_brs = 0; + for (size_t i=0; igal[r_id].SetSizeNbrs(n_brs); + int cnt=0; + for (size_t i=0; igal[r_id].SetNbr(cnt++, ids[i]); + } + } + } + } + WeightsMetaInfo wmi; + WeightsMetaInfo e(wmi); + e.filename = group_nm + "/" + root_nm; + e.weights_type = WeightsMetaInfo::WT_internal; + WeightsManInterface* w_man_int = project->GetWManInt(); + uid = w_man_int->RequestWeights(e); + bool success = ((WeightsNewManager*) w_man_int)->AssociateGal(uid, Wp); + if (success == false) return; + title = _("Hierachical Map: "); + title << e.filename; + EndDialog(wxID_OK); +} + +wxString HierachicalMapSelectDlg::GetTitle() +{ + return title; +} + +boost::uuids::uuid HierachicalMapSelectDlg::GetWUID() +{ + return uid; +} +//////////////////////////////////////////////////////////////////////////////// +// +// +// +//////////////////////////////////////////////////////////////////////////////// + +IMPLEMENT_CLASS(HierachicalMapCanvas, MapCanvas) +BEGIN_EVENT_TABLE(HierachicalMapCanvas, MapCanvas) + EVT_PAINT(TemplateCanvas::OnPaint) + EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground) + EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent) + EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent) +END_EVENT_TABLE() + +HierachicalMapCanvas::HierachicalMapCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, std::vector vars, + std::vector col_ids, boost::uuids::uuid w_uuid, + const wxPoint& pos, const wxSize& size) +: MapCanvas(parent, t_frame, project, vars, col_ids, + CatClassification::unique_values, no_smoothing, 1, + w_uuid, pos, size) +{ + wxLogMessage("Entering GroupingMapCanvas::GroupingMapCanvas"); + root_radius = 4; + group_field_nm = vars[0].name; + root_field_nm = vars[1].name; + root_field_id = table_int->GetColIdx(vars[1].name); + // Get Root values and related row id + std::vector vals; + table_int->GetColData(root_field_id, vars[1].time, vals); + for (size_t i=0; i& hs = highlight_state->GetHighlight(); + if (highlight_state->GetTotalHighlighted() >0) { + wxPen pen(graph_color, weights_graph_thickness); + for (int i=0; ifrom] || hs[e->to]) { + e->setPen(pen); + e->paintSelf(dc); + } else { + e->setPen(*wxTRANSPARENT_PEN); + } + } + } +} + +void HierachicalMapCanvas::CreateConnectivityGraph() +{ + // use centroids to draw graph + WeightsManInterface* w_man_int = project->GetWManInt(); + GalWeight* gal_weights = w_man_int->GetGal(weights_id); + const vector& c = project->GetCentroids(); + vector& hs = highlight_state->GetHighlight(); + GdaPolyLine* edge; + std::set w_nodes; + wxPen pen(graph_color, weights_graph_thickness); + for (int i=0; gal_weights && inum_obs; i++) { + GalElement& e = gal_weights->gal[i]; + for (int j=0, jend=e.Size(); jnbr + edge = new GdaPolyLine(c[i]->GetX(),c[i]->GetY(), + c[nbr]->GetX(), c[nbr]->GetY()); + edge->from = i; + edge->to = nbr; + edge->setPen(pen); + edge->setBrush(*wxTRANSPARENT_BRUSH); + foreground_shps.push_back(edge); + w_graph.push_back(edge); + w_nodes.insert(i); + w_nodes.insert(nbr); + + } + } + } + + std::map::iterator it; + for (it = grp_root.begin(); it != grp_root.end(); ++it) { + int row = it->first; + GdaPoint* pt = c[row]; + GdaPoint* circle = new GdaPoint(pt->GetX(), pt->GetY()); + circle->SetRadius(root_radius); + circle->setPen(wxPen(root_color)); + circle->setBrush(*wxTRANSPARENT_BRUSH); + foreground_shps.push_back(circle); + } +} + +void HierachicalMapCanvas::DisplayRightClickMenu(const wxPoint& pos) +{ + wxLogMessage("Entering GroupingMapCanvas::DisplayRightClickMenu"); + // Workaround for right-click not changing window focus in OSX / wxW 3.0 + wxActivateEvent ae(wxEVT_NULL, true, 0, wxActivateEvent::Reason_Mouse); + ((HierachicalMapFrame*) template_frame)->OnActivate(ae); + + wxMenu* optMenu = wxXmlResource::Get()-> + LoadMenu("ID_HIERARCHICAL_MAP_MENU_OPTIONS"); + AddTimeVariantOptionsToMenu(optMenu); + SetCheckMarks(optMenu); + + template_frame->UpdateContextMenuItems(optMenu); + template_frame->PopupMenu(optMenu, pos + GetPosition()); + template_frame->UpdateOptionMenuItems(); + wxLogMessage("Exiting GroupingMapCanvas::DisplayRightClickMenu"); +} + +void HierachicalMapCanvas::ChangeRootSize(int root_sz) +{ + root_radius = root_sz; + full_map_redraw_needed = true; + PopulateCanvas(); +} + +int HierachicalMapCanvas::GetRootSize() +{ + return root_radius; +} + +void HierachicalMapCanvas::ChangeRootColor(wxColour root_clr) +{ + root_color = root_clr; + full_map_redraw_needed = true; + PopulateCanvas(); +} + +wxColour HierachicalMapCanvas::GetRootColor() +{ + return root_color; +} + +wxString HierachicalMapCanvas::GetCanvasTitle() +{ + wxString ttl; + ttl << group_field_nm; + return ttl; +} + +wxString HierachicalMapCanvas::GetVariableNames() +{ + wxString ttl; + ttl << group_field_nm << "/" << root_field_nm; + return ttl; +} + +bool HierachicalMapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, SmoothingType new_map_smoothing) +{ + wxLogMessage("In GroupingMapCanvas::ChangeMapType"); + return false; +} + +void HierachicalMapCanvas::SetCheckMarks(wxMenu* menu) +{ + MapCanvas::SetCheckMarks(menu); +} + +void HierachicalMapCanvas::TimeChange() +{ + wxLogMessage("Entering GroupingMapCanvas::TimeChange"); + wxLogMessage("Exiting GroupingMapCanvas::TimeChange"); +} + +void HierachicalMapCanvas::TimeSyncVariableToggle(int var_index) +{ + wxLogMessage("In GroupingMapCanvas::TimeSyncVariableToggle"); +} + +void HierachicalMapCanvas::UpdateStatusBar() +{ + wxStatusBar* sb = 0; + if (template_frame) { + sb = template_frame->GetStatusBar(); + } + if (!sb) + return; + wxString s; + s << _("#obs=") << project->GetNumRecords() <<" "; + + if ( highlight_state->GetTotalHighlighted() > 0) { + // for highlight from other windows + s << _("#selected=") << highlight_state->GetTotalHighlighted()<< " "; + } + if (mousemode == select && selectstate == start) { + if (total_hover_obs >= 1) { + s << _("#hover obs ") << hover_obs[0]+1; + } + if (total_hover_obs >= 2) { + s << ", "; + s << _("obs ") << hover_obs[1]+1; + } + if (total_hover_obs >= 3) { + s << ", "; + s << _("obs ") << hover_obs[2]+1; + } + if (total_hover_obs >= 4) { + s << ", ..."; + } + } + sb->SetStatusText(s); +} + +//////////////////////////////////////////////////////////////////////////////// +// +// +// +//////////////////////////////////////////////////////////////////////////////// +IMPLEMENT_CLASS(HierachicalMapFrame, MapFrame) + BEGIN_EVENT_TABLE(HierachicalMapFrame, MapFrame) + EVT_ACTIVATE(HierachicalMapFrame::OnActivate) +END_EVENT_TABLE() + +HierachicalMapFrame::HierachicalMapFrame(wxFrame *parent, Project* project, + std::vector vars, + std::vector col_ids, + boost::uuids::uuid w_uuid, + const wxString title, + const wxPoint& pos, + const wxSize& size, const long style) +: MapFrame(parent, project, pos, size, style) +{ + wxLogMessage("Entering GroupingMapFrame::GroupingMapFrame"); + + int width, height; + GetClientSize(&width, &height); + + wxSplitterWindow* splitter_win = new wxSplitterWindow(this,wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D|wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); + splitter_win->SetMinimumPaneSize(10); + + wxPanel* rpanel = new wxPanel(splitter_win); + template_canvas = new HierachicalMapCanvas(rpanel, this, project, vars, + col_ids, w_uuid); + template_canvas->SetScrollRate(1,1); + wxBoxSizer* rbox = new wxBoxSizer(wxVERTICAL); + rbox->Add(template_canvas, 1, wxEXPAND); + rpanel->SetSizer(rbox); + + wxPanel* lpanel = new wxPanel(splitter_win); + template_legend = new MapNewLegend(lpanel, template_canvas, + wxPoint(0,0), wxSize(0,0)); + wxBoxSizer* lbox = new wxBoxSizer(wxVERTICAL); + template_legend->GetContainingSizer()->Detach(template_legend); + lbox->Add(template_legend, 1, wxEXPAND); + lpanel->SetSizer(lbox); + + splitter_win->SplitVertically(lpanel, rpanel, GdaConst::map_default_legend_width); + + wxPanel* toolbar_panel = new wxPanel(this,wxID_ANY, wxDefaultPosition); + wxBoxSizer* toolbar_sizer= new wxBoxSizer(wxVERTICAL); + toolbar = wxXmlResource::Get()->LoadToolBar(toolbar_panel, "ToolBar_MAP"); + SetupToolbar(); + toolbar_sizer->Add(toolbar, 0, wxEXPAND|wxALL); + toolbar_panel->SetSizerAndFit(toolbar_sizer); + + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(toolbar_panel, 0, wxEXPAND|wxALL); + sizer->Add(splitter_win, 1, wxEXPAND|wxALL); + SetSizer(sizer); + + SetAutoLayout(true); + SetTitle(title); + DisplayStatusBar(true); + + Show(true); + wxLogMessage("Exiting GroupingMapFrame::GroupingMapFrame"); +} + +HierachicalMapFrame::~HierachicalMapFrame() +{ + wxLogMessage("In GroupingMapFrame::~GroupingMapFrame"); +} + +void HierachicalMapFrame::OnActivate(wxActivateEvent& event) +{ + wxLogMessage("In GroupingMapFrame::OnActivate"); + if (event.GetActive()) { + RegisterAsActive("GroupingMapFrame", GetTitle()); + } + if ( event.GetActive() && template_canvas ) + template_canvas->SetFocus(); +} + +void HierachicalMapFrame::MapMenus() +{ + wxLogMessage("In GroupingMapFrame::MapMenus"); + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + // Map Options Menus + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_HIERARCHICAL_MAP_MENU_OPTIONS"); + ((MapCanvas*) template_canvas)->AddTimeVariantOptionsToMenu(optMenu); + ((MapCanvas*) template_canvas)->SetCheckMarks(optMenu); + GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); + UpdateOptionMenuItems(); +} + +void HierachicalMapFrame::UpdateOptionMenuItems() +{ + TemplateFrame::UpdateOptionMenuItems(); // set common items first + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + int menu = mb->FindMenu(_("Options")); + if (menu == wxNOT_FOUND) { + wxLogMessage("GroupingMapFrame::UpdateOptionMenuItems: " + "Options menu not found"); + } else { + ((HierachicalMapCanvas*) template_canvas)->SetCheckMarks(mb->GetMenu(menu)); + } +} + +void HierachicalMapFrame::UpdateContextMenuItems(wxMenu* menu) +{ + TemplateFrame::UpdateContextMenuItems(menu); // set common items +} + +void HierachicalMapFrame::OnChangeConnRootSize(wxCommandEvent& event) +{ + int root_size = ((HierachicalMapCanvas*) template_canvas)->GetRootSize(); + wxString root_val; + root_val << root_size; + wxTextEntryDialog dlg(this, "Change Radius Size of Root Observations:", + "", root_val); + if (dlg.ShowModal() == wxID_OK) { + root_val = dlg.GetValue(); + long new_sz; + if (root_val.ToLong(&new_sz)) { + ((HierachicalMapCanvas*) template_canvas)->ChangeRootSize(new_sz); + } + } +} + +void HierachicalMapFrame::OnChangeConnRootColor(wxCommandEvent& event) +{ + wxColour root_color = ((HierachicalMapCanvas*) template_canvas)->GetRootColor(); + root_color = GeneralWxUtils::PickColor(this, root_color); + ((HierachicalMapCanvas*) template_canvas)->ChangeRootColor(root_color); +} + +void HierachicalMapFrame::update(WeightsManState* o) +{ +} diff --git a/Explore/GroupingMapView.h b/Explore/GroupingMapView.h new file mode 100644 index 000000000..74ee199af --- /dev/null +++ b/Explore/GroupingMapView.h @@ -0,0 +1,126 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_GROUPING_MAP_VIEW_H__ +#define __GEODA_CENTER_GROUPING_MAP_VIEW_H__ + +#include +#include +#include "MapNewView.h" +#include "../GdaConst.h" + +using namespace std; + +class HierachicalMapSelectDlg : public wxDialog +{ + std::vector vars; + std::vector col_ids; + boost::uuids::uuid uid; + wxString title; + Project* project; + TableInterface* table_int; + wxChoice* group_var_list; + wxChoice* root_var_list; + std::map name_to_nm; + std::map name_to_tm_id; + +public: + HierachicalMapSelectDlg(wxFrame *parent, Project* project); + virtual ~HierachicalMapSelectDlg(); + + void OnOK( wxCommandEvent& event ); + std::vector GetVarInfo(); + std::vector GetColIds(); + wxString GetTitle(); + boost::uuids::uuid GetWUID(); +}; + +class HierachicalMapCanvas : public MapCanvas +{ + DECLARE_CLASS(GroupingMapCanvas) + + wxString group_field_nm; + wxString root_field_nm; + int root_field_id; + + std::map grp_root; + int root_radius; + wxColour root_color; + + virtual void DrawConnectivityGraph(wxMemoryDC &dc); + virtual void CreateConnectivityGraph(); + +public: + HierachicalMapCanvas(wxWindow *parent, + TemplateFrame* t_frame, + Project* project, + std::vector vars, + std::vector col_ids, + boost::uuids::uuid w_uuid, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + virtual ~HierachicalMapCanvas(); + + virtual void DisplayRightClickMenu(const wxPoint& pos); + virtual wxString GetCanvasTitle(); + virtual wxString GetVariableNames(); + virtual bool ChangeMapType(CatClassification::CatClassifType new_map_theme, + SmoothingType new_map_smoothing); + virtual void SetCheckMarks(wxMenu* menu); + virtual void TimeChange(); + virtual void TimeSyncVariableToggle(int var_index); + virtual void UpdateStatusBar(); + + void ChangeRootSize(int root_size); + void ChangeRootColor(wxColour root_color); + int GetRootSize(); + wxColour GetRootColor(); + + DECLARE_EVENT_TABLE() +}; + + +class HierachicalMapFrame : public MapFrame +{ + DECLARE_CLASS(GroupingMapFrame) +public: + HierachicalMapFrame(wxFrame *parent, + Project* project, + std::vector vars, + std::vector col_ids, + boost::uuids::uuid w_uuid, + const wxString title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = GdaConst::map_default_size, + const long style = wxDEFAULT_FRAME_STYLE); + virtual ~HierachicalMapFrame(); + + void OnActivate(wxActivateEvent& event); + virtual void MapMenus(); + virtual void UpdateOptionMenuItems(); + virtual void UpdateContextMenuItems(wxMenu* menu); + virtual void update(WeightsManState* o); + + void OnChangeConnRootSize(wxCommandEvent& event); + void OnChangeConnRootColor(wxCommandEvent& event); + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/Explore/HistogramView.cpp b/Explore/HistogramView.cpp index 0a59be923..4f2e370c6 100644 --- a/Explore/HistogramView.cpp +++ b/Explore/HistogramView.cpp @@ -573,6 +573,7 @@ void HistogramCanvas::PopulateCanvas() last_scale_trans.SetData(x_min, y_min, x_max, y_max); if (show_axes) { + // frequencies always show integer numbers axis_scale_y = AxisScale(0, y_max, 5, axis_display_precision); y_max = axis_scale_y.scale_max; y_axis = new GdaAxis(_("Frequency"), axis_scale_y, @@ -580,7 +581,9 @@ void HistogramCanvas::PopulateCanvas() -9, 0); foreground_shps.push_back(y_axis); - axis_scale_x = AxisScale(0, max_ival_val[time], 5, axis_display_precision); + axis_scale_x = AxisScale(0, max_ival_val[time], 5, + axis_display_precision, + axis_display_fixed_point); //shps_orig_xmax = axis_scale_x.scale_max; axis_scale_x.data_min = min_ival_val[time]; axis_scale_x.data_max = max_ival_val[time]; @@ -613,8 +616,9 @@ void HistogramCanvas::PopulateCanvas() if (i==0) { axis_scale_x.tics[i] = axis_scale_x.data_min; - wxString tic_str; - tic_str << axis_scale_x.data_min; + wxString tic_str = GenUtils::DblToStr(axis_scale_x.data_min, + axis_display_precision, + axis_display_fixed_point); axis_scale_x.tics_str[i] = tic_str; GdaShapeText* brk; @@ -629,7 +633,8 @@ void HistogramCanvas::PopulateCanvas() else brk = new GdaShapeText(GenUtils::DblToStr(axis_scale_x.data_min, - axis_display_precision), + axis_display_precision, + axis_display_fixed_point), *GdaConst::small_font, wxRealPoint(x0, y0), 0, GdaShapeText::h_center, @@ -640,8 +645,9 @@ void HistogramCanvas::PopulateCanvas() if (i mean && sd > 0) { sd_d = (ival_min - mean)/sd; } - vals[0] << GenUtils::DblToStr(ival_min, 3); - vals[1] << GenUtils::DblToStr(ival_max, 3); + vals[0] << GenUtils::DblToStr(ival_min, display_precision, display_precision_fixed_point); + vals[1] << GenUtils::DblToStr(ival_max, display_precision, display_precision_fixed_point); vals[2] << ival_obs_cnt[t][i]; - vals[3] << GenUtils::DblToStr(p, 3); - vals[4] << GenUtils::DblToStr(sd_d, 3); + vals[3] << GenUtils::DblToStr(p, display_precision, display_precision_fixed_point); + vals[4] << GenUtils::DblToStr(sd_d, display_precision, display_precision_fixed_point); std::vector attribs(0); // undefined s = new GdaShapeTable(vals, attribs, rows, cols, @@ -1207,7 +1216,7 @@ void HistogramCanvas::UpdateStatusBar() } else if (ival_min > mean && sd > 0) { sd_d = (ival_min - mean)/sd; } - s << ", sd from mean: " << GenUtils::DblToStr(sd_d, 3); + s << ", sd from mean: " << GenUtils::DblToStr(sd_d, display_precision, display_precision_fixed_point); sb->SetStatusText(s); } diff --git a/Explore/LineChartCanvas.cpp b/Explore/LineChartCanvas.cpp index c601de697..e45720971 100644 --- a/Explore/LineChartCanvas.cpp +++ b/Explore/LineChartCanvas.cpp @@ -57,7 +57,9 @@ LineChartCanvas::LineChartCanvas(wxWindow *parent, TemplateFrame* t_frame, : TemplateCanvas(parent, t_frame, project, project->GetHighlightState(), pos, size, false, true), lcs(lcs_), lc_canv_cb(lc_canv_cb_), summ_avg_circs(4, (GdaCircle*) 0), -y_axis_precision(2), fixed_scale_over_change(true), prev_y_axis_min(DBL_MIN), prev_y_axis_max(DBL_MAX) +y_axis_precision(2), y_axis_prec_fixed_point(false), +fixed_scale_over_change(true), +prev_y_axis_min(DBL_MIN), prev_y_axis_max(DBL_MAX) { LOG_MSG("Entering LineChartCanvas::LineChartCanvas"); last_scale_trans.SetFixedAspectRatio(false); @@ -307,9 +309,10 @@ void LineChartCanvas::UpdateYAxis(wxString y_min, wxString y_max) def_y_max = y_max; } -void LineChartCanvas::UpdateYAxisPrecision(int precision_s) +void LineChartCanvas::UpdateYAxisPrecision(int precision_s, bool fixed_point) { y_axis_precision = precision_s; + y_axis_prec_fixed_point = fixed_point; } void LineChartCanvas::PopulateCanvas() @@ -380,7 +383,8 @@ void LineChartCanvas::PopulateCanvas() if (!def_y_max.IsEmpty()) def_y_max.ToDouble(&axis_max); - axis_scale_y = AxisScale(axis_min, axis_max, 4, y_axis_precision); + axis_scale_y = AxisScale(axis_min, axis_max, 4, y_axis_precision, + y_axis_prec_fixed_point); scaleY = 100.0 / (axis_scale_y.scale_range); diff --git a/Explore/LineChartCanvas.h b/Explore/LineChartCanvas.h index 9323b637c..d2346d743 100644 --- a/Explore/LineChartCanvas.h +++ b/Explore/LineChartCanvas.h @@ -55,7 +55,7 @@ class LineChartCanvas : public TemplateCanvas void UpdateYAxis(wxString y_min="", wxString y_max=""); - void UpdateYAxisPrecision(int precision_s); + void UpdateYAxisPrecision(int precision_s, bool fixed_point=false); double GetYAxisMinVal() {return axis_scale_y.scale_min;} double GetYAxisMaxVal() {return axis_scale_y.scale_max;} @@ -77,7 +77,7 @@ class LineChartCanvas : public TemplateCanvas AxisScale axis_scale_y; double scaleY; int y_axis_precision; - + bool y_axis_prec_fixed_point; double prev_y_axis_min; double prev_y_axis_max; diff --git a/Explore/LineChartView.cpp b/Explore/LineChartView.cpp index 788601171..2c55975e9 100644 --- a/Explore/LineChartView.cpp +++ b/Explore/LineChartView.cpp @@ -83,6 +83,7 @@ tms_subset0_tm_inv(1, true), tms_subset1_tm_inv(1, false), regReportDlg(0), def_y_precision(2), +def_y_prec_fixed_point(false), use_def_y_range(false), has_selection(1), has_excluded(1), @@ -96,13 +97,6 @@ fixed_scale_over_change(true) // Init variables supports_timeline_changes = true; - int n_cols = project->GetTableInt()->GetNumberCols(); - for (int i=0; iGetTableInt()->IsColNumeric(i)) { - wxString col_name = project->GetTableInt()->GetColName(i); - variable_names.push_back(col_name); - } - } // UI /* @@ -299,9 +293,16 @@ void LineChartFrame::InitVariableChoiceCtrl() wxLogMessage("ERROR: Table interface NULL."); return; } - - int n_times = table_int->GetTimeSteps(); + variable_names.clear(); + std::vector col_id_map; + project->GetTableInt()->FillNumericColIdMap(col_id_map); + for (size_t i=0; iGetTableInt()->GetColName(id); + variable_names.push_back(col_name); + } + int n_times = table_int->GetTimeSteps(); wxString time_range_str(""); if (n_times == 1) { time_range_str = wxString::Format("(%s)", table_int->GetTimeString(0)); @@ -310,7 +311,9 @@ void LineChartFrame::InitVariableChoiceCtrl() table_int->GetTimeString(0), table_int->GetTimeString(n_times-1)); } - + wxString old_sel = choice_variable->GetStringSelection(); + choice_variable->Clear(); + int sel_idx = 0; for (size_t i=0, sz=variable_names.size(); iFindColId(col_name); @@ -318,11 +321,14 @@ void LineChartFrame::InitVariableChoiceCtrl() col_name = col_name + " " + time_range_str; } choice_variable->Append(col_name); + if (!old_sel.IsEmpty() && old_sel == col_name) { + sel_idx = i; + } } - choice_variable->SetSelection(0); choice_variable->Connect(wxEVT_CHOICE, wxCommandEventHandler(LineChartFrame::OnVariableChoice), NULL, this); + choice_variable->SetSelection(sel_idx); } void LineChartFrame::InitGroupsChoiceCtrl() @@ -862,13 +868,15 @@ void LineChartFrame::OnAdjustYAxis(wxCommandEvent& event) void LineChartFrame::OnAdjustYAxisPrecision(wxCommandEvent& event) { wxLogMessage("In LineChartFrame:OnAdjustYAxisPrecision()"); - AxisLabelPrecisionDlg dlg(def_y_precision, this); + SetDisplayPrecisionDlg dlg(def_y_precision, def_y_prec_fixed_point, this); if (dlg.ShowModal () != wxID_OK) return; def_y_precision = dlg.precision; - + def_y_prec_fixed_point = dlg.fixed_point; + for (size_t i=0, sz=line_charts.size(); iUpdateYAxisPrecision(def_y_precision); + line_charts[i]->UpdateYAxisPrecision(def_y_precision, + def_y_prec_fixed_point); line_charts[i]->UpdateAll(); } @@ -1520,7 +1528,8 @@ void LineChartFrame::RunDIDTest() do_white_test); m_resid1= m_DR->GetResidual(); - printAndShowClassicalResults(row_nm, y, table_int->GetTableName(), wxEmptyString, m_DR, n, nX, do_white_test); + printAndShowClassicalResults(row_nm, y, table_int->GetTableName(), + wxEmptyString, m_DR, n, nX, do_white_test); m_yhat1 = m_DR->GetYHAT(); @@ -1533,10 +1542,11 @@ void LineChartFrame::RunDIDTest() // display regression in dialog if (regReportDlg == 0) { - regReportDlg = new RegressionReportDlg(this, logReport, wxID_ANY, "Diff-in-Diff Regression Report"); - regReportDlg->Connect(wxEVT_DESTROY, wxWindowDestroyEventHandler(LineChartFrame::OnReportClose), NULL, this); - - + regReportDlg = new RegressionReportDlg(this, logReport, wxID_ANY, + "Diff-in-Diff Regression Report"); + regReportDlg->Connect(wxEVT_DESTROY, + wxWindowDestroyEventHandler(LineChartFrame::OnReportClose), + NULL, this); } else { regReportDlg->AddNewReport(logReport); } @@ -1645,6 +1655,7 @@ void LineChartFrame::update(HLStateInt* o) /** Implementation of TableStateObserver interface */ void LineChartFrame::update(TableState* o) { + InitVariableChoiceCtrl(); UpdateDataMapFromVarMan(); const std::vector& hs(highlight_state->GetHighlight()); for (size_t i=0, sz=lc_stats.size(); iUpdateAll(); } if (def_y_precision !=2) { - canvas->UpdateYAxisPrecision(def_y_precision); + canvas->UpdateYAxisPrecision(def_y_precision, + def_y_prec_fixed_point); canvas->UpdateAll(); } bag_szr->Add(canvas, 1, wxEXPAND); diff --git a/Explore/LineChartView.h b/Explore/LineChartView.h index 3a99aef9b..a87e18081 100644 --- a/Explore/LineChartView.h +++ b/Explore/LineChartView.h @@ -224,6 +224,7 @@ public HighlightStateObserver, public LineChartCanvasCallbackInt OGRTable* mem_table_int; int def_y_precision; + bool def_y_prec_fixed_point; bool use_def_y_range; wxString def_y_min; wxString def_y_max; diff --git a/Explore/LisaCoordinator.cpp b/Explore/LisaCoordinator.cpp index 8e2ce16c6..24cd3f949 100644 --- a/Explore/LisaCoordinator.cpp +++ b/Explore/LisaCoordinator.cpp @@ -106,7 +106,7 @@ LisaCoordinator(wxString weights_path, last_seed_used = 0; reuse_last_seed = false; isBivariate = false; - + // std::vector var_info; int num_vars = 1; isBivariate = false; @@ -206,7 +206,12 @@ void LisaCoordinator::DeallocateVectors() if (data2_vecs[i]) delete [] data2_vecs[i]; } data2_vecs.clear(); - + + for (int i=0; i undef_res(num_obs, false); - double* smoothed_results = new double[num_obs]; + double* E = new double[num_obs]; // E corresponds to var_info[0] double* P = new double[num_obs]; // P corresponds to var_info[1] // we will only fill data1 for eb_rate_standardized and // further lisa calcs will treat as univariate for (int t=0; t undef_res(num_obs, false); - double* smoothed_results = new double[num_obs]; + double* local_smoothed_results = smoothed_results[time]; double* E = new double[num_obs]; // E corresponds to var_info[0] double* P = new double[num_obs]; // P corresponds to var_info[1] // we will only fill data1 for eb_rate_standardized and @@ -369,7 +376,7 @@ void LisaCoordinator::GetRawData(int time, double* data1, double* data2) P[i] = data[1][time][i]; } bool success = GdaAlgs::RateStandardizeEB(num_obs, P, E, - smoothed_results, + local_smoothed_results, undef_res); if (!success) { for (int i=0; igal; double* _sigLocal = sig_local_vecs[0]; - wxString exePath = GenUtils::GetBasemapCacheDir(); + wxString exePath = GenUtils::GetExeDir(); wxString clPath = exePath + "lisa_kernel.cl"; bool flag = gpu_lisa(clPath.mb_str(), num_obs, permutations, last_seed_used, values, local_moran, w, _sigLocal); diff --git a/Explore/LisaCoordinator.h b/Explore/LisaCoordinator.h index e084e935d..a775bcfe3 100644 --- a/Explore/LisaCoordinator.h +++ b/Explore/LisaCoordinator.h @@ -64,6 +64,7 @@ class LisaCoordinator : public AbstractCoordinator double* sigLocalMoran; // The significances / pseudo p-vals public: + std::vector smoothed_results; // LISA EB std::vector lags_vecs; std::vector local_moran_vecs; std::vector data1_vecs; diff --git a/Explore/LisaMapNewView.cpp b/Explore/LisaMapNewView.cpp index f61879907..2a72b12e4 100644 --- a/Explore/LisaMapNewView.cpp +++ b/Explore/LisaMapNewView.cpp @@ -254,7 +254,7 @@ void LisaMapFrame::OnSaveResult(wxCommandEvent& event) std::vector data; - if (lc->is_diff) { + if (lc->is_diff || lc->is_rate) { data.resize(4); } else { data.resize(3); @@ -297,8 +297,6 @@ void LisaMapFrame::OnSaveResult(wxCommandEvent& event) for (int i=0, iend=lisa_coord->num_obs; iis_diff ) { int t0 = lisa_coord->var_info[0].time; int t1 = lisa_coord->var_info[1].time; @@ -319,7 +317,18 @@ void LisaMapFrame::OnSaveResult(wxCommandEvent& event) data[3].type = GdaConst::double_type; data[3].undefined = &undefs; } - + + std::vector ebr(lisa_coord->num_obs); + if (lc->is_rate) { + for (int i=0, iend=lisa_coord->num_obs; ismoothed_results[t][i]; + } + data[3].d_val = &ebr; + data[3].label = "EB Rates"; + data[3].field_default = "LISA_EB"; + data[3].type = GdaConst::double_type; + data[3].undefined = &undefs; + } SaveToTableDlg dlg(project, this, data, "Save Results: LISA", wxDefaultPosition, wxSize(400,400)); diff --git a/Explore/LisaMapNewView.h b/Explore/LisaMapNewView.h index 22dcc7a73..a522da519 100644 --- a/Explore/LisaMapNewView.h +++ b/Explore/LisaMapNewView.h @@ -50,12 +50,12 @@ class LisaMapCanvas : public AbstractMapCanvas virtual wxString GetCanvasTitle(); virtual wxString GetVariableNames(); bool is_diff; - + bool is_rate; // true = Moran Empirical Bayes Rate Smoothing + protected: LisaCoordinator* lisa_coord; bool is_bi; // true = Bivariate, false = Univariate - bool is_rate; // true = Moran Empirical Bayes Rate Smoothing - + wxString str_highhigh; wxString str_highlow; wxString str_lowlow; diff --git a/Explore/LisaScatterPlotView.cpp b/Explore/LisaScatterPlotView.cpp index 9525d5b83..de022052c 100644 --- a/Explore/LisaScatterPlotView.cpp +++ b/Explore/LisaScatterPlotView.cpp @@ -309,7 +309,6 @@ void LisaScatterPlotCanvas::TimeChange() //SetCurrentCanvasTmStep(ref_time - ref_time_min); invalidateBms(); isResize = true; - //PopulateCanvas(); Refresh(); } @@ -453,20 +452,12 @@ void LisaScatterPlotCanvas::FixedScaleVariableToggle(int var_index) void LisaScatterPlotCanvas::OnIdle(wxIdleEvent& event) { if (isResize) { - - int vs_w, vs_h; - GetClientSize(&vs_w, &vs_h); - last_scale_trans.SetView(vs_w, vs_h); - resizeLayerBms(vs_w, vs_h); - ResizeSelectableShps(); - PopulateCanvas(); - isResize = false; event.RequestMore(); // render continuously, not only once on idle @@ -507,6 +498,18 @@ void LisaScatterPlotCanvas::ResizeSelectableShps(int virtual_scrn_w, layer2_valid = false; } +void LisaScatterPlotCanvas::SetAxisDisplayPrecision(int n) +{ + isResize = true; + TemplateCanvas::SetAxisDisplayPrecision(n); +} + +void LisaScatterPlotCanvas::SetDisplayPrecision(int prec) +{ + isResize = true; + TemplateCanvas::SetDisplayPrecision(prec); +} + void LisaScatterPlotCanvas::PopulateCanvas() { @@ -664,10 +667,8 @@ void LisaScatterPlotCanvas::PopulateCanvas() y_axis_through_origin1->setPen(*GdaConst::scatterplot_origin_axes_pen); y_axis_through_origin1->applyScaleTrans(ex_scale); } - - wxString str = wxString::Format( _("selected: %.4f"), - regressionXYselected.beta); - + wxString str = GenUtils::DblToStr(regressionXYselected.beta, + display_precision, display_precision_fixed_point); morans_sel_text = new GdaShapeText(str, *GdaConst::small_font, wxRealPoint(50, 100), 0, GdaShapeText::h_center, @@ -676,23 +677,19 @@ void LisaScatterPlotCanvas::PopulateCanvas() morans_sel_text->setPen(wxPen(*wxRED)); morans_sel_text->applyScaleTrans(sub_scale); - - wxString str1 = wxString::Format(_("unselected: %.4f"), - regressionXYexcluded.beta); + wxString str1 = GenUtils::DblToStr(regressionXYexcluded.beta, + display_precision, display_precision_fixed_point); morans_unsel_text = new GdaShapeText(str1, - *GdaConst::small_font, - wxRealPoint(50, 100), 0, - GdaShapeText::h_center, - GdaShapeText::v_center, - 0, -15); - + *GdaConst::small_font, + wxRealPoint(50, 100), 0, + GdaShapeText::h_center, + GdaShapeText::v_center, + 0, -15); morans_unsel_text->setPen(wxPen(*wxBLACK)); morans_unsel_text->applyScaleTrans(ex_scale); foreground_shps.push_back(morans_sel_text); foreground_shps.push_back(morans_unsel_text); - } - var_info = var_info_orig; } @@ -840,12 +837,12 @@ void LisaScatterPlotCanvas::PopCanvPreResizeShpsHook() { // if has highlighted, then the text will be added after RegimeMoran() wxString s("Moran's I: "); - s << regressionXY.beta; + s << GenUtils::DblToStr(regressionXY.beta, display_precision, display_precision_fixed_point); int t = var_info_orig[0].time-var_info_orig[0].time_min; - if (t >= lisa_coord->Gal_vecs.size()) { - return; - } + if (is_diff) t = 0; // differential case + if (t >= lisa_coord->Gal_vecs.size()) return; + GalWeight* w = lisa_coord->Gal_vecs[t]; GalElement* gal = w->gal; bool has_island = false; @@ -941,11 +938,9 @@ void LisaScatterPlotCanvas::SaveMoranI() std::vector lag(num_obs); std::vector diff(num_obs); - int xt = sp_var_info[0].time-sp_var_info[0].time_min; int yt = sp_var_info[1].time-sp_var_info[1].time_min; - for (int i=0; i data; - if (is_diff) { + if (is_diff || is_rate) { data.resize(3); } else { data.resize(2); @@ -984,7 +979,19 @@ void LisaScatterPlotCanvas::SaveMoranI() data[2].type = GdaConst::double_type; data[2].undefined = &XYZ_undef; } - + + std::vector ebr(lisa_coord->num_obs); + if (is_rate) { + int t = var_info_orig[0].time-var_info_orig[0].time_min; + for (int i=0, iend=lisa_coord->num_obs; ismoothed_results[t][i]; + } + data[2].d_val = &ebr; + data[2].label = "EB Rates"; + data[2].field_default = "MORAN_EB"; + data[2].type = GdaConst::double_type; + data[2].undefined = &XYZ_undef; + } SaveToTableDlg dlg(project, this, data, title, wxDefaultPosition, wxSize(400,400)); dlg.ShowModal(); diff --git a/Explore/LisaScatterPlotView.h b/Explore/LisaScatterPlotView.h index fa676cd0d..4c5af1da3 100644 --- a/Explore/LisaScatterPlotView.h +++ b/Explore/LisaScatterPlotView.h @@ -51,6 +51,8 @@ class LisaScatterPlotCanvas : public ScatterNewPlotCanvas virtual void UpdateSelection(bool shiftdown, bool pointsel); virtual void ResizeSelectableShps(int virtual_scrn_w=0, int virtual_scrn_h=0); virtual void OnIdle(wxIdleEvent& event); + virtual void SetDisplayPrecision(int n); + virtual void SetAxisDisplayPrecision(int n); //virtual void OnIdle(wxIdleEvent& event); void ShowRandomizationDialog(int permutation); diff --git a/Explore/LocalGearyCoordinator.cpp b/Explore/LocalGearyCoordinator.cpp index eb77a744c..cd1994995 100644 --- a/Explore/LocalGearyCoordinator.cpp +++ b/Explore/LocalGearyCoordinator.cpp @@ -994,8 +994,10 @@ void LocalGearyCoordinator::CalcPseudoP_range(int obs_start, int obs_end, uint64 // positive && high-high if (cluster[cnt] == 1) cluster[cnt] = 1; // positive && low-low if (cluster[cnt] == 2) cluster[cnt] = 2; // positive && but in outlier qudrant: other pos - if (_cluster[cnt] > 2 && _cluster[cnt] < 5) // ignore neighborless & undefined + if (_cluster[cnt] > 2 && _cluster[cnt] < 5) { + // ignore neighborless & undefined _cluster[cnt] = 3; + } } } else { // negative lisasign[cnt] = -1 @@ -1006,7 +1008,7 @@ void LocalGearyCoordinator::CalcPseudoP_range(int obs_start, int obs_end, uint64 } if (local_geary_type == multivariate) { if (_cluster[cnt] < 2) // ignore neighborless & undefined - _cluster[cnt] = 0; // for multivar, only show significant positive (similar) + _cluster[cnt] = 2; // for multivar, only show significant positive (similar) } else { // negative if (_cluster[cnt] < 5) // ignore neighborless & undefined diff --git a/Explore/LocalGearyMapNewView.cpp b/Explore/LocalGearyMapNewView.cpp index f9fdab281..af0c0a073 100644 --- a/Explore/LocalGearyMapNewView.cpp +++ b/Explore/LocalGearyMapNewView.cpp @@ -336,7 +336,7 @@ void LocalGearyMapCanvas::CreateAndUpdateCategories() if (is_clust) { if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { - num_cats += 2; + num_cats += 3; } else if (local_geary_coord->local_geary_type == LocalGearyCoordinator::bivariate) { num_cats += 3; } else { @@ -353,15 +353,16 @@ void LocalGearyMapCanvas::CreateAndUpdateCategories() if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { cat_data.SetCategoryLabel(t, 1, str_positive); cat_data.SetCategoryColor(t, 1, lbl_color_dict[str_positive]); - + cat_data.SetCategoryLabel(t, 2, str_negative); + cat_data.SetCategoryColor(t, 2, lbl_color_dict[str_negative]); if (local_geary_coord->GetHasIsolates(t) && local_geary_coord->GetHasUndefined(t)) { - isolates_cat = 2; - undefined_cat = 3; + isolates_cat = 3; + undefined_cat = 4; } else if (local_geary_coord->GetHasUndefined(t)) { - undefined_cat = 2; + undefined_cat = 3; } else if (local_geary_coord->GetHasIsolates(t)) { - isolates_cat = 2; + isolates_cat = 3; } } else if (local_geary_coord->local_geary_type == LocalGearyCoordinator::bivariate) { @@ -410,11 +411,11 @@ void LocalGearyMapCanvas::CreateAndUpdateCategories() } if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { for (int i=0, iend=local_geary_coord->num_obs; i sig_cutoff && cluster[i] != 2 && cluster[i] != 3) { + if (p[i] > sig_cutoff && cluster[i] != 3 && cluster[i] != 4) { cat_data.AppendIdToCategory(t, 0, i); // not significant - } else if (cluster[i] == 2) { - cat_data.AppendIdToCategory(t, isolates_cat, i); } else if (cluster[i] == 3) { + cat_data.AppendIdToCategory(t, isolates_cat, i); + } else if (cluster[i] == 4) { cat_data.AppendIdToCategory(t, undefined_cat, i); } else { cat_data.AppendIdToCategory(t, cluster[i], i); @@ -499,11 +500,11 @@ void LocalGearyMapCanvas::CreateAndUpdateCategories() int s_f = local_geary_coord->GetSignificanceFilter(); if (local_geary_coord->local_geary_type == LocalGearyCoordinator::multivariate) { for (int i=0, iend=local_geary_coord->num_obs; i sig_cutoff && cluster[i] != 2 && cluster[i] != 3) { + if (p[i] > sig_cutoff && cluster[i] != 3 && cluster[i] != 4) { cat_data.AppendIdToCategory(t, 0, i); // not significant - } else if (cluster[i] == 2) { - cat_data.AppendIdToCategory(t, isolates_cat, i); } else if (cluster[i] == 3) { + cat_data.AppendIdToCategory(t, isolates_cat, i); + } else if (cluster[i] == 4) { cat_data.AppendIdToCategory(t, undefined_cat, i); } else { //cat_data.AppendIdToCategory(t, (sigCat[i]-s_f)+1, i); diff --git a/Explore/MLJCCoordinator.cpp b/Explore/MLJCCoordinator.cpp index 08a575bba..76a0291aa 100644 --- a/Explore/MLJCCoordinator.cpp +++ b/Explore/MLJCCoordinator.cpp @@ -468,7 +468,7 @@ void JCCoordinator::CalcPseudoP() GalElement* w = Gal_vecs[t]->gal; double* _sigLocal = sig_local_jc_vecs[t]; - wxString exePath = GenUtils::GetBasemapCacheDir(); + wxString exePath = GenUtils::GetExeDir(); wxString clPath = exePath + "localjc_kernel.cl"; bool flag = gpu_localjoincount(clPath.mb_str(), num_obs, permutations, last_seed_used, num_vars, zz, local_jc, w, _sigLocal); diff --git a/Explore/MapLayer.cpp b/Explore/MapLayer.cpp index 2e8e32614..80e7fc010 100644 --- a/Explore/MapLayer.cpp +++ b/Explore/MapLayer.cpp @@ -43,7 +43,9 @@ BackgroundMapLayer::BackgroundMapLayer(wxString name, // this is for map boundary only shape_type = layer_proxy->GetOGRGeometries(geoms, sr); field_names = layer_proxy->GetIntegerFieldNames(); + num_field_names = layer_proxy->GetNumericFieldNames(); key_names = layer_proxy->GetIntegerAndStringFieldNames(); + layer_proxy->GetExtent(minx, miny, maxx, maxy, sr); for (int i=0; iGetExtent(minx, miny, maxx, maxy); + _minx = minx; + _miny = miny; + _maxx = maxx; + _maxy = maxy; } void BackgroundMapLayer::CleanMemory() @@ -232,9 +237,14 @@ BackgroundMapLayer* BackgroundMapLayer::Clone(bool clone_style) copy->SetShapeType(shape_type); copy->SetKeyNames(key_names); copy->SetFieldNames(field_names); + copy->SetNumericFieldNames(num_field_names); copy->associated_layers = associated_layers; copy->associated_lines = associated_lines; - + copy->minx = minx; + copy->miny = miny; + copy->maxx = maxx; + copy->maxy = maxy; + if (clone_style) { copy->SetPenColour(pen_color); copy->SetBrushColour(brush_color); @@ -262,6 +272,27 @@ int BackgroundMapLayer::GetNumRecords() return shapes.size(); } +bool BackgroundMapLayer::GetDoubleColumnData(wxString field_name, + vector& data) +{ + if (field_name.empty()) return false; + + if (data.empty()) { + data.resize(shapes.size()); + } + // this function is for finding numeric data from multi-layer + GdaConst::FieldType type = layer_proxy->GetFieldType(field_name); + int col_idx = layer_proxy->GetFieldPos(field_name); + if (type == GdaConst::double_type || + type == GdaConst::long64_type) { + for (int i=0; idata[i]->GetFieldAsDouble(col_idx); + } + return true; + } + return false; +} + bool BackgroundMapLayer::GetIntegerColumnData(wxString field_name, vector& data) { if (data.empty()) { @@ -319,6 +350,16 @@ vector BackgroundMapLayer::GetIntegerFieldNames() return field_names; } +vector BackgroundMapLayer::GetNumericFieldNames() +{ + return num_field_names; +} + +void BackgroundMapLayer::SetNumericFieldNames(vector& names) +{ + num_field_names = names; +} + vector BackgroundMapLayer::GetKeyNames() { return key_names; @@ -401,7 +442,7 @@ void BackgroundMapLayer::ShowBoundary(bool show) show_boundary = show; if (show) { if (map_boundary == NULL) { - map_boundary = OGRLayerProxy::GetMapBoundary(geoms); + map_boundary = OGRLayerProxy::DissolvePolygons(geoms); } } } diff --git a/Explore/MapLayer.hpp b/Explore/MapLayer.hpp index 9b479e4a2..4cccc8a79 100644 --- a/Explore/MapLayer.hpp +++ b/Explore/MapLayer.hpp @@ -71,6 +71,7 @@ class BackgroundMapLayer : public AssociateLayerInt int num_obs; Shapefile::ShapeType shape_type; vector field_names; + vector num_field_names; vector key_names; bool show_connect_line; @@ -81,7 +82,10 @@ class BackgroundMapLayer : public AssociateLayerInt int opacity; int pen_size; bool show_boundary; - + double minx; + double miny; + double maxx; + double maxy; public: OGRLayerProxy* layer_proxy; @@ -145,7 +149,11 @@ class BackgroundMapLayer : public AssociateLayerInt void SetKeyNames(vector& names); vector GetKeyNames(); - + + void SetNumericFieldNames(vector& names); + vector GetNumericFieldNames(); + bool GetDoubleColumnData(wxString field_name, vector& data); + void SetFieldNames(vector& names); vector GetIntegerFieldNames(); bool GetIntegerColumnData(wxString field_name, vector& data); diff --git a/Explore/MapNewView.cpp b/Explore/MapNewView.cpp index a95889ffd..1774be439 100644 --- a/Explore/MapNewView.cpp +++ b/Explore/MapNewView.cpp @@ -2,7 +2,7 @@ * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved * * This file is part of GeoDa. - * + * * GeoDa is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or @@ -78,17 +78,17 @@ SliderDialog::SliderDialog(wxWindow * parent, long style ) : wxDialog( parent, id, caption, position, size, style) { - + wxLogMessage("Open SliderDialog"); - + canvas = _canvas; - + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); this->SetSizer(topSizer); - + wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL); topSizer->Add(boxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); - + // A text control for the user’s name ID_SLIDER = wxID_ANY; double trasp = (double)canvas->tran_unhighlighted / 255.0; @@ -106,7 +106,7 @@ SliderDialog::SliderDialog(wxWindow * parent, boxSizer->Add(subSizer); wxString txt_transparency = wxString::Format(_("Current Transparency: %.2f"), 1.0 - trasp); - + slider_text = new wxStaticText(this, wxID_ANY, txt_transparency, @@ -114,9 +114,9 @@ SliderDialog::SliderDialog(wxWindow * parent, wxSize(100, -1)); boxSizer->Add(slider_text, 0, wxGROW|wxALL, 5); boxSizer->Add(new wxButton(this, wxID_CANCEL, _("Close")), 0, wxALIGN_CENTER|wxALL, 10); - + topSizer->Fit(this); - + slider->Bind(wxEVT_SLIDER, &SliderDialog::OnSliderChange, this); } @@ -159,21 +159,21 @@ MapCanvas::MapCanvas(wxWindow *parent, TemplateFrame* t_frame, int num_categories_s, boost::uuids::uuid weights_id_s, const wxPoint& pos, const wxSize& size) -: TemplateCanvas(parent, t_frame, project_s, +: TemplateCanvas(parent, t_frame, project_s, project_s->GetHighlightState(), pos, size, true, true), num_obs(project_s->GetNumRecords()), p_datasource(project_s->GetDataSource()), num_time_vals(1), -custom_classif_state(0), +custom_classif_state(0), data(0), s_data(0), var_info(0), table_int(project_s->GetTableInt()), smoothing_type(no_smoothing), -is_rate_smoother(false), +is_rate_smoother(false), full_map_redraw_needed(true), -display_mean_centers(false), +display_mean_centers(false), display_centroids(false), display_weights_graph(false), display_map_boundary(false), @@ -185,7 +185,7 @@ conn_selected_color(GdaConst::conn_select_outline_colour), neighbor_fill_color(GdaConst::conn_neighbor_fill_colour), weights_graph_thickness(1), voronoi_diagram_duplicates_exist(false), -num_categories(num_categories_s), +num_categories(num_categories_s), weights_id(weights_id_s), basemap(0), isDrawBasemap(false), @@ -193,7 +193,8 @@ basemap_bm(0), ref_var_index(-1), tran_unhighlighted(GdaConst::transparency_unhighlighted), print_detailed_basemap(false), -maplayer_state(project_s->GetMapLayerState()) +maplayer_state(project_s->GetMapLayerState()), +is_updating(false) { wxLogMessage("MapCanvas::MapCanvas()"); is_hide = false; @@ -224,7 +225,7 @@ maplayer_state(project_s->GetMapLayerState()) } highlight_state->registerObserver(this); maplayer_state->registerObserver(this); - SetBackgroundStyle(wxBG_STYLE_CUSTOM); // default style + //SetBackgroundStyle(wxBG_STYLE_CUSTOM); // default style isDrawBasemap = GdaConst::use_basemap_by_default; if (isDrawBasemap) { basemap_item = Gda::GetBasemapSelection(GdaConst::default_basemap_selection, @@ -243,10 +244,10 @@ MapCanvas::~MapCanvas() BackgroundMapLayer* ml = fg_maps[i]; delete ml; } - + BOOST_FOREACH( GdaShape* shp, background_maps ) delete shp; BOOST_FOREACH( GdaShape* shp, foreground_maps ) delete shp; - + if (highlight_state) highlight_state->removeObserver(this); if (custom_classif_state) @@ -305,7 +306,7 @@ void MapCanvas::ResetEmptyFlag() empty_dict.clear(); has_shown_empty_shps_msg = false; } - + void MapCanvas::SetupColor() { } @@ -313,19 +314,19 @@ void MapCanvas::SetupColor() void MapCanvas::UpdateSelectionPoints(bool shiftdown, bool pointsel) { TemplateCanvas::UpdateSelectionPoints(shiftdown, pointsel); - + // if multi-layer presents and top layer is not current map if ( fg_maps.empty() ) { UpdateMapTree(); return; } - + BackgroundMapLayer* ml = fg_maps[0]; int nn = ml->GetNumRecords(); vector& geoms = ml->geoms; vector& shapes = ml->shapes; bool selection_changed = false; - + if (!shiftdown) { ml->ResetHighlight(); } @@ -351,7 +352,7 @@ void MapCanvas::UpdateSelectionPoints(bool shiftdown, bool pointsel) ml->SetUnHighlight(i); } } - + } else if (brushtype == circle) { // using quad-tree to do pre-selection double radius = GenUtils::distance(sel1, sel2); @@ -411,18 +412,15 @@ void MapCanvas::DetermineMouseHoverObjects(wxPoint pointsel) if (layer0_bm && display_neighbors && sel1.x==0 && sel1.y==0 && sel2.x==0 && sel2.y==0) { vector& hs = GetSelBitVec(); - if (hover_obs.empty()) { - //highlight_state->SetTotalHighlighted(0); - } else { + if (hover_obs.empty() == false) { for (int i=0; iSetTotalHighlighted(1); } - HighlightState& h_state = *project->GetHighlightState(); - h_state.SetEventType(HLStateInt::delta); - h_state.notifyObservers(); + //highlight_state->SetEventType(HLStateInt::delta); + //highlight_timer->Start(50); layer1_valid = false; DrawLayers(); } @@ -445,21 +443,21 @@ void MapCanvas::UpdatePredefinedColor(const wxString& lbl, const wxColor& new_co } } -void MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc) +vector MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc) { - if (gal_weights == NULL) - return; + vector new_hs(num_obs, false); + + if (gal_weights == NULL) return new_hs; + int ts = cat_data.GetCurrentCanvasTmStep(); int num_obs = project->GetNumRecords(); - HighlightState& hs = *project->GetHighlightState(); - std::vector& h = hs.GetHighlight(); + std::vector& h = highlight_state->GetHighlight(); std::vector add_elem(gal_weights->num_obs, false); std::set::iterator it; ids_of_nbrs.clear(); ids_wo_nbrs.clear(); for (int i=0; inum_obs; i++) { if (h[i]) { @@ -474,7 +472,6 @@ void MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc) } } if (dc.IsOk()) { - vector new_hs(num_obs, false); for (it=ids_of_nbrs.begin(); it!= ids_of_nbrs.end(); it++) { new_hs[*it] = true; } @@ -516,7 +513,7 @@ void MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc) } if (conn_selected_color.Alpha() != 0) { pen.SetColour(conn_selected_color); - } + } for (int i=0; inum_obs; i++) { if (h[i]) { selectable_shps[i]->setPen(pen); @@ -525,14 +522,14 @@ void MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc) } } } + return new_hs; } void MapCanvas::OnSize(wxSizeEvent& event) { if (!ids_of_nbrs.empty() && (display_neighbors || display_weights_graph)) { // in case of display neighbors and weights graph, to prevent adding nbrs again when resizing window - HighlightState& hs = *project->GetHighlightState(); - std::vector& h = hs.GetHighlight(); + std::vector& h = highlight_state->GetHighlight(); for (int i=0; iZoom(is_zoomin, sel2.x, sel2.y, sel1.x, sel1.y); @@ -643,7 +638,7 @@ void MapCanvas::PanShapes() delete faded_layer_bm; faded_layer_bm = NULL; } - + if (isDrawBasemap) { int delta_x = sel2.x - sel1.x; int delta_y = sel2.y - sel1.y; @@ -653,7 +648,7 @@ void MapCanvas::PanShapes() } return; } - + TemplateCanvas::PanShapes(); } @@ -673,7 +668,7 @@ void MapCanvas::OnIdle(wxIdleEvent& event) } ResizeSelectableShps(); event.RequestMore(); // render continuously, not only once on idle - } + } if (!layer2_valid || !layer1_valid || !layer0_valid || (isDrawBasemap && !layerbase_valid) ) { @@ -682,7 +677,8 @@ void MapCanvas::OnIdle(wxIdleEvent& event) } } -void MapCanvas::AddMapLayer(wxString name, BackgroundMapLayer* map_layer, bool is_hide) +void MapCanvas::AddMapLayer(wxString name, BackgroundMapLayer* map_layer, + bool is_hide) { // geometries: projection is matched to current map if (map_layer) { @@ -722,26 +718,22 @@ void MapCanvas::ResizeSelectableShps(int virtual_scrn_w, basemap->ResizeScreen(virtual_scrn_w, virtual_scrn_h); } BOOST_FOREACH( GdaShape* ms, background_shps ) { - if (ms) - ms->projectToBasemap(basemap); + if (ms) ms->projectToBasemap(basemap); } BOOST_FOREACH( GdaShape* ms, foreground_shps ) { - if (ms) - ms->projectToBasemap(basemap); + if (ms) ms->projectToBasemap(basemap); } BOOST_FOREACH( GdaShape* ms, background_maps ) { - if (ms) - ms->projectToBasemap(basemap); + if (ms) ms->projectToBasemap(basemap); } BOOST_FOREACH( GdaShape* ms, foreground_maps ) { - if (ms) - ms->projectToBasemap(basemap); + if (ms) ms->projectToBasemap(basemap); } BOOST_FOREACH( GdaShape* ms, selectable_shps ) { - if (ms) - ms->projectToBasemap(basemap); + if (ms) ms->projectToBasemap(basemap); } - if (!w_graph.empty() && display_weights_graph && boost::uuids::nil_uuid() != weights_id) { + if (!w_graph.empty() && display_weights_graph && + boost::uuids::nil_uuid() != weights_id) { // this is for resizing window with basemap + connectivity graph for (int i=0; iapplyScaleTrans(last_scale_trans); @@ -817,7 +809,7 @@ bool MapCanvas::InitBasemap() return false; } else { basemap = new Gda::Basemap(basemap_item, screen, current_map, - orig_map, GenUtils::GetBasemapCacheDir(), + orig_map, GenUtils::GetBasemapDir(), poCT, scale_factor); } } @@ -936,9 +928,8 @@ void MapCanvas::DrawLayer0() { // draw basemap, background, and all other maps wxMemoryDC dc; - - if (isDrawBasemap) - { + + if (isDrawBasemap) { // use a special color for mask transparency: 244, 243, 242c wxColour maskColor(MASK_R, MASK_G, MASK_B); wxBrush maskBrush(maskColor); @@ -993,7 +984,8 @@ void MapCanvas::DrawLayer2() dc.SetBackground(*wxWHITE_BRUSH); dc.Clear(); dc.DrawBitmap(*layer1_bm, 0, 0); - if (display_weights_graph && boost::uuids::nil_uuid() != weights_id && highlight_state->GetTotalHighlighted()==0) { + if (display_weights_graph && boost::uuids::nil_uuid() != weights_id && + highlight_state->GetTotalHighlighted()==0) { wxPen pen(graph_color, weights_graph_thickness); for (int i=0; isetPen(pen); @@ -1025,13 +1017,11 @@ void MapCanvas::TranslucentLayer0(wxMemoryDC& dc) mask_needed = true; alpha_value = tran_unhighlighted; } - if (draw_highlight && GdaConst::use_cross_hatching == false) - { + if (draw_highlight && GdaConst::use_cross_hatching == false) { mask_needed = true; alpha_value = revert ? GdaConst::transparency_highlighted : tran_unhighlighted; } - if (mask_needed) - { + if (mask_needed) { if (faded_layer_bm == NULL) { wxImage image = layer0_bm->ConvertToImage(); if (!image.HasAlpha()) { @@ -1040,7 +1030,7 @@ void MapCanvas::TranslucentLayer0(wxMemoryDC& dc) unsigned char *alpha=image.GetAlpha(); unsigned char* pixel_data = image.GetData(); int n_pixel = image.GetWidth() * image.GetHeight(); - + int pos = 0; for (int i=0; i< n_pixel; i++) { // check rgb @@ -1117,9 +1107,10 @@ void MapCanvas::TranslucentLayer0(wxMemoryDC& dc) void MapCanvas::SetWeightsId(boost::uuids::uuid id) { weights_id = id; - - bool show_graph = display_weights_graph && boost::uuids::nil_uuid() != weights_id && !w_graph.empty(); - + + bool show_graph = display_weights_graph && + boost::uuids::nil_uuid() != weights_id && !w_graph.empty(); + if (show_graph || display_neighbors) { full_map_redraw_needed = true; PopulateCanvas(); @@ -1137,8 +1128,7 @@ void MapCanvas::DrawHighlightedShapes(wxMemoryDC &dc, bool revert) } } else { DrawHighlight(dc, this); - //DrawHighlighted(dc, revert); - } + } } void MapCanvas::SetHighlight(int idx) @@ -1161,46 +1151,50 @@ int MapCanvas::GetHighlightRecords() return hl_cnt; } +void MapCanvas::SetLegendLabel(int cat, wxString label) +{ + cat_data.SetCategoryLabel(0, cat, label); +} + void MapCanvas::DrawHighlighted(wxMemoryDC &dc, bool revert) { - if (selectable_shps.size() == 0) { - return; - } + if (selectable_shps.size() == 0) return; vector& hs = highlight_state->GetHighlight(); - if (use_category_brushes) { - bool highlight_only = true; - DrawSelectableShapes_dc(dc, highlight_only, revert, GdaConst::use_cross_hatching); - - } else { - for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); + if (display_map_with_graph) { + if (use_category_brushes) { + bool highlight_only = true; + DrawSelectableShapes_dc(dc, highlight_only, revert, + GdaConst::use_cross_hatching); + + } else { + for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); + } } } } // highlight connectivity objects and graphs - bool show_graph = display_weights_graph && boost::uuids::nil_uuid() != weights_id && !w_graph.empty(); - if (show_graph || display_neighbors) { + bool show_graph = display_weights_graph && + boost::uuids::nil_uuid() != weights_id && !w_graph.empty(); + std::vector new_hs; + if (display_map_with_graph && (show_graph || display_neighbors)) { // draw neighbors of selection if needed WeightsManInterface* w_man_int = project->GetWManInt(); GalWeight* gal_weights = w_man_int->GetGal(weights_id); - AddNeighborsToSelection(gal_weights, dc); + new_hs = AddNeighborsToSelection(gal_weights, dc); } if (show_graph) { // draw connectivity graph if needed - const vector& c = project->GetMeanCenters(); - if (highlight_state->GetTotalHighlighted() >0) { - wxPen pen(graph_color, weights_graph_thickness); - for (int i=0; ifrom]) { - e->setPen(pen); - e->paintSelf(dc); - } else { - e->setPen(*wxTRANSPARENT_PEN); - } - } - } + DrawConnectivityGraph(dc); + } + if (is_updating == false && (show_graph || display_neighbors)) { + highlight_timer->Stop(); // make linking start immediately + std::vector old_hs = hs; + hs = new_hs; // set highlights to "current+neighbors" + highlight_state->SetEventType(HLStateInt::delta); + highlight_state->notifyObservers(this); + hs = old_hs; // reset highlights to "current" } } @@ -1208,13 +1202,10 @@ void MapCanvas::SaveThumbnail() { if (MapCanvas::has_thumbnail_saved == false) { RecentDatasource recent_ds; - if (layer_name == recent_ds.GetLastLayerName() && !ds_name.EndsWith("samples.sqlite") && !ds_name.Contains("geodacenter.github.io")) { - wxImage image = layer2_bm->ConvertToImage(); - long current_time_sec = wxGetUTCTime(); wxString file_name; file_name << current_time_sec << ".png"; @@ -1230,8 +1221,8 @@ void MapCanvas::SaveThumbnail() } } -void MapCanvas::DrawSelectableShapes_dc(wxMemoryDC &_dc, bool hl_only, bool revert, - bool use_crosshatch) +void MapCanvas::DrawSelectableShapes_dc(wxMemoryDC &_dc, bool hl_only, + bool revert, bool use_crosshatch) { if (!display_map_with_graph) return; @@ -1240,7 +1231,12 @@ void MapCanvas::DrawSelectableShapes_dc(wxMemoryDC &_dc, bool hl_only, bool reve wxGCDC dc(_dc); helper_DrawSelectableShapes_dc(dc, hs, hl_only, revert, use_crosshatch); #else - helper_DrawSelectableShapes_dc(_dc, hs, hl_only, revert, use_crosshatch); + if (GdaConst::gda_enable_set_transparency_windows) { + wxGCDC dc(_dc); + helper_DrawSelectableShapes_dc(dc, hs, hl_only, revert, use_crosshatch); + } else { + helper_DrawSelectableShapes_dc(_dc, hs, hl_only, revert, use_crosshatch); + } #endif } @@ -1264,7 +1260,7 @@ void MapCanvas::DisplayRightClickMenu(const wxPoint& pos) wxActivateEvent ae(wxEVT_NULL, true, 0, wxActivateEvent::Reason_Mouse); MapFrame* f = dynamic_cast(template_frame); f->OnActivate(ae); - + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_MAP_NEW_VIEW_MENU_OPTIONS"); AddTimeVariantOptionsToMenu(optMenu); f->AppendCustomCategories(optMenu, project->GetCatClassifManager()); @@ -1287,13 +1283,16 @@ void MapCanvas::AddTimeVariantOptionsToMenu(wxMenu* menu) wxMenu* menu1 = new wxMenu(wxEmptyString); for (size_t i=0, sz=GetNumVars(); iAppendCheckItem(GdaConst::ID_TIME_SYNC_VAR1+i, s, s); + wxString s = wxString::Format(_("Synchronize %s with Time Control"), + var_info[i].name); + wxMenuItem* mi; + mi = menu1->AppendCheckItem(GdaConst::ID_TIME_SYNC_VAR1+i, s, s); mi->Check(var_info[i].sync_with_global_time); } } menu->AppendSeparator(); - menu->Append(wxID_ANY, _("Time Variable Options"), menu1, _("Time Variable Options")); + menu->Append(wxID_ANY, _("Time Variable Options"), menu1, + _("Time Variable Options")); } @@ -1304,13 +1303,13 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) double basemap_scale = (double) w / screen_w; double old_scale = scale_factor; scale_factor = 1.0; - + double old_point_radius = point_radius; if (GetShapeType() == points) { point_radius = basemap_scale * point_radius; } deleteLayerBms(); - + layer0_bm = new wxBitmap(w, h, 32); layer1_bm = new wxBitmap(w, h, 32); layer2_bm = new wxBitmap(w, h, 32); @@ -1318,7 +1317,7 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) layer0_valid = false; layer1_valid = false; layer2_valid = false; - + if (isDrawBasemap) { if (print_detailed_basemap) { basemap_bm = new wxBitmap(w, h, 32); @@ -1339,7 +1338,8 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) double shps_orig_xmin = last_scale_trans.orig_data_x_min; double shps_orig_ymin = last_scale_trans.orig_data_y_min; double shps_orig_xmax = last_scale_trans.orig_data_x_max; - Gda::MapLayer maplayer(shps_orig_ymax, shps_orig_xmin, shps_orig_ymin, shps_orig_xmax, poCT); + Gda::MapLayer maplayer(shps_orig_ymax, shps_orig_xmin, shps_orig_ymin, + shps_orig_xmax, poCT); if (poCT && maplayer.IsWGS84Valid()) { if (print_detailed_basemap) { basemap->ResizeScreen(w, h); @@ -1360,7 +1360,8 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) BOOST_FOREACH( GdaShape* ms, foreground_shps ) { if (ms) ms->projectToBasemap(basemap, basemap_scale); } - if (!w_graph.empty() && display_weights_graph && boost::uuids::nil_uuid() != weights_id) { + if (!w_graph.empty() && display_weights_graph && + boost::uuids::nil_uuid() != weights_id) { for (int i=0; iprojectToBasemap(basemap, basemap_scale); @@ -1376,7 +1377,7 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) last_scale_trans.bottom_margin *= basemap_scale; ResizeSelectableShps(w, h); } - + wxMemoryDC layer0_dc(*layer0_bm); layer0_dc.Clear(); if (isDrawBasemap || (highlight_state->GetTotalHighlighted()>0 && @@ -1398,15 +1399,15 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) BOOST_FOREACH( GdaShape* map, background_maps ) { map->paintSelf(layer0_dc); } - + vector& hs = highlight_state->GetHighlight(); helper_DrawSelectableShapes_dc(layer0_dc, hs, false, false, false, true); - + BOOST_FOREACH( GdaShape* map, foreground_maps ) { map->paintSelf(layer0_dc); } layer0_dc.SelectObject(wxNullBitmap); - + wxMemoryDC layer1_dc(*layer1_bm); layer1_dc.Clear(); if (isDrawBasemap) { @@ -1417,15 +1418,15 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) layer1_dc.DrawBitmap(im, 0, 0); } //layer1_dc.SetUserScale(1.0,1.0); - + TranslucentLayer0(layer1_dc); layer1_dc.SelectObject(wxNullBitmap); - + layer1_valid = true; layer2_valid = false; - + DrawLayer2(); - + dc.DrawBitmap(*layer2_bm, 0, 0); // reset point_radius = old_point_radius; @@ -1437,7 +1438,8 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) ReDraw(); } -void MapCanvas::RenderToSVG(wxDC& dc, int w, int h, int map_w, int map_h, int offset_x, int offset_y) +void MapCanvas::RenderToSVG(wxDC& dc, int w, int h, int map_w, int map_h, + int offset_x, int offset_y) { ResizeSelectableShps(w, h); BOOST_FOREACH( GdaShape* shp, background_shps ) { @@ -1446,10 +1448,10 @@ void MapCanvas::RenderToSVG(wxDC& dc, int w, int h, int map_w, int map_h, int of BOOST_FOREACH( GdaShape* shp, background_maps ) { shp->paintSelf(dc); } - + vector& hs = highlight_state->GetHighlight(); helper_DrawSelectableShapes_dc(dc, hs, false, false); - + BOOST_FOREACH( GdaShape* shp, foreground_maps ) { shp->paintSelf(dc); } @@ -1473,41 +1475,48 @@ void MapCanvas::SetCheckMarks(wxMenu* menu) GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_MAPANALYSIS_THEMELESS"), GetCcType() == CatClassification::no_theme); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_QUANTILE_SUBMENU"), + !IS_VAR_STRING); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_CHOROPLETH_PERCENTILE"), + !IS_VAR_STRING); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_HINGE_15"), + !IS_VAR_STRING); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_HINGE_30"), + !IS_VAR_STRING); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_CHOROPLETH_STDDEV"), + !IS_VAR_STRING); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_EQUAL_INTERVALS_SUBMENU"), + !IS_VAR_STRING); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_NATURAL_BREAKS_SUBMENU"), + !IS_VAR_STRING); + GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"), + !IS_VAR_STRING); - //GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_THEMELESS"), !IS_VAR_STRING); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_QUANTILE_SUBMENU"), !IS_VAR_STRING); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_CHOROPLETH_PERCENTILE"), !IS_VAR_STRING); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_HINGE_15"), !IS_VAR_STRING); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_HINGE_30"), !IS_VAR_STRING); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_MAPANALYSIS_CHOROPLETH_STDDEV"), !IS_VAR_STRING); - //GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_COND_VERT_UNIQUE_VALUES"), VERT_VAR_NUM); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_EQUAL_INTERVALS_SUBMENU"), !IS_VAR_STRING); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_NATURAL_BREAKS_SUBMENU"), !IS_VAR_STRING); - GeneralWxUtils::EnableMenuItem(menu, XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"), !IS_VAR_STRING); - CatClassifManager* ccm = project->GetCatClassifManager(); vector titles; ccm->GetTitles(titles); for (size_t j=0; j= GetNumVars()) return wxEmptyString; wxString s(var_info[var].name); if (var_info[var].is_time_variant) { s << " (" << project->GetTableInt()->GetTimeString(var_info[var].time); s << ")"; } - return s; + return s; } void MapCanvas::OnSaveCategories() @@ -1656,7 +1662,7 @@ void MapCanvas::OnSaveCategories() } else { t_name = CatClassification::CatClassifTypeToString(GetCcType()); } - + if (data_undef.size()>0) { wxString label; label << t_name << _(" Categories"); @@ -1668,7 +1674,30 @@ void MapCanvas::OnSaveCategories() undefs[i] = undefs[i] || data_undef[0][t][i]; } } - SaveCategories(title, label, "CATEGORIES", undefs); + std::vector new_fields; + new_fields = SaveCategories(title, label, "CATEGORIES", undefs); + if (new_fields.empty() == false) { + // save meta data to project file + // + // original name : aa + // classification type : quantile + // classification intervals : 1,2,3,4,5 + wxString new_fld_nm = new_fields[0]; + wxString str_cat_num; + str_cat_num << cat_classif_def.num_cats; + + wxString str_orig_nm = GetVariableNames(); + table_int->AddMetaInfo(new_fld_nm, "original_variable", str_orig_nm); + table_int->AddMetaInfo(new_fld_nm, "classification_type", t_name); + table_int->AddMetaInfo(new_fld_nm, "number_of_categories", str_cat_num); + int time = cat_data.GetCurrentCanvasTmStep(); + for (int i=0; iAddMetaInfo(new_fld_nm, key, lbl); + } + } } } @@ -1677,35 +1706,28 @@ void MapCanvas::NewCustomCatClassif() wxLogMessage("MapCanvas::NewCustomCatClassif()"); // Begin by asking for a variable if none yet chosen vector > var_undefs; - + if (var_info.size() == 0) { VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); - if (dlg.ShowModal() != wxID_OK) - return; - + if (dlg.ShowModal() != wxID_OK) return; var_info.resize(1); data.resize(1); data_undef.resize(1); var_info[0] = dlg.var_info[0]; - table_int->GetColData(dlg.col_ids[0], data[0]); table_int->GetColUndefined(dlg.col_ids[0], data_undef[0]); } - + VarInfoAttributeChange(); - var_undefs.resize(num_time_vals); - for (int t=0; t temp_cat_labels; // will be ignored CatClassification::SetBreakPoints(cat_classif_def.breaks, @@ -1740,26 +1758,17 @@ void MapCanvas::NewCustomCatClassif() int tm = var_info[0].time; cat_classif_def.assoc_db_fld_name = table_int->GetColName(col, tm); } - GdaFrame* gda_frame = GdaFrame::GetGdaFrame(); CatClassifFrame* ccf = gda_frame->GetCatClassifFrame(this->useScientificNotation); - - if (!ccf) - return; - + if (!ccf) return; CatClassifState* ccs = ccf->PromptNew(cat_classif_def, "", - var_info[0].name, - var_info[0].time); - if (!ccs) - return; - - if (custom_classif_state) - custom_classif_state->removeObserver(this); - + var_info[0].name, var_info[0].time); + if (!ccs) return; + if (custom_classif_state) custom_classif_state->removeObserver(this); cat_classif_def = ccs->GetCatClassif(); custom_classif_state = ccs; custom_classif_state->registerObserver(this); - + num_categories = cat_classif_def.num_cats; CreateAndUpdateCategories(); PopulateCanvas(); if (template_frame) { @@ -1790,27 +1799,22 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, if (!weights_id_s.is_nil()) { weights_id = weights_id_s; } - if (new_map_theme == CatClassification::custom) { new_map_smoothing = no_smoothing; } - if (smoothing_type != no_smoothing && new_map_smoothing == no_smoothing) { wxString msg = _("The new theme chosen will no longer include rates smoothing. Please use the Rates submenu to choose a theme with rates again."); - wxMessageDialog dlg (this, msg, _("Information"), wxOK | wxICON_INFORMATION); + wxMessageDialog dlg (this, msg, _("Information"), + wxOK | wxICON_INFORMATION); dlg.ShowModal(); return false; } - if (new_map_theme == CatClassification::custom) { CatClassifManager* ccm = project->GetCatClassifManager(); - if (!ccm) - return false; + if (!ccm) return false; CatClassifState* new_ccs = ccm->FindClassifState(custom_classif_title); - if (!new_ccs) - return false; - if (custom_classif_state == new_ccs) - return false; + if (!new_ccs) return false; + if (custom_classif_state == new_ccs) return false; if (custom_classif_state) custom_classif_state->removeObserver(this); custom_classif_state = new_ccs; @@ -1821,45 +1825,38 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, custom_classif_state->removeObserver(this); custom_classif_state = 0; } - if (new_map_smoothing == excess_risk) { new_map_theme = CatClassification::excess_risk_theme; } - int new_num_vars = 1; if (new_map_smoothing != no_smoothing) { new_num_vars = 2; } else if (new_map_theme == CatClassification::no_theme) { new_num_vars = 0; } - int num_vars = GetNumVars(); - if (new_num_vars == 0) { var_info.clear(); if (template_frame) template_frame->ClearAllGroupDependencies(); - } else if (new_num_vars == 1) { if (num_vars == 0) { - if (!use_new_var_info_and_col_ids) - return false; + if (!use_new_var_info_and_col_ids) return false; var_info.resize(1); data.resize(1); s_data.resize(1); data_undef.resize(1); var_info[0] = new_var_info[0]; - if (template_frame) { template_frame->AddGroupDependancy(var_info[0].name); } GdaConst::FieldType f_type = table_int->GetColType(new_col_ids[0]); IS_VAR_STRING = f_type == GdaConst::string_type; - + if (IS_VAR_STRING) table_int->GetColData(new_col_ids[0], s_data[0]); else table_int->GetColData(new_col_ids[0], data[0]); table_int->GetColUndefined(new_col_ids[0], data_undef[0]); - + } else if (num_vars == 1) { if (use_new_var_info_and_col_ids) { var_info[0] = new_var_info[0]; @@ -1868,16 +1865,15 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, } GdaConst::FieldType f_type = table_int->GetColType(new_col_ids[0]); IS_VAR_STRING = f_type == GdaConst::string_type; - + if (IS_VAR_STRING) table_int->GetColData(new_col_ids[0], s_data[0]); else table_int->GetColData(new_col_ids[0], data[0]); - + table_int->GetColUndefined(new_col_ids[0], data_undef[0]); } // else reuse current variable settings and values - + } else { // num_vars == 2 - if (!use_new_var_info_and_col_ids) - return false; + if (!use_new_var_info_and_col_ids) return false; var_info.resize(1); if (template_frame) { template_frame->ClearAllGroupDependencies(); @@ -1897,16 +1893,13 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, // new_map_smoothing are assumed to be valid. if (!use_new_var_info_and_col_ids) return false; - // for rates, the variable has to be numeric IS_VAR_STRING = false; - var_info.clear(); data.clear(); var_info.resize(2); data.resize(2); data_undef.resize(2); - if (template_frame) { template_frame->ClearAllGroupDependencies(); } @@ -1922,28 +1915,29 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, new_map_theme = CatClassification::excess_risk_theme; } } - + if (new_map_theme != CatClassification::custom && custom_classif_state) { custom_classif_state->removeObserver(this); custom_classif_state = 0; } cat_classif_def.cat_classif_type = new_map_theme; smoothing_type = new_map_smoothing; - VarInfoAttributeChange(); + VarInfoAttributeChange(); CreateAndUpdateCategories(); - + if (display_weights_graph && !w_graph.empty()) { full_map_redraw_needed = true; } PopulateCanvas(); - + TemplateLegend* legend = template_frame->GetTemplateLegend(); if (legend != NULL ) { - legend->isDragDropAllowed = new_map_theme == CatClassification::unique_values; + bool flag = new_map_theme == CatClassification::unique_values; + legend->isDragDropAllowed = flag; } - + CallAfter(&MapCanvas::show_empty_shps_msgbox); - + return true; } @@ -1958,11 +1952,12 @@ void MapCanvas::show_empty_shps_msgbox() } wxString msg = _("These are the row numbers of the records without location information."); wxString empty_shps_msg = _("row:\n"); - + for (int i=0; iShow(true); has_shown_empty_shps_msg = true; } @@ -1972,6 +1967,7 @@ void MapCanvas::update(CatClassifState* o) { wxLogMessage("In MapCanvas::update(CatClassifState*)"); cat_classif_def = o->GetCatClassif(); + num_categories = cat_classif_def.num_cats; CreateAndUpdateCategories(); PopulateCanvas(); if (template_frame) { @@ -2000,7 +1996,7 @@ void MapCanvas::update(MapLayerState* o) { wxLogMessage("In MapCanvas::update(MapLayerState*)"); vector local_names = GetLayerNames(); - + // if name not in project, remove for (int i=0; i proj_names = project->GetLayerNames(); for (int i=0; iGetMapLayer(name)->Clone()); } } - + //DisplayMapLayers(); if (template_frame) { MapFrame* m = dynamic_cast(template_frame); @@ -2074,7 +2070,7 @@ void MapCanvas::update(MapLayerState* o) void MapCanvas::RemoveLayer(wxString name) { //project->RemoveLayer(name); - + int del_idx = -1; BackgroundMapLayer* ml = NULL; for (int i=0; inotifyObservers(this); } @@ -2151,7 +2147,7 @@ void MapCanvas::ResetHighlight() void MapCanvas::DrawHighlight(wxMemoryDC& dc, MapCanvas* map_canvas) { vector& hs = highlight_state->GetHighlight(); - + // draw any connected layers map::iterator it; for (it=associated_layers.begin(); it!=associated_layers.end();it++) { @@ -2159,7 +2155,7 @@ void MapCanvas::DrawHighlight(wxMemoryDC& dc, MapCanvas* map_canvas) Association& al = it->second; wxString primary_key = al.first; wxString associated_key = al.second; - + vector pid(num_obs); // e.g. 1 2 3 4 5 if (primary_key.IsEmpty() == false) { GetKeyColumnData(primary_key, pid); @@ -2171,12 +2167,12 @@ void MapCanvas::DrawHighlight(wxMemoryDC& dc, MapCanvas* map_canvas) vector fid; // e.g. 2 2 1 1 3 5 4 4 associated_layer->GetKeyColumnData(associated_key, fid); associated_layer->ResetHighlight(); - + map > aid_idx; for (int i=0; i& ids = aid_idx[aid]; for (int j=0; jIsHide()) { - dc.DrawLine(selectable_shps[i]->center, associated_layer->GetShape(ids[j])->center); + if (associated_lines[associated_layer] && + !associated_layer->IsHide()) { + dc.DrawLine(selectable_shps[i]->center, + associated_layer->GetShape(ids[j])->center); } } } @@ -2217,7 +2215,8 @@ GdaShape* MapCanvas::GetShape(int i) return selectable_shps[i]; } -void MapCanvas::SetLayerAssociation(wxString my_key, AssociateLayerInt* layer, wxString key, bool show_connline) +void MapCanvas::SetLayerAssociation(wxString my_key, AssociateLayerInt* layer, + wxString key, bool show_connline) { associated_layers[layer] = make_pair(my_key, key); associated_lines[layer] = show_connline; @@ -2246,7 +2245,7 @@ void MapCanvas::PopulateCanvas() background_shps.clear(); int canvas_ts = cat_data.GetCurrentCanvasTmStep(); if (!map_valid[canvas_ts]) full_map_redraw_needed = true; - + // Note: only need to delete selectable shapes if the map needs // to be resized. Otherwise, just reuse. if (full_map_redraw_needed) { @@ -2270,12 +2269,12 @@ void MapCanvas::PopulateCanvas() foreground_maps.push_back(fg_map); } } - + BOOST_FOREACH( GdaShape* shp, foreground_shps ) { delete shp; } foreground_shps.clear(); - + w_graph.clear(); - + if ( display_map_boundary ) { GdaPolygon* bg = project->GetMapBoundary(); if (bg) { @@ -2286,12 +2285,14 @@ void MapCanvas::PopulateCanvas() } } - if ( map_valid[canvas_ts] ) { + if ( map_valid[canvas_ts] ) { if (full_map_redraw_needed) { empty_shps_ids = CreateSelShpsFromProj(selectable_shps, project); full_map_redraw_needed = false; - - if (selectable_shps_type == polygons && (display_mean_centers || display_centroids || display_weights_graph)) + + if (selectable_shps_type == polygons && + (display_mean_centers || display_centroids || + display_weights_graph)) { GdaPoint* p; wxPen cent_pen(wxColour(20, 20, 20)); @@ -2315,7 +2316,7 @@ void MapCanvas::PopulateCanvas() } } } - + if (selectable_shps_type == points && display_voronoi_diagram) { GdaPolygon* p; const vector& polys = project->GetVoronoiPolygons(); @@ -2325,32 +2326,8 @@ void MapCanvas::PopulateCanvas() } } if (display_weights_graph) { - // use men centers to draw graph - WeightsManInterface* w_man_int = project->GetWManInt(); - GalWeight* gal_weights = w_man_int->GetGal(weights_id); - const vector& c = project->GetCentroids(); - vector& hs = highlight_state->GetHighlight(); - GdaPolyLine* edge; - std::set w_nodes; - wxPen pen(graph_color, weights_graph_thickness); - for (int i=0; gal_weights && inum_obs; i++) { - GalElement& e = gal_weights->gal[i]; - for (int j=0, jend=e.Size(); jnbr - edge = new GdaPolyLine(c[i]->GetX(),c[i]->GetY(), c[nbr]->GetX(), c[nbr]->GetY()); - edge->from = i; - edge->to = nbr; - edge->setPen(pen); - edge->setBrush(*wxTRANSPARENT_BRUSH); - foreground_shps.push_back(edge); - w_graph.push_back(edge); - w_nodes.insert(i); - w_nodes.insert(nbr); - } - } - } + // use centroids to draw graph + CreateConnectivityGraph(); } } } else { @@ -2364,16 +2341,64 @@ void MapCanvas::PopulateCanvas() ReDraw(); } +void MapCanvas::DrawConnectivityGraph(wxMemoryDC &dc) +{ + std::vector& hs = highlight_state->GetHighlight(); + if (highlight_state->GetTotalHighlighted() >0) { + wxPen pen(graph_color, weights_graph_thickness); + for (int i=0; ifrom]) { + e->setPen(pen); + e->paintSelf(dc); + } else { + e->setPen(*wxTRANSPARENT_PEN); + } + } + } +} + +void MapCanvas::CreateConnectivityGraph() +{ + // use centroids to draw graph + WeightsManInterface* w_man_int = project->GetWManInt(); + GalWeight* gal_weights = w_man_int->GetGal(weights_id); + const vector& c = project->GetCentroids(); + vector& hs = highlight_state->GetHighlight(); + GdaPolyLine* edge; + std::set w_nodes; + wxPen pen(graph_color, weights_graph_thickness); + for (int i=0; gal_weights && inum_obs; i++) { + GalElement& e = gal_weights->gal[i]; + for (int j=0, jend=e.Size(); jnbr + edge = new GdaPolyLine(c[i]->GetX(),c[i]->GetY(), + c[nbr]->GetX(), c[nbr]->GetY()); + edge->from = i; + edge->to = nbr; + edge->setPen(pen); + edge->setBrush(*wxTRANSPARENT_BRUSH); + foreground_shps.push_back(edge); + w_graph.push_back(edge); + w_nodes.insert(i); + w_nodes.insert(nbr); + } + } + } +} + void MapCanvas::TimeChange() { wxLogMessage("MapCanvas::TimeChange()"); if (!is_any_sync_with_global_time) return; - + int cts = project->GetTimeState()->GetCurrTime(); int ref_time = var_info[ref_var_index].time; int ref_time_min = var_info[ref_var_index].time_min; int ref_time_max = var_info[ref_var_index].time_max; - + if ((cts == ref_time) || (cts > ref_time_max && ref_time == ref_time_max) || (cts < ref_time_min && ref_time == ref_time_min)) return; @@ -2399,7 +2424,7 @@ void MapCanvas::VarInfoAttributeChange() { wxLogMessage("MapCanvas::VarInfoAttributeChange()"); GdaVarTools::UpdateVarInfoSecondaryAttribs(var_info); - + is_any_time_variant = false; is_any_sync_with_global_time = false; for (size_t i=0; i > cat_var_undef; - + for (int t=0; t undef_res(num_obs, false); for (int i=0; i& hs = highlight_state->GetHighlight(); vector hs_backup = hs; - + for (int i=0; iuseScientificNotation); + this->useScientificNotation, + useUndefinedCategory, + this->category_disp_precision); else CatClassification::PopulateCatClassifData(cat_classif_def, cat_var_sorted, @@ -2642,11 +2658,13 @@ void MapCanvas::CreateAndUpdateCategories() cat_data, map_valid, map_error_message, - this->useScientificNotation); + this->useScientificNotation, + useUndefinedCategory, + this->category_disp_precision); if (ref_var_index != -1) { - cat_data.SetCurrentCanvasTmStep(var_info[ref_var_index].time - - var_info[ref_var_index].time_min); + int cur_t = var_info[ref_var_index].time - var_info[ref_var_index].time_min; + cat_data.SetCurrentCanvasTmStep(cur_t); } int cnc = cat_data.GetNumCategories(cat_data.GetCurrentCanvasTmStep()); CatClassification::ChangeNumCats(cnc, cat_classif_def); @@ -2657,7 +2675,7 @@ void MapCanvas::TimeSyncVariableToggle(int var_index) wxLogMessage("MapCanvas::TimeSyncVariableToggle()"); var_info[var_index].sync_with_global_time = !var_info[var_index].sync_with_global_time; - + VarInfoAttributeChange(); // Strictly speaking, should not have to repopulate map canvas // when time sync changes since scale of objects never changes. To keep @@ -2696,7 +2714,7 @@ void MapCanvas::DisplayWeightsGraph() display_weights_graph = !display_weights_graph; if (display_weights_graph) { display_neighbors = false; - + } else { display_map_with_graph = true; } @@ -2729,13 +2747,11 @@ void MapCanvas::DisplayMapWithGraph() void MapCanvas::DisplayMapBoundray(bool flag) { wxLogMessage("MapCanvas::DisplayMapBoundray()"); - + display_map_boundary = flag; if (selectable_outline_visible) display_map_boundary = false; full_map_redraw_needed = true; - PopulateCanvas(); - } void MapCanvas::ChangeGraphThickness(int val) @@ -2798,7 +2814,7 @@ CatClassification::CatClassifType MapCanvas::GetCcType() return cat_classif_def.cat_classif_type; } -/** Save Rates option should only be available when +/** Save Rates option should only be available when smoothing_type != no_smoothing */ void MapCanvas::SaveRates() { @@ -2811,23 +2827,23 @@ void MapCanvas::SaveRates() dlg.ShowModal(); return; } - + vector data(1); - + vector undefs(num_obs); vector dt(num_obs); - + int t = cat_data.GetCurrentCanvasTmStep(); for (int i=0; iGetEventType(); if (type == HLStateInt::transparency) { tran_unhighlighted = GdaConst::transparency_unhighlighted; @@ -2870,9 +2888,10 @@ void MapCanvas::update(HLStateInt* o) // re-paint highlight layer (layer1_bm) layer1_valid = false; DrawLayers(); - + UpdateStatusBar(); } + is_updating = false; } void MapCanvas::UpdateStatusBar() @@ -2881,20 +2900,20 @@ void MapCanvas::UpdateStatusBar() if (template_frame) { sb = template_frame->GetStatusBar(); } - if (!sb) + if (!sb) return; - + std::vector& hl = highlight_state->GetHighlight(); wxString s; - + int selected_cnt = 0; int selected_idx = 0; - + if (GetCcType() == CatClassification::no_theme) s << _("#obs=") << project->GetNumRecordsNoneEmpty() <<" "; else s << _("#obs=") << project->GetNumRecords() <<" "; - + if ( highlight_state->GetTotalHighlighted() > 0) { // for highlight from other windows if (GetCcType() == CatClassification::no_theme) { @@ -2908,25 +2927,25 @@ void MapCanvas::UpdateStatusBar() } else { s << _("#selected=") << highlight_state->GetTotalHighlighted()<< " "; } - + } if ((display_neighbors || display_weights_graph) && boost::uuids::nil_uuid() != weights_id ) { WeightsManInterface* w_man_int = project->GetWManInt(); GalWeight* gal_weights = w_man_int->GetGal(weights_id); - + long cid = -1; - + if (hover_obs.size() == 1) cid = hover_obs[0]; else if (selected_cnt == 1) { cid = selected_idx; } - + if (cid >= 0) { GalElement& e = gal_weights->gal[cid]; - + s << _("obs ") << w_man_int->RecNumToId(GetWeightsId(), cid); s << " has " << e.Size() << " neighbor"; if (e.Size() != 1) s << "s"; @@ -2963,7 +2982,7 @@ void MapCanvas::UpdateStatusBar() } } } - + sb->SetStatusText(s); } @@ -2971,8 +2990,7 @@ MapNewLegend::MapNewLegend(wxWindow *parent, TemplateCanvas* t_canvas, const wxPoint& pos, const wxSize& size) : TemplateLegend(parent, t_canvas, pos, size) { - Connect(TemplateLegend::ID_CATEGORY_COLOR, wxEVT_COMMAND_MENU_SELECTED, - wxCommandEventHandler(MapNewLegend::OnCategoryColor)); + } MapNewLegend::~MapNewLegend() @@ -2980,13 +2998,79 @@ MapNewLegend::~MapNewLegend() LOG_MSG("In MapNewLegend::~MapNewLegend"); } -void MapNewLegend::OnCategoryColor(wxCommandEvent& event) +void MapNewLegend::OnCategoryFillColor(wxCommandEvent& event) +{ + int c_ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); + int num_cats = template_canvas->cat_data.GetNumCategories(c_ts); + if (opt_menu_cat < 0 || opt_menu_cat >= num_cats) return; + + wxColour col = template_canvas->cat_data.GetCategoryBrushColor(c_ts, opt_menu_cat); + wxColourData data; + data.SetColour(col); + data.SetChooseFull(true); + int ki; + for (ki = 0; ki < 16; ki++) { + wxColour colour(ki * 16, ki * 16, ki * 16); + data.SetCustomColour(ki, colour); + } + + wxColourDialog dialog(this, &data); + dialog.SetTitle(_("Choose Cateogry Fill Color")); + if (dialog.ShowModal() == wxID_OK) { + wxColourData retData = dialog.GetColourData(); + for (int ts=0; tscat_data.GetCanvasTmSteps(); ts++) { + if (num_cats == template_canvas->cat_data.GetNumCategories(ts)) { + wxColor new_color = retData.GetColour(); + template_canvas->cat_data.SetCategoryBrushColor(ts, opt_menu_cat, new_color); + wxString lbl = template_canvas->cat_data.GetCategoryLabel(ts, opt_menu_cat); + MapCanvas* w = dynamic_cast(template_canvas); + if (w) { + w->UpdatePredefinedColor(lbl, new_color); + } + } + } + template_canvas->invalidateBms(); + template_canvas->Refresh(); + Refresh(); + } +} + +void MapNewLegend::OnCategoryFillOpacity(wxCommandEvent& event) +{ + int c_ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); + int num_cats = template_canvas->cat_data.GetNumCategories(c_ts); + if (opt_menu_cat < 0 || opt_menu_cat >= num_cats) return; + + wxColour col = template_canvas->cat_data.GetCategoryBrushColor(c_ts, opt_menu_cat); + double transparency = 1 - col.Alpha() / 255.0; + TransparentSettingDialog dialog(this, transparency); + if (dialog.ShowModal() == wxID_OK) { + transparency = dialog.GetTransparency(); + char alpha = (int)(255 * (1-transparency)); + for (int ts=0; tscat_data.GetCanvasTmSteps(); ts++) { + if (num_cats == template_canvas->cat_data.GetNumCategories(ts)) { + wxColor new_color(col.Red(), col.Green(), col.Blue(), alpha); + template_canvas->cat_data.SetCategoryBrushColor(ts, opt_menu_cat, new_color); + wxString lbl = template_canvas->cat_data.GetCategoryLabel(ts, opt_menu_cat); + MapCanvas* w = dynamic_cast(template_canvas); + if (w) { + w->UpdatePredefinedColor(lbl, new_color); + } + } + } + template_canvas->invalidateBms(); + template_canvas->Refresh(); + Refresh(); + } +} + +void MapNewLegend::OnCategoryOutlineColor(wxCommandEvent& event) { int c_ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); int num_cats = template_canvas->cat_data.GetNumCategories(c_ts); if (opt_menu_cat < 0 || opt_menu_cat >= num_cats) return; - - wxColour col = template_canvas->cat_data.GetCategoryColor(c_ts, opt_menu_cat); + + wxColour col = template_canvas->cat_data.GetCategoryPenColor(c_ts, opt_menu_cat); wxColourData data; data.SetColour(col); data.SetChooseFull(true); @@ -2995,15 +3079,15 @@ void MapNewLegend::OnCategoryColor(wxCommandEvent& event) wxColour colour(ki * 16, ki * 16, ki * 16); data.SetCustomColour(ki, colour); } - + wxColourDialog dialog(this, &data); - dialog.SetTitle(_("Choose Cateogry Color")); + dialog.SetTitle(_("Choose Cateogry Outline Color")); if (dialog.ShowModal() == wxID_OK) { wxColourData retData = dialog.GetColourData(); for (int ts=0; tscat_data.GetCanvasTmSteps(); ts++) { if (num_cats == template_canvas->cat_data.GetNumCategories(ts)) { wxColor new_color = retData.GetColour(); - template_canvas->cat_data.SetCategoryColor(ts, opt_menu_cat, new_color); + template_canvas->cat_data.SetCategoryPenColor(ts, opt_menu_cat, new_color); wxString lbl = template_canvas->cat_data.GetCategoryLabel(ts, opt_menu_cat); MapCanvas* w = dynamic_cast(template_canvas); if (w) { @@ -3044,19 +3128,19 @@ no_update_weights(false) template_legend = NULL; template_canvas = NULL; map_tree = NULL; - + if (weights_id.is_nil()) { WeightsManInterface* w_man_int = project->GetWManInt(); weights_id = w_man_int->GetDefault(); } - + int width, height; GetClientSize(&width, &height); - + wxSplitterWindow* splitter_win = 0; splitter_win = new wxSplitterWindow(this,wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D |wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); splitter_win->SetMinimumPaneSize(10); - + wxPanel* rpanel = new wxPanel(splitter_win); template_canvas = new MapCanvas(rpanel, this, project, var_info, col_ids, @@ -3068,37 +3152,37 @@ no_update_weights(false) template_canvas->SetScrollRate(1,1); rbox = new wxBoxSizer(wxHORIZONTAL); rbox->Add(template_canvas, 1, wxEXPAND); - + rpanel->SetSizerAndFit(rbox); wxPanel* lpanel = new wxPanel(splitter_win); template_legend = new MapNewLegend(lpanel, template_canvas, wxPoint(0,0), wxSize(0,0)); - + if (theme_type == CatClassification::unique_values) { template_legend->isDragDropAllowed = true; } - + wxBoxSizer* lbox = new wxBoxSizer(wxVERTICAL); template_legend->GetContainingSizer()->Detach(template_legend); lbox->Add(template_legend, 1, wxEXPAND | wxALL); lpanel->SetSizerAndFit(lbox); - + splitter_win->SplitVertically(lpanel, rpanel, GdaConst::map_default_legend_width); - + wxPanel* toolbar_panel = new wxPanel(this,wxID_ANY, wxDefaultPosition); wxBoxSizer* toolbar_sizer= new wxBoxSizer(wxVERTICAL); toolbar = wxXmlResource::Get()->LoadToolBar(toolbar_panel, "ToolBar_MAP"); SetupToolbar(); toolbar_sizer->Add(toolbar, 0, wxEXPAND|wxALL); toolbar_panel->SetSizerAndFit(toolbar_sizer); - + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); - sizer->Add(toolbar_panel, 0, wxEXPAND|wxALL); - sizer->Add(splitter_win, 1, wxEXPAND|wxALL); + sizer->Add(toolbar_panel, 0, wxEXPAND|wxALL); + sizer->Add(splitter_win, 1, wxEXPAND|wxALL); SetSizer(sizer); SetAutoLayout(true); DisplayStatusBar(true); - + w_man_state->registerObserver(this); Show(true); @@ -3122,7 +3206,7 @@ MapFrame::~MapFrame() } if (HasCapture()) ReleaseMouse(); DeregisterAsActive(); - + if (export_dlg) { export_dlg->Destroy(); delete export_dlg; @@ -3180,11 +3264,11 @@ void MapFrame::OnDrawBasemap(bool flag, Gda::BasemapItem& bm_item) MapCanvas* map_canvas = (MapCanvas*)template_canvas; bool drawSuccess = map_canvas->DrawBasemap(flag, bm_item); - + if (flag == false) { map_canvas->tran_unhighlighted = GdaConst::transparency_unhighlighted; } - + if (drawSuccess==false) { wxMessageBox(_("GeoDa cannot find proper projection or geographic coordinate system information to add a basemap. Please update this information (e.g. in .prj file).")); } @@ -3245,7 +3329,9 @@ void MapFrame::OnSelectableOutlineVisible(wxCommandEvent& event) void MapFrame::OnMapAddLayer(wxCommandEvent& e) { wxLogMessage("In MapFrame::OnMapAddLayer()"); - ConnectDatasourceDlg connect_dlg(this, wxDefaultPosition, wxDefaultSize); + bool show_csv_config = true; + ConnectDatasourceDlg connect_dlg(this, wxDefaultPosition, wxDefaultSize, + show_csv_config); if (connect_dlg.ShowModal() != wxID_OK) { return; } @@ -3254,7 +3340,7 @@ void MapFrame::OnMapAddLayer(wxCommandEvent& e) IDataSource* datasource = connect_dlg.GetDataSource(); wxString datasource_name = datasource->GetOGRConnectStr(); GdaConst::DataSourceType ds_type = datasource->GetType(); - + BackgroundMapLayer* map_layer = project->AddMapLayer(datasource_name, ds_type, layer_name); if (map_layer == NULL) { @@ -3305,7 +3391,7 @@ void MapFrame::SetNoBasemap() void MapFrame::OnBasemapSelect(wxCommandEvent& event) { int menu_id = event.GetId(); - + wxString basemap_sources = GdaConst::gda_basemap_sources; OGRDataAdapter& ogr_instance = OGRDataAdapter::GetInstance(); std::vector items = ogr_instance.GetHistory("gda_basemap_sources"); @@ -3314,7 +3400,7 @@ void MapFrame::OnBasemapSelect(wxCommandEvent& event) } vector basemap_groups; basemap_groups = Gda::ExtractBasemapResources(basemap_sources); - + for (int i=0; i& items = grp.items; @@ -3333,7 +3419,7 @@ void MapFrame::OnMapBasemap(wxCommandEvent& e) { wxLogMessage("In MapFrame::OnMapBasemap()"); wxMenu* popupMenu = wxXmlResource::Get()->LoadMenu("ID_BASEMAP_MENU"); - + // add basemap options wxString basemap_sources = GdaConst::gda_basemap_sources; OGRDataAdapter& ogr_instance = OGRDataAdapter::GetInstance(); @@ -3400,8 +3486,8 @@ void MapFrame::MapMenus() ((MapCanvas*) template_canvas)->AddTimeVariantOptionsToMenu(optMenu); AppendCustomCategories(optMenu, project->GetCatClassifManager()); ((MapCanvas*) template_canvas)->SetCheckMarks(optMenu); - - GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); + + GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); UpdateOptionMenuItems(); } @@ -3421,7 +3507,7 @@ void MapFrame::AppendCustomCategories(wxMenu* menu, CatClassifManager* ccm) base_id[0] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0; base_id[1] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_B0; base_id[2] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_C0; - + for (int i=0; iFindItem(sub_menu_id[i]); if (!smii) continue; @@ -3430,17 +3516,18 @@ void MapFrame::AppendCustomCategories(wxMenu* menu, CatClassifManager* ccm) int m_id = smi->FindItem(_("Custom Breaks")); wxMenuItem* mi = smi->FindItem(m_id); if (!mi) continue; - + wxMenu* sm = mi->GetSubMenu(); // clean wxMenuItemList items = sm->GetMenuItems(); for (int i=0; iDelete(items[i]); } - - sm->Append(menu_id[i], _("Create New Custom"), _("Create new custom categories classification.")); + + sm->Append(menu_id[i], _("Create New Custom"), + _("Create new custom categories classification.")); sm->AppendSeparator(); - + vector titles; ccm->GetTitles(titles); for (size_t j=0; jTimeChange(); + ((MapCanvas*) template_canvas)->TimeChange(); UpdateTitle(); if (template_legend) template_legend->Recreate(); } @@ -3534,15 +3621,15 @@ GalWeight* MapFrame::checkWeights() { std::vector weights_ids; WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); + w_man_int->GetIds(weights_ids, true); if (weights_ids.size()==0) { wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager."), _("No Weights Found"), wxOK | wxICON_ERROR); dlg.ShowModal(); return NULL; - + } boost::uuids::uuid w_id = w_man_int->GetDefault(); - + GalWeight* gal_weights = w_man_int->GetGal(w_id); if (gal_weights== NULL) { wxString msg = _("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager to define a valid weights file."); @@ -3558,10 +3645,10 @@ void MapFrame::OnDisplayWeightsGraph(wxCommandEvent& event) GalWeight* gal_weights = checkWeights(); if (gal_weights == NULL) return; - + if (event.GetString() == _("Connectivity")) no_update_weights = true; - + ((MapCanvas*) template_canvas)->DisplayWeightsGraph(); UpdateOptionMenuItems(); } @@ -3571,10 +3658,10 @@ void MapFrame::OnAddNeighborToSelection(wxCommandEvent& event) GalWeight* gal_weights = checkWeights(); if (gal_weights == NULL) return; - + if (event.GetString() == _("Connectivity")) no_update_weights = true; - + ((MapCanvas*) template_canvas)->DisplayNeighbors(); UpdateOptionMenuItems(); } @@ -3584,7 +3671,7 @@ void MapFrame::OnDisplayMapWithGraph(wxCommandEvent& event) GalWeight* gal_weights = checkWeights(); if (gal_weights == NULL) return; - + ((MapCanvas*) template_canvas)->DisplayMapWithGraph(); UpdateOptionMenuItems(); } @@ -3600,7 +3687,7 @@ void MapFrame::OnChangeGraphThickness(wxCommandEvent& event) ((MapCanvas*) template_canvas)->ChangeGraphThickness(1); else if (event.GetId() == XRCID("ID_WEIGHTS_GRAPH_THICKNESS_STRONG")) ((MapCanvas*) template_canvas)->ChangeGraphThickness(2); - + UpdateOptionMenuItems(); } @@ -3640,8 +3727,7 @@ void MapFrame::OnNewCustomCatClassifA() void MapFrame::OnCustomCatClassifA(const wxString& cc_title) { if (((MapCanvas*) template_canvas)->GetNumVars() != 1) { - VariableSettingsDlg dlg(project, - VariableSettingsDlg::univariate); + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::custom, MapCanvas::no_smoothing, 4, boost::uuids::nil_uuid(), @@ -3664,8 +3750,7 @@ void MapFrame::OnThemelessMap() void MapFrame::OnHinge15() { if (((MapCanvas*) template_canvas)->GetNumVars() != 1) { - VariableSettingsDlg dlg(project, - VariableSettingsDlg::univariate); + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::hinge_15, MapCanvas::no_smoothing, 6, boost::uuids::nil_uuid(), @@ -3681,8 +3766,7 @@ void MapFrame::OnHinge15() void MapFrame::OnHinge30() { if (((MapCanvas*) template_canvas)->GetNumVars() != 1) { - VariableSettingsDlg dlg(project, - VariableSettingsDlg::univariate); + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::hinge_30, MapCanvas::no_smoothing, 6, boost::uuids::nil_uuid(), @@ -3698,8 +3782,7 @@ void MapFrame::OnHinge30() void MapFrame::OnQuantile(int num_cats) { if (((MapCanvas*) template_canvas)->GetNumVars() != 1) { - VariableSettingsDlg dlg(project, - VariableSettingsDlg::univariate); + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::quantile, MapCanvas::no_smoothing, num_cats, boost::uuids::nil_uuid(), @@ -3714,8 +3797,7 @@ void MapFrame::OnQuantile(int num_cats) void MapFrame::OnPercentile() { if (((MapCanvas*) template_canvas)->GetNumVars() != 1) { - VariableSettingsDlg dlg(project, - VariableSettingsDlg::univariate); + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::percentile, MapCanvas::no_smoothing, 6, boost::uuids::nil_uuid(), @@ -3731,8 +3813,7 @@ void MapFrame::OnPercentile() void MapFrame::OnStdDevMap() { if (((MapCanvas*) template_canvas)->GetNumVars() != 1) { - VariableSettingsDlg dlg(project, - VariableSettingsDlg::univariate); + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::stddev, MapCanvas::no_smoothing, 6, boost::uuids::nil_uuid(), @@ -3757,22 +3838,21 @@ void MapFrame::OnUniqueValues() if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::unique_values, MapCanvas::no_smoothing, - 6, boost::uuids::nil_uuid(), + 1, boost::uuids::nil_uuid(), true, dlg.var_info, dlg.col_ids); } else { ChangeMapType(CatClassification::unique_values, MapCanvas::no_smoothing, - 6, boost::uuids::nil_uuid(), + 1, boost::uuids::nil_uuid(), false, vector(0), vector(0)); - } + } } void MapFrame::OnNaturalBreaks(int num_cats) { if (((MapCanvas*) template_canvas)->GetNumVars() != 1) { - VariableSettingsDlg dlg(project, - VariableSettingsDlg::univariate); + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::natural_breaks, MapCanvas::no_smoothing, num_cats, @@ -3789,8 +3869,7 @@ void MapFrame::OnNaturalBreaks(int num_cats) void MapFrame::OnEqualIntervals(int num_cats) { if (((MapCanvas*) template_canvas)->GetNumVars() != 1) { - VariableSettingsDlg dlg(project, - VariableSettingsDlg::univariate); + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; ChangeMapType(CatClassification::equal_intervals, MapCanvas::no_smoothing, num_cats, @@ -3849,7 +3928,7 @@ void MapFrame::OnEmpiricalBayes() void MapFrame::OnSpatialRate() { - + VariableSettingsDlg dlg(project, VariableSettingsDlg::rate_smoothed, true, false, _("Spatial Rate Smoothed Variable Settings"), @@ -3885,7 +3964,7 @@ void MapFrame::OnCustomCategoryClick(wxCommandEvent& event) int idx = xrc_id - GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0; if (idx < 0 || idx >= titles.size()) return; wxString cc_title = titles[idx]; - + if (var_info.empty() == false && col_ids.empty() == false) { ChangeMapType(CatClassification::custom, MapCanvas::no_smoothing, @@ -3959,14 +4038,22 @@ void MapFrame::OnClose(wxCloseEvent& event) void MapFrame::OnExportVoronoi() { - if (project->ExportVoronoi()) { + if (project->ExportVoronoi() == false) { + // can't export voronoi because of duplicate points + wxString msg = _("Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Please try to export current dataset without duplicates."); + wxMessageDialog dlg(NULL, msg, _("Can't save Thiessen polygons"), + wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + } else { if (export_dlg != NULL) { export_dlg->Destroy(); delete export_dlg; } - export_dlg = new ExportDataDlg(this, project->voronoi_polygons, Shapefile::POLYGON, project); + export_dlg = new ExportDataDlg(this, project->voronoi_polygons, + Shapefile::POLYGON, project); export_dlg->ShowModal(); - ((MapCanvas*) template_canvas)->voronoi_diagram_duplicates_exist = project->IsPointDuplicates(); + ((MapCanvas*) template_canvas)->voronoi_diagram_duplicates_exist = + project->IsPointDuplicates(); UpdateOptionMenuItems(); } } @@ -3978,8 +4065,9 @@ void MapFrame::OnExportMeanCntrs() export_dlg->Destroy(); delete export_dlg; } - export_dlg = new ExportDataDlg(this, project->mean_centers, Shapefile::NULL_SHAPE, "COORD", project); - + export_dlg = new ExportDataDlg(this, project->mean_centers, + Shapefile::NULL_SHAPE, "COORD", project); + export_dlg->ShowModal(); } @@ -3990,8 +4078,9 @@ void MapFrame::OnExportCentroids() export_dlg->Destroy(); delete export_dlg; } - export_dlg = new ExportDataDlg(this, project->centroids, Shapefile::NULL_SHAPE, "COORD", project); - + export_dlg = new ExportDataDlg(this, project->centroids, + Shapefile::NULL_SHAPE, "COORD", project); + export_dlg->ShowModal(); } @@ -4003,7 +4092,7 @@ void MapFrame::OnSaveVoronoiDupsToTable() void MapFrame::OnChangeMapTransparency() { if (!template_canvas) return; - + //show slider dialog MapCanvas* map_canvs_ref = (MapCanvas*) template_canvas; if (map_canvs_ref->isDrawBasemap) { @@ -4019,7 +4108,8 @@ void MapFrame::GetVizInfo(map >& colors) } } -void MapFrame::GetVizInfo(wxString& shape_type, wxString& field_name, vector& clrs, vector& bins) +void MapFrame::GetVizInfo(wxString& shape_type, wxString& field_name, + vector& clrs, vector& bins) { if (template_canvas) { template_canvas->GetVizInfo(shape_type, clrs, bins); @@ -4028,4 +4118,3 @@ void MapFrame::GetVizInfo(wxString& shape_type, wxString& field_name, vector AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc); + void SetLegendLabel(int cat, wxString label); // multi-layers: vector GetBackgroundMayLayers(); @@ -226,6 +224,7 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, MapCanvas::has_thumbnail_saved = false; } Project* GetProject() { return project; } + CatClassifDef cat_classif_def; SmoothingType smoothing_type; bool is_rate_smoother; @@ -242,6 +241,7 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, wxColour graph_color; wxColour conn_selected_color; wxColour neighbor_fill_color; + int conn_selected_size; set ids_of_nbrs; vector ids_wo_nbrs; vector var_info; @@ -265,7 +265,7 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, list foreground_maps; bool layerbase_valid; // if false, then needs to be redrawn - + bool is_updating; // true: if triggered by other window vector w_graph; IDataSource* p_datasource; static bool has_thumbnail_saved; @@ -305,6 +305,8 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, void show_empty_shps_msgbox(); void SaveThumbnail(); bool InitBasemap(); + virtual void DrawConnectivityGraph(wxMemoryDC &dc); + virtual void CreateConnectivityGraph(); DECLARE_EVENT_TABLE() }; @@ -316,7 +318,9 @@ class MapNewLegend : public TemplateLegend { virtual ~MapNewLegend(); // override - void OnCategoryColor(wxCommandEvent& event); + virtual void OnCategoryFillColor(wxCommandEvent& event); + virtual void OnCategoryFillOpacity(wxCommandEvent& event); + virtual void OnCategoryOutlineColor(wxCommandEvent& event); }; class MapFrame : public TemplateFrame, public WeightsManStateObserver diff --git a/Explore/PCPNewView.cpp b/Explore/PCPNewView.cpp index 0458cadb0..bf6e96594 100644 --- a/Explore/PCPNewView.cpp +++ b/Explore/PCPNewView.cpp @@ -33,6 +33,7 @@ #include #include "CatClassifState.h" #include "CatClassifManager.h" +#include "../DialogTools/AdjustYAxisDlg.h" #include "../DataViewer/TableInterface.h" #include "../DataViewer/TimeState.h" #include "../DialogTools/CatClassifDlg.h" @@ -67,9 +68,10 @@ pcp_selectstate(pcp_start), show_pcp_control(false), overall_abs_max_std_exists(false), theme_var(0), num_categories(6), all_init(false) { + LOG_MSG("Entering PCPCanvas::PCPCanvas"); + using namespace Shapefile; - LOG_MSG("Entering PCPCanvas::PCPCanvas"); - + display_precision = 4; TableInterface* table_int = project->GetTableInt(); data_stats.resize(num_vars); @@ -571,8 +573,8 @@ void PCPCanvas::PopulateCanvas() } if (display_stats) { - m << "[" << GenUtils::DblToStr(t_min, 4); - m << ", " << GenUtils::DblToStr(t_max, 4) << "]"; + m << "[" << GenUtils::DblToStr(t_min, display_precision, display_precision_fixed_point); + m << ", " << GenUtils::DblToStr(t_max, display_precision, display_precision_fixed_point) << "]"; s = new GdaShapeText(m, *GdaConst::small_font, wxRealPoint(0, y_pos), 0, GdaShapeText::right, GdaShapeText::v_center, -25, 15+y_del); ((GdaShapeText*)s)->GetSize(dc, s_w, s_h); @@ -582,9 +584,9 @@ void PCPCanvas::PopulateCanvas() int rows = 2; std::vector vals(rows*cols); vals[0] << _("mean"); - vals[1] << GenUtils::DblToStr(t_mean, 4); + vals[1] << GenUtils::DblToStr(t_mean, display_precision, display_precision_fixed_point); vals[2] << _("s.d."); - vals[3] << GenUtils::DblToStr(t_sd, 4); + vals[3] << GenUtils::DblToStr(t_sd, display_precision, display_precision_fixed_point); std::vector attribs(0); // undefined s = new GdaShapeTable(vals, attribs, rows, cols, *GdaConst::small_font, wxRealPoint(0, y_pos), GdaShapeText::right, @@ -762,6 +764,7 @@ void PCPCanvas::CreateAndUpdateCategories() if (cat_classif_def.cat_classif_type != CatClassification::custom) { CatClassification::ChangeNumCats(GetNumCats(), cat_classif_def); } + bool useUndefinedCategory = true; cat_classif_def.color_scheme = CatClassification::GetColSchmForType(cat_classif_def.cat_classif_type); CatClassification::PopulateCatClassifData(cat_classif_def, @@ -769,7 +772,9 @@ void PCPCanvas::CreateAndUpdateCategories() cat_var_undef, cat_data, cats_valid, cats_error_message, - this->useScientificNotation); + this->useScientificNotation, + useUndefinedCategory, + this->category_disp_precision); if (ref_var_index != -1) { cat_data.SetCurrentCanvasTmStep(var_info[ref_var_index].time @@ -1400,4 +1405,3 @@ void PCPFrame::ChangeThemeType(CatClassification::CatClassifType new_theme, UpdateOptionMenuItems(); if (template_legend) template_legend->Recreate(); } - diff --git a/Explore/PCPNewView.h b/Explore/PCPNewView.h index 0c6717480..c53007294 100644 --- a/Explore/PCPNewView.h +++ b/Explore/PCPNewView.h @@ -85,7 +85,7 @@ class PCPCanvas : public TemplateCanvas, public CatClassifStateObserver /** Override PaintControls from TemplateCanvas */ virtual void PaintControls(wxDC& dc); void MoveControlLine(int final_y); - + CatClassifDef cat_classif_def; CatClassification::CatClassifType GetCcType(); int GetNumCats() { return num_categories; } @@ -106,7 +106,6 @@ class PCPCanvas : public TemplateCanvas, public CatClassifStateObserver int num_vars; int num_time_vals; int num_categories; - int ref_var_index; std::vector var_info; std::vector var_order; // var id for position 0 to position num_vars-1 @@ -174,7 +173,6 @@ class PCPFrame : public TemplateFrame { void OnDisplayStatistics(wxCommandEvent& event); void OnViewOriginalData(wxCommandEvent& event); void OnViewStandardizedData(wxCommandEvent& event); - virtual void OnThemeless(); virtual void OnQuantile(int num_cats); virtual void OnPercentile(); diff --git a/Explore/ScatterNewPlotView.cpp b/Explore/ScatterNewPlotView.cpp index f7fbc7df6..15fcdcc18 100644 --- a/Explore/ScatterNewPlotView.cpp +++ b/Explore/ScatterNewPlotView.cpp @@ -37,6 +37,7 @@ #include "../DialogTools/CreatingWeightDlg.h" #include "../ShapeOperations/GwtWeight.h" #include "../ShapeOperations/GalWeight.h" +#include "../DialogTools/AdjustYAxisDlg.h" #include "../SpatialIndAlgs.h" #include "../GdaConst.h" #include "../GeneralWxUtils.h" @@ -78,13 +79,16 @@ BubbleSizeSliderDlg::BubbleSizeSliderDlg (ScatterNewPlotCanvas* _canvas, wxALIGN_CENTER_VERTICAL|wxALL); boxSizer->Add(subSizer); - resetBtn = new wxButton(this, XRCID("ID_RESET"), _("Reset"), wxDefaultPosition, wxSize(100, -1)); + resetBtn = new wxButton(this, XRCID("ID_RESET"), _("Reset"), + wxDefaultPosition, wxSize(100, -1)); topSizer->Add(resetBtn, 0, wxGROW|wxALL, 5); topSizer->Fit(this); - Connect(XRCID("ID_BUBBLE_SLIDER"), wxEVT_SLIDER, wxScrollEventHandler(BubbleSizeSliderDlg::OnSliderChange)); - Connect(XRCID("ID_RESET"), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BubbleSizeSliderDlg::OnReset)); + Connect(XRCID("ID_BUBBLE_SLIDER"), wxEVT_SLIDER, + wxScrollEventHandler(BubbleSizeSliderDlg::OnSliderChange)); + Connect(XRCID("ID_RESET"), wxEVT_COMMAND_BUTTON_CLICKED, + wxCommandEventHandler(BubbleSizeSliderDlg::OnReset)); } void BubbleSizeSliderDlg::OnReset(wxCommandEvent& event ) @@ -94,6 +98,7 @@ void BubbleSizeSliderDlg::OnReset(wxCommandEvent& event ) slider->SetValue(0); canvas->UpdateBubbleSize(1); } + void BubbleSizeSliderDlg::OnSliderChange( wxScrollEvent & event ) { wxLogMessage("In BubbleSizeSliderDlg::OnSliderChange()"); @@ -723,7 +728,7 @@ void ScatterNewPlotCanvas::SetSelectableFillColor(wxColour color) selectable_fill_color = color; pens.SetPenColor(pens.GetRegExlPen(), selectable_fill_color); for (int t=0; tuseScientificNotation); + this->useScientificNotation, + useUndefinedCategory, + this->category_disp_precision); CreateZValArrays(num_time_vals, num_obs); for (int t=0; tPrepend(XRCID("MDS_WEIGHTS"), menu_txt); optMenu->AppendSeparator(); - template_frame->Connect(XRCID("MDS_WEIGHTS"), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MDSPlotFrame::OnCreateWeights)); + template_frame->Connect(XRCID("MDS_WEIGHTS"), wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MDSPlotFrame::OnCreateWeights)); SetCheckMarks(optMenu); @@ -2308,20 +2313,30 @@ BEGIN_EVENT_TABLE(MDSPlotFrame, TemplateFrame) EVT_ACTIVATE(MDSPlotFrame::OnActivate) END_EVENT_TABLE() -MDSPlotFrame::MDSPlotFrame(wxFrame *parent, Project* project, const wxPoint& pos, const wxSize& size, const long style) +MDSPlotFrame::MDSPlotFrame(wxFrame *parent, Project* project, + const wxPoint& pos, const wxSize& size, + const long style) : ScatterNewPlotFrame(parent, project, pos, size, style) { } -MDSPlotFrame::MDSPlotFrame(wxFrame *parent, Project* project, const std::vector& var_info, const std::vector& col_ids, bool is_bubble_plot, const wxString& title, const wxPoint& pos, const wxSize& size, const long style) -: ScatterNewPlotFrame(parent, project, var_info, col_ids, is_bubble_plot, title, pos, size, style, true) +MDSPlotFrame::MDSPlotFrame(wxFrame *parent, Project* project, + const std::vector& var_info, + const std::vector& col_ids, + bool is_bubble_plot, const wxString& title, + const wxPoint& pos, const wxSize& size, + const long style) +: ScatterNewPlotFrame(parent, project, var_info, col_ids, is_bubble_plot, title, + pos, size, style, true) { wxLogMessage("Open MDSPlotFrame."); int width, height; GetClientSize(&width, &height); wxSplitterWindow* splitter_win = 0; if (is_bubble_plot) { - splitter_win = new wxSplitterWindow(this,wxID_ANY,wxDefaultPosition, wxDefaultSize, wxSP_3D|wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); + splitter_win = new wxSplitterWindow(this,wxID_ANY,wxDefaultPosition, + wxDefaultSize, + wxSP_3D|wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); splitter_win->SetMinimumPaneSize(10); } template_canvas = new MDSPlotCanvas(this, this, project, diff --git a/Explore/ScatterNewPlotView.h b/Explore/ScatterNewPlotView.h index f675fc961..baa1c9072 100644 --- a/Explore/ScatterNewPlotView.h +++ b/Explore/ScatterNewPlotView.h @@ -59,6 +59,8 @@ class BubbleSizeSliderDlg: public wxDialog void OnReset(wxCommandEvent& event ); }; +// The design of Bubble Chart/Map should be seperated from Scatter Plot +// and should be inhereited instead of using parameter inside this class!! class ScatterNewPlotCanvas : public TemplateCanvas, public CatClassifStateObserver { @@ -129,7 +131,7 @@ public TemplateCanvas, public CatClassifStateObserver bool IsShowLowessSmoother() { return show_lowess_smoother; } void UpdateLowessOnRegimes(); void UpdateBubbleSize(double size_scaler); - + double bubble_size_scaler; void ComputeChowTest(); @@ -177,7 +179,6 @@ public TemplateCanvas, public CatClassifStateObserver std::vector Z; std::vector XYZ_undef; - std::vector undef; AxisScale axis_scale_x; AxisScale axis_scale_y; @@ -304,7 +305,6 @@ class ScatterNewPlotFrame : public TemplateFrame, public LowessParamObserver void OnViewRegressionSelectedExcluded(wxCommandEvent& event); void OnDisplayStatistics(wxCommandEvent& event); void OnShowAxesThroughOrigin(wxCommandEvent& event); - virtual void OnNewCustomCatClassifA(); virtual void OnCustomCatClassifA(const wxString& cc_title); diff --git a/Explore/ScatterPlotMatView.cpp b/Explore/ScatterPlotMatView.cpp index 6f97da292..7749f8de8 100644 --- a/Explore/ScatterPlotMatView.cpp +++ b/Explore/ScatterPlotMatView.cpp @@ -54,7 +54,7 @@ brush_rectangle(true), brush_circle(false), brush_line(false), selectable_outline_color(GdaConst::scatterplot_regression_color), selectable_fill_color(GdaConst::scatterplot_regression_excluded_color), highlight_color(GdaConst::scatterplot_regression_selected_color), -axis_display_precision(1) +axis_display_precision(1), axis_display_fixed_point(false) { wxLogMessage("Open ScatterPlotMatFrame."); @@ -333,21 +333,25 @@ void ScatterPlotMatFrame::OnEditLowessParams(wxCommandEvent& event) } } -void ScatterPlotMatFrame::OnSetDisplayPrecision(wxCommandEvent& event) +void ScatterPlotMatFrame::OnSetAxisDisplayPrecision(wxCommandEvent& event) { wxLogMessage("Click GdaFrame::OnSetDisplayPrecision"); - AxisLabelPrecisionDlg dlg(axis_display_precision, this); + SetDisplayPrecisionDlg dlg(axis_display_precision, + axis_display_fixed_point, this); if (dlg.ShowModal () != wxID_OK) return; int def_precision = dlg.precision; - + bool fixed_point = dlg.fixed_point; for (size_t i=0, sz=vert_labels.size(); iSetDisplayPrecision(def_precision); + if (vert_labels[i]) + vert_labels[i]->SetAxisDisplayPrecision(def_precision, fixed_point); } for (size_t i=0, sz=horiz_labels.size(); iSetDisplayPrecision(def_precision); + if (horiz_labels[i]) + horiz_labels[i]->SetAxisDisplayPrecision(def_precision, fixed_point); } axis_display_precision = def_precision; + axis_display_fixed_point = fixed_point; } void ScatterPlotMatFrame::OnShowVarsChooser(wxCommandEvent& event) diff --git a/Explore/ScatterPlotMatView.h b/Explore/ScatterPlotMatView.h index 7112ab6b0..263c5d5f2 100644 --- a/Explore/ScatterPlotMatView.h +++ b/Explore/ScatterPlotMatView.h @@ -126,7 +126,7 @@ class ScatterPlotMatFrame : public TemplateFrame, public LowessParamObserver, pu virtual void update(VarsChooserObservable* o); virtual void notifyOfClosing(VarsChooserObservable* o); - virtual void OnSetDisplayPrecision(wxCommandEvent& event); + virtual void OnSetAxisDisplayPrecision(wxCommandEvent& event); void OnSaveScreen(wxCommandEvent& event); @@ -139,6 +139,7 @@ class ScatterPlotMatFrame : public TemplateFrame, public LowessParamObserver, pu wxString GetHelpHtml(); int axis_display_precision; + bool axis_display_fixed_point; LowessParamFrame* lowess_param_frame; VarsChooserFrame* vars_chooser_frame; GdaVarTools::Manager var_man; diff --git a/Explore/SimpleAxisCanvas.cpp b/Explore/SimpleAxisCanvas.cpp index 58b15aadf..cc644de9a 100644 --- a/Explore/SimpleAxisCanvas.cpp +++ b/Explore/SimpleAxisCanvas.cpp @@ -200,7 +200,8 @@ void SimpleAxisCanvas::PopulateCanvas() axis_scale_x = AxisScale(x_min - (add_auto_padding_min ? x_pad : 0.0), x_max + (add_auto_padding_max ? x_pad : 0.0), (number_ticks < 0 ? 4 : number_ticks), - axis_display_precision); + axis_display_precision, + axis_display_fixed_point); } diff --git a/Explore/SimpleBinsHistCanvas.cpp b/Explore/SimpleBinsHistCanvas.cpp index ca242b857..3e3cb0467 100644 --- a/Explore/SimpleBinsHistCanvas.cpp +++ b/Explore/SimpleBinsHistCanvas.cpp @@ -186,14 +186,16 @@ void SimpleBinsHistCanvas::PopulateCanvas() last_scale_trans.SetData(x_min, 0, x_max, y_max); if (show_axes) { - axis_scale_y = AxisScale(0, y_max, 5, axis_display_precision); + axis_scale_y = AxisScale(0, y_max, 5, axis_display_precision, + axis_display_fixed_point); y_max = axis_scale_y.scale_max; y_axis = new GdaAxis(_("Frequency"), axis_scale_y, wxRealPoint(0,0), wxRealPoint(0, y_max), -9, 0); foreground_shps.push_back(y_axis); - axis_scale_x = AxisScale(0, Xmax, 5, axis_display_precision); + axis_scale_x = AxisScale(0, Xmax, 5, axis_display_precision, + axis_display_fixed_point); //shps_orig_xmax = axis_scale_x.scale_max; axis_scale_x.data_min = Xmin; axis_scale_x.data_max = Xmax; diff --git a/Explore/SimpleHistCanvas.cpp b/Explore/SimpleHistCanvas.cpp index a9dbfa55a..6e249345a 100644 --- a/Explore/SimpleHistCanvas.cpp +++ b/Explore/SimpleHistCanvas.cpp @@ -61,12 +61,17 @@ SimpleHistStatsCanvas::SimpleHistStatsCanvas(wxWindow *parent, const vector& lbls, const vector >& vals, const vector& stats_, + const int display_precision_, + const bool display_fixed_point_, const wxString& right_click_menu_id_, const wxPoint& pos, const wxSize& size) : TemplateCanvas(parent, t_frame, project, hl_state_int, pos, size), -labels(lbls), values(vals), stats(stats_), right_click_menu_id(right_click_menu_id_) +labels(lbls), values(vals), stats(stats_), +right_click_menu_id(right_click_menu_id_) { + display_precision = display_precision_; + display_precision_fixed_point = display_fixed_point_; last_scale_trans.SetFixedAspectRatio(false); PopulateCanvas(); highlight_state->registerObserver(this); @@ -164,9 +169,9 @@ void SimpleHistStatsCanvas::PopulateCanvas() for (int i=0; i vals(rows); - vals[0] << GenUtils::DblToStr(values[i][0], 3); - vals[1] << GenUtils::DblToStr(values[i][1], 3); - vals[2] << GenUtils::DblToStr(values[i][2], 3); + vals[0] << GenUtils::DblToStr(values[i][0], display_precision, display_precision_fixed_point); + vals[1] << GenUtils::DblToStr(values[i][1], display_precision, display_precision_fixed_point); + vals[2] << GenUtils::DblToStr(values[i][2], display_precision, display_precision_fixed_point); vals[3] << (int)values[i][3]; //vals[4] << GenUtils::DblToStr(values[i][4], 3); @@ -181,12 +186,18 @@ void SimpleHistStatsCanvas::PopulateCanvas() } wxString sts; - sts << _("min:") <<" " << stats[0]; - sts << ", " << _("max:") << " " << wxString::Format("%.3f", stats[1]); + sts << _("min:") <<" " << GenUtils::DblToStr(stats[0], display_precision, display_precision_fixed_point); + sts << ", " << _("max:") << " "; + sts << GenUtils::DblToStr(stats[1], display_precision, display_precision_fixed_point); sts << ", " << _("total # pairs") << ": " << stats[2]; if (stats[5] >= 0) { - sts << ", " << _("Autocorr.") << _(" = 0 at ") << wxString::Format("~%.3f", stats[5]); - sts << _(" in range:") << " [" << wxString::Format("%.3f", stats[3]) << ", " << wxString::Format("%.3f", stats[4]) << "]"; + sts << ", " << _("Autocorr.") << _(" = 0 at "); + sts << GenUtils::DblToStr(stats[5], display_precision, display_precision_fixed_point); + sts << _(" in range:") << " ["; + sts << GenUtils::DblToStr(stats[3], display_precision, display_precision_fixed_point); + sts << ", "; + sts << GenUtils::DblToStr(stats[4], display_precision, display_precision_fixed_point); + sts << "]"; } s = new GdaShapeText(sts, *GdaConst::small_font, @@ -257,7 +268,7 @@ x_axis(0), y_axis(0), display_stats(false), show_axes(show_axes_), obs_id_to_ival(X.size()) { using namespace Shapefile; - for (size_t i=0, sz=X.size(); i& labels, const vector >& values, const vector& stats_, + const int display_precision = 3, + const bool display_fixed_point = false, const wxString& right_click_menu_id = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); @@ -63,7 +65,6 @@ class SimpleHistStatsCanvas : public TemplateCanvas vector labels; vector > values; vector stats; - DECLARE_EVENT_TABLE() }; diff --git a/Explore/SimpleScatterPlotCanvas.cpp b/Explore/SimpleScatterPlotCanvas.cpp index d638baa53..d1a185c70 100644 --- a/Explore/SimpleScatterPlotCanvas.cpp +++ b/Explore/SimpleScatterPlotCanvas.cpp @@ -324,7 +324,7 @@ void SimpleScatterPlotCanvas::SetSelectableFillColor(wxColour color) { // In Scatter Plot, Fill color is for points selectable_fill_color = color; - cat_data.SetCategoryColor(0, 0, selectable_fill_color); + cat_data.SetCategoryPenColor(0, 0, selectable_fill_color); TemplateCanvas::SetSelectableFillColor(color); PopulateCanvas(); @@ -555,10 +555,12 @@ void SimpleScatterPlotCanvas::PopulateCanvas() double y_pad = 0.1 * (y_max - y_min); axis_scale_x = AxisScale(x_min - (add_auto_padding_min ? x_pad : 0.0), x_max + (add_auto_padding_max ? x_pad : 0.0), - 5, axis_display_precision); + 5, axis_display_precision, + axis_display_fixed_point); axis_scale_y = AxisScale(y_min - (add_auto_padding_min ? y_pad : 0.0), y_max + (add_auto_padding_max ? y_pad : 0.0), - 5, axis_display_precision); + 5, axis_display_precision, + axis_display_fixed_point); /* // used by status bar for showing selection rectangle range diff --git a/GdaConst.cpp b/GdaConst.cpp index 084673620..5af5a22b6 100644 --- a/GdaConst.cpp +++ b/GdaConst.cpp @@ -319,15 +319,16 @@ wxFont* GdaConst::small_font = 0; wxFont* GdaConst::medium_font = 0; wxFont* GdaConst::large_font = 0; +bool GdaConst::gda_enable_set_transparency_windows = false; +int GdaConst::default_display_decimals = 6; // move in preference bool GdaConst::gda_use_gpu = false; int GdaConst::gda_ui_language = 0; -double GdaConst::gda_eigen_tol = 1.0E-8; +double GdaConst::gda_eigen_tol = 0.00000001; bool GdaConst::gda_set_cpu_cores = true; int GdaConst::gda_cpu_cores = 8; wxString GdaConst::gda_user_email = ""; uint64_t GdaConst::gda_user_seed = 123456789; -bool GdaConst::use_gda_user_seed = true; - +bool GdaConst::use_gda_user_seed = true; int GdaConst::gdal_http_timeout = 5; bool GdaConst::enable_high_dpi_support = true; bool GdaConst::show_csv_configure_in_merge = true; @@ -727,8 +728,8 @@ void GdaConst::init() datasrc_table_lens[ds_dbf] = 128; datasrc_field_lens[ds_dbf] = 10; datasrc_field_warning[ds_dbf] = default_field_warning; - datasrc_field_regex[ds_dbf] = default_field_name_regex; - datasrc_field_illegal_regex[ds_dbf] = default_field_name_illegal_regex; + datasrc_field_regex[ds_dbf] = db_field_name_regex; + datasrc_field_illegal_regex[ds_dbf] = db_field_name_illegal_regex; datasrc_field_casesensitive[ds_dbf] = false; datasrc_str_to_type["ESRI Shapefile"] = ds_shapefile; @@ -738,8 +739,8 @@ void GdaConst::init() datasrc_table_lens[ds_shapefile] = 128; datasrc_field_lens[ds_shapefile] = 10; datasrc_field_warning[ds_shapefile] = default_field_warning; - datasrc_field_regex[ds_shapefile] = default_field_name_regex; - datasrc_field_illegal_regex[ds_shapefile] = default_field_name_illegal_regex; + datasrc_field_regex[ds_shapefile] = db_field_name_regex; + datasrc_field_illegal_regex[ds_shapefile] = db_field_name_illegal_regex; datasrc_field_casesensitive[ds_shapefile] = false; datasrc_str_to_type["FileGDB"] = ds_esri_file_geodb; @@ -770,8 +771,8 @@ void GdaConst::init() datasrc_table_lens[ds_esri_arc_sde] = 32; datasrc_field_lens[ds_esri_arc_sde] = 32; datasrc_field_warning[ds_esri_arc_sde] = default_field_warning; - datasrc_field_regex[ds_esri_arc_sde] = default_field_name_regex; - datasrc_field_illegal_regex[ds_esri_arc_sde]=default_field_name_illegal_regex; + datasrc_field_regex[ds_esri_arc_sde] = db_field_name_regex; + datasrc_field_illegal_regex[ds_esri_arc_sde]=db_field_name_illegal_regex; datasrc_field_casesensitive[ds_esri_arc_sde] = true; datasrc_str_to_type["CSV"] = ds_csv; diff --git a/GdaConst.h b/GdaConst.h index db44ca061..fff5e238f 100644 --- a/GdaConst.h +++ b/GdaConst.h @@ -51,8 +51,8 @@ class GdaConst { double_type, // N or F with decimals > 0 in DBF long64_type, // N or F with decimals = 0 in DBF string_type, // C in DBF, max 254 characters - date_type, // D in DBF, YYYYMMDD format - time_type, // HH:MM:SS + date_type, // D in DBF, YYYYMMDD format + time_type, // HH:MM:SS datetime_type, // YYYY-MM-DD HH:MM:SS geodatabase placeholder_type }; @@ -91,18 +91,19 @@ class GdaConst { static std::map datasrc_field_warning; static std::map datasrc_field_illegal_regex; static std::map datasrc_field_casesensitive; - - static const int max_dbf_numeric_len = 20; // same for long and double - static const int max_dbf_long_len = 20; + + static int default_display_decimals; + + static const int max_dbf_long_len = 20; // 19 digits for max int64 number static const int min_dbf_long_len = 1; - static const int default_dbf_long_len = 18; - static const int max_dbf_double_len = 20; + static const int default_dbf_long_len = 20; + static const int max_dbf_double_len = 35; // 19 + 15 +1 = 35 static const int min_dbf_double_len = 2; // allow for "0." always - static const int default_dbf_double_len = 18; + static const int default_dbf_double_len = 24; // follow by OGR:dbf static const int max_dbf_double_decimals = 15; static const int min_dbf_double_decimals = 1; - static const int default_display_decimals = 4; - static const int default_dbf_double_decimals = 7; + + static const int default_dbf_double_decimals = 15; // follow by OGR:dbf static const int max_dbf_string_len = 254; static const int min_dbf_string_len = 1; static const int default_dbf_string_len = 50; @@ -110,9 +111,7 @@ class GdaConst { static const int min_dbf_date_len = 8; static const int default_dbf_date_len = 8; - - - // Resource Files + // Resource Files static const wxString gda_prefs_fname_json; static const wxString gda_prefs_fname_sqlite; static const wxString gda_prefs_html_table; @@ -271,6 +270,7 @@ class GdaConst { static wxString gda_datetime_formats_str; static wxString gda_display_datetime_format; static int gda_ogr_csv_header; + static bool gda_enable_set_transparency_windows; static const wxSize map_default_size; static const int map_default_legend_width; diff --git a/GdaShape.cpp b/GdaShape.cpp index 4cfd86791..f122d0010 100644 --- a/GdaShape.cpp +++ b/GdaShape.cpp @@ -1140,6 +1140,39 @@ GdaPolygon::GdaPolygon(const GdaPolygon& s) } } +GdaPolygon::GdaPolygon(wxPoint& pt1, wxPoint& pt2) +: n(2), points_o(0), pc(0), points(0), n_count(1), +all_points_same(false), count(0) +{ + n = 2; + count = new int[1]; + count[0] = n; + points = new wxPoint[n]; + points_o = new wxRealPoint[n]; + + points_o[0].x = pt1.x; + points_o[0].y = pt1.y; + points_o[1].x = pt1.x; + points_o[1].y = pt1.y; + + points[0].x = (int) points_o[0].x; + points[0].y = (int) points_o[0].y; + points[1].x = (int) points_o[1].x; + points[1].y = (int) points_o[1].y; + + center_o = GdaShapeAlgs::calculateMeanCenter(n, points_o); + center.x = (int) center_o.x; + center.y = (int) center_o.y; + bb_ll_o = center_o; + bb_ur_o = center_o; + for (int i=0; i bb_ur_o.x) bb_ur_o.x = points_o[i].x; + if (points_o[i].y < bb_ll_o.y) bb_ll_o.y = points_o[i].y; + if (points_o[i].y > bb_ur_o.y) bb_ur_o.y = points_o[i].y; + } +} + /** This constructs a polygon with no holes and only one region. The memory for the original set of points is also maintained internally and will be deleted when the constructor is called. */ @@ -1195,12 +1228,9 @@ GdaPolygon::GdaPolygon(Shapefile::PolygonContents* pc_s) n_count = pc->num_parts; n = pc->num_points; points = new wxPoint[n]; - //points_o = new wxRealPoint[n]; for (int i=0; ipoints[i].x; points[i].y = (int) pc->points[i].y; - //points_o[i].x = pc->points[i].x; - //points_o[i].y = pc->points[i].y; } center_o = GdaShapeAlgs::calculateMeanCenter(pc->points); center.x = (int) center_o.x; @@ -1213,7 +1243,6 @@ GdaPolygon::GdaPolygon(Shapefile::PolygonContents* pc_s) if (pc->points[i].y < bb_ll_o.y) bb_ll_o.y = pc->points[i].y; if (pc->points[i].y > bb_ur_o.y) bb_ur_o.y = pc->points[i].y; } - //region = wxRegion(n, points); } @@ -1257,7 +1286,6 @@ bool GdaPolygon::pointWithin(const wxPoint& pt) } else { return GdaShapeAlgs::pointInPolygon(pt, n, points); } - //return region.Contains(pt) != wxOutRegion; } bool GdaPolygon::regionIntersect(const wxRegion& r) @@ -1272,23 +1300,14 @@ void GdaPolygon::applyScaleTrans(const GdaScaleTrans& A) { if (null_shape) return; GdaShape::applyScaleTrans(A); // apply affine transform to base class - //all_points_same = true; - //wxPoint tpt; - //A.transform(bb_ll_o, &tpt); - //if (tpt == center) A.transform(bb_ur_o, &tpt); - //if (tpt == center) return; if (points_o) { for (int i=0; ipoints[i], &(points[i])); - //if (points[i] != center) all_points_same = false; } - //region = wxRegion(n, points); // MMM: needs to support multi-part } } @@ -1354,7 +1373,6 @@ void GdaPolygon::paintSelf(wxGraphicsContext* gc) gc->SetBrush(getBrush()); if (n_count > 1) { - //dc.DrawPolyPolygon(n_count, count, points); int start = 0; for (int c=0; cCreatePath(); @@ -1372,7 +1390,6 @@ void GdaPolygon::paintSelf(wxGraphicsContext* gc) } } else { - //dc.DrawPolygon(n, points); wxGraphicsPath path = gc->CreatePath(); for (int i=0; i 15) len_inter = 15-decimals; + //if (len_inter + decimals > 15) len_inter = 15-decimals; double r = 0; for (int i=0; i& date_items) @@ -1104,9 +1110,11 @@ scale_range(0), tic_inc(0), p(0) { } -AxisScale::AxisScale(double data_min_s, double data_max_s, int ticks_s, int lbl_precision_s) +AxisScale::AxisScale(double data_min_s, double data_max_s, int ticks_s, + int lbl_precision_s, bool lbl_prec_fixed_point_s) : data_min(0), data_max(0), scale_min(0), scale_max(0), -scale_range(0), tic_inc(0), p(0), ticks(ticks_s), lbl_precision(lbl_precision_s) +scale_range(0), tic_inc(0), p(0), ticks(ticks_s), +lbl_precision(lbl_precision_s), lbl_prec_fixed_point(lbl_prec_fixed_point_s) { CalculateScale(data_min_s, data_max_s, ticks_s); } @@ -1116,7 +1124,8 @@ AxisScale::AxisScale(const AxisScale& s) scale_min(s.scale_min), scale_max(s.scale_max), scale_range(s.scale_range), tic_inc(s.tic_inc), p(s.p), tics(s.tics), tics_str(s.tics_str), tics_str_show(s.tics_str_show), - ticks(s.ticks) + ticks(s.ticks), lbl_precision(s.lbl_precision), + lbl_prec_fixed_point(s.lbl_prec_fixed_point) { } @@ -1133,6 +1142,8 @@ AxisScale& AxisScale::operator=(const AxisScale& s) tics_str = s.tics_str; tics_str_show = s.tics_str_show; ticks = s.ticks; + lbl_precision = s.lbl_precision; + lbl_prec_fixed_point = s.lbl_prec_fixed_point; return *this; } @@ -1179,7 +1190,8 @@ void AxisScale::CalculateScale(double data_min_s, double data_max_s, } tics_str_show.resize(tics_str.size()); for (int i=0, iend=tics.size(); i& data) +{ + if (data.empty()) return 0; + + std::sort(data.begin(), data.end()); + + int n = data.size(); + if (n % 2 == 1) return data[n/2]; + + return 0.5 * (data[n/2 -1] + data[n/2]); +} + void GenUtils::DeviationFromMean(int nObs, double* data) { if (nObs == 0) return; @@ -1363,14 +1388,21 @@ void GenUtils::MeanAbsoluteDeviation(int nObs, double* data) double sum = 0.0; for (int i=0, iend=nObs; i& undef) +void GenUtils::MeanAbsoluteDeviation(int nObs, double* data, + std::vector& undef) { if (nObs == 0) return; - double nValid = 0; double sum = 0.0; for (int i=0, iend=nObs; i& nValid += 1; } const double mean = sum / nValid; + double mad = 0.0; for (int i=0, iend=nObs; i& data) @@ -1391,10 +1430,18 @@ void GenUtils::MeanAbsoluteDeviation(std::vector& data) double nn = data.size(); for (int i=0, iend=data.size(); i& data, std::vector& undef) +void GenUtils::MeanAbsoluteDeviation(std::vector& data, + std::vector& undef) { if (data.size() == 0) return; double sum = 0.0; @@ -1406,13 +1453,22 @@ void GenUtils::MeanAbsoluteDeviation(std::vector& data, std::vector >& data, std::vector >& undefs) +void GenUtils::Transformation(int trans_type, + std::vector >& data, + std::vector >& undefs) { if (trans_type < 1) { return; @@ -2036,7 +2092,7 @@ wxString GenUtils::WrapText(wxWindow *win, const wxString& text, int widthMax) return wrapper.GetWrapped(); } -wxString GenUtils::GetBasemapCacheDir() +wxString GenUtils::GetExeDir() { wxString exePath = wxStandardPaths::Get().GetExecutablePath(); wxFileName exeFile(exePath); @@ -2072,3 +2128,42 @@ wxString GenUtils::GetSamplesDir() return GetWebPluginsDir(); #endif } + +wxString GenUtils::GetBasemapDir() +{ +#ifdef __linux__ + wxString confDir = wxStandardPaths::Get().GetUserConfigDir(); + // Unix: ~ (the home directory) + wxString geodaUserDir = confDir + wxFileName::GetPathSeparator() + ".geoda"; + if (wxDirExists(geodaUserDir) == false) { + wxFileName::Mkdir(geodaUserDir); + } + wxString basemapDir = geodaUserDir + wxFileName::GetPathSeparator() + "basemap_cache"; + if (wxDirExists(basemapDir) == false) { + wxFileName::Mkdir(basemapDir); + } + return basemapDir; +#else + return GetExeDir() + "basemap_cache"; +#endif +} + +wxString GenUtils::GetCachePath() +{ +#ifdef __linux__ + wxString confDir = wxStandardPaths::Get().GetUserConfigDir(); + // Unix: ~ (the home directory) + wxString geodaUserDir = confDir + wxFileName::GetPathSeparator() + ".geoda"; + if (wxDirExists(geodaUserDir) == false) { + wxFileName::Mkdir(geodaUserDir); + } + wxString cachePath = geodaUserDir + wxFileName::GetPathSeparator() + "cache.sqlite"; + if (wxFileExists(cachePath) == false) { + wxString origCachePath = GetExeDir() + "cache.sqlite"; + wxCopyFile(origCachePath, cachePath); + } + return cachePath; +#else + return GetExeDir() + "cache.sqlite"; +#endif +} diff --git a/GenUtils.h b/GenUtils.h index 34d4f723a..11e51f285 100644 --- a/GenUtils.h +++ b/GenUtils.h @@ -324,7 +324,8 @@ struct SimpleLinearRegression { struct AxisScale { AxisScale(); - AxisScale(double data_min_s, double data_max_s, int ticks_s = 5, int lbl_precision=2); + AxisScale(double data_min_s, double data_max_s, int ticks_s = 5, + int lbl_precision=2, bool lbl_prec_fixed_point=false); AxisScale(const AxisScale& s); AxisScale& operator=(const AxisScale& s); void CalculateScale(double data_min_s, double data_max_s, @@ -340,6 +341,7 @@ struct AxisScale { double scale_range; double tic_inc; int lbl_precision; + bool lbl_prec_fixed_point; int ticks; int p; // power of ten to scale significant digit vectortics; // numerical tic values @@ -354,7 +356,7 @@ namespace GenUtils { bool StrToBool(const wxString& s); wxString Pad(const wxString& s, int width, bool pad_left=true); wxString PadTrim(const wxString& s, int width, bool pad_left=true); - wxString DblToStr(double x, int precision = 3); + wxString DblToStr(double x, int precision = 3, bool fixed_point=false); wxString IntToStr(int x, int precision = 0); wxString PtToStr(const wxPoint& p); wxString PtToStr(const wxRealPoint& p); @@ -373,6 +375,7 @@ namespace GenUtils { double Sum(vector& data); double SumOfSquares(vector& data); + double Median(std::vector& data); bool StandardizeData(int nObs, double* data); bool StandardizeData(int nObs, double* data, vector& undef); @@ -431,10 +434,12 @@ namespace GenUtils { wxString FindLongestSubString(const vector strings, bool case_sensitive=false); wxString WrapText(wxWindow *win, const wxString& text, int widthMax); - wxString GetBasemapCacheDir(); + wxString GetExeDir(); wxString GetWebPluginsDir(); wxString GetResourceDir(); wxString GetSamplesDir(); + wxString GetBasemapDir(); + wxString GetCachePath(); bool less_vectors(const vector& a,const vector& b); // Act like matlab's [Y,I] = SORT(X) @@ -549,4 +554,5 @@ class GeoDaSet { current = 0; } }; + #endif diff --git a/GeneralWxUtils.cpp b/GeneralWxUtils.cpp index 8d474be91..51a2df9fd 100644 --- a/GeneralWxUtils.cpp +++ b/GeneralWxUtils.cpp @@ -27,7 +27,6 @@ #include #include - #include "GeneralWxUtils.h" //////////////////////////////////////////////////////////////////////// @@ -523,4 +522,70 @@ void GeneralWxUtils::SaveWindowAsImage(wxWindow *win, wxString title) } } +/////////////////////////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// +TransparentSettingDialog::TransparentSettingDialog( + wxWindow * parent, + double _transparency, + wxWindowID id, + const wxString & caption, + const wxPoint & position, + const wxSize & size, + long style ) +: wxDialog( parent, id, caption, position, size, style), +transparency(_transparency) +{ + wxLogMessage("Open TransparentSettingDialog"); + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + this->SetSizer(topSizer); + + wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL); + topSizer->Add(boxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + + // A text control for the user’s name + int trasp_scale = 100 * transparency; + + wxBoxSizer* subSizer = new wxBoxSizer(wxHORIZONTAL); + slider = new wxSlider(this, wxID_ANY, trasp_scale, 0, 100, + wxDefaultPosition, wxSize(200, -1), + wxSL_HORIZONTAL); + subSizer->Add(new wxStaticText(this, wxID_ANY,"1.0"), 0, + wxALIGN_CENTER_VERTICAL|wxALL); + subSizer->Add(slider, 0, wxALIGN_CENTER_VERTICAL|wxALL); + subSizer->Add(new wxStaticText(this, wxID_ANY,"0.0"), 0, + wxALIGN_CENTER_VERTICAL|wxALL); + + boxSizer->Add(subSizer); + wxString txt_transparency = wxString::Format(_("Current Opacity: %.2f"), 1.0 - transparency); + + slider_text = new wxStaticText( + this, + wxID_ANY, + txt_transparency, + wxDefaultPosition, + wxSize(100, -1)); + boxSizer->Add(slider_text, 0, wxGROW|wxALL, 5); + boxSizer->Add(new wxButton(this, wxID_OK, _("OK")), 0, wxALIGN_CENTER|wxALL, 10); + + topSizer->Fit(this); + + slider->Bind(wxEVT_SLIDER, &TransparentSettingDialog::OnSliderChange, this); +} +TransparentSettingDialog::~TransparentSettingDialog() +{ +} + +void TransparentSettingDialog::OnSliderChange( wxCommandEvent & event ) +{ + int val = event.GetInt(); + double trasp = 1.0 - val / 100.0; + slider_text->SetLabel(wxString::Format(_("Current Transparency: %.2f"), trasp)); + transparency = trasp; +} + +double TransparentSettingDialog::GetTransparency() +{ + return transparency; +} diff --git a/GeneralWxUtils.h b/GeneralWxUtils.h index bdbd3f004..90577c78e 100644 --- a/GeneralWxUtils.h +++ b/GeneralWxUtils.h @@ -94,4 +94,24 @@ class ScrolledDetailMsgDialog : public wxDialog void OnSaveClick( wxCommandEvent& event ); }; +class TransparentSettingDialog: public wxDialog +{ + double transparency; + wxSlider* slider; + wxStaticText* slider_text; + void OnSliderChange(wxCommandEvent& event ); +public: + TransparentSettingDialog (); + TransparentSettingDialog (wxWindow * parent, + double trasp, + wxWindowID id=wxID_ANY, + const wxString & caption="Transparent Setting Dialog", + const wxPoint & pos = wxDefaultPosition, + const wxSize & size = wxDefaultSize, + long style = wxDEFAULT_DIALOG_STYLE ); + virtual ~TransparentSettingDialog (); + + double GetTransparency(); +}; + #endif diff --git a/GeoDa.cpp b/GeoDa.cpp index c74fad5e3..9266b50d1 100644 --- a/GeoDa.cpp +++ b/GeoDa.cpp @@ -78,6 +78,7 @@ #include "DataViewer/TableInterface.h" #include "DataViewer/TableState.h" #include "DataViewer/TimeState.h" +#include "DialogTools/DissolveDlg.h" #include "DialogTools/CreatingWeightDlg.h" #include "DialogTools/CatClassifDlg.h" #include "DialogTools/PCPDlg.h" @@ -156,18 +157,15 @@ #include "Explore/WebViewExampleWin.h" #include "Explore/Basemap.h" #include "Explore/ColocationMapView.h" - +#include "Explore/GroupingMapView.h" #include "Regression/DiagnosticReport.h" - #include "ShapeOperations/CsvFileUtils.h" #include "ShapeOperations/WeightsManager.h" #include "ShapeOperations/WeightsManState.h" #include "ShapeOperations/OGRDataAdapter.h" - #include "VarCalc/CalcHelp.h" #include "Algorithms/redcap.h" #include "Algorithms/fastcluster.h" - #include "wxTranslationHelper.h" #include "GdaException.h" #include "FramesManager.h" @@ -518,6 +516,7 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::CheckMenuItem(mb, XRCID("ID_SELECT_WITH_RECT"), true); GeneralWxUtils::CheckMenuItem(mb, XRCID("ID_SELECT_WITH_CIRCLE"), false); GeneralWxUtils::CheckMenuItem(mb, XRCID("ID_SELECT_WITH_LINE"), false); + GeneralWxUtils::CheckMenuItem(mb, XRCID("ID_SELECT_WITH_CUSTOM"), false); EnableTool(XRCID("ID_TOOLS_MENU"), proj_open); EnableTool(XRCID("ID_TOOLS_WEIGHTS_MANAGER"), proj_open); @@ -525,6 +524,7 @@ void GdaFrame::UpdateToolbarAndMenus() EnableTool(XRCID("ID_CONNECTIVITY_HIST_VIEW"), proj_open); EnableTool(XRCID("ID_CONNECTIVITY_MAP_VIEW"), proj_open); + GeneralWxUtils::EnableMenuItem(mb, _("Tools"), XRCID("ID_SHAPE_DISSOLVE"), proj_open); GeneralWxUtils::EnableMenuItem(mb, _("Tools"), XRCID("ID_TABLE_SPATIAL_JOIN"), proj_open); GeneralWxUtils::EnableMenuItem(mb, _("Tools"), XRCID("ID_TOOLS_WEIGHTS_MANAGER"), proj_open); GeneralWxUtils::EnableMenuItem(mb, _("Tools"), XRCID("ID_TOOLS_WEIGHTS_CREATE"), proj_open); @@ -537,6 +537,7 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SELECT_WITH_RECT"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SELECT_WITH_CIRCLE"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SELECT_WITH_LINE"), proj_open); + GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SELECT_WITH_CUSTOM"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SELECTION_MODE"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_FIT_TO_WINDOW_MODE"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_FIXED_ASPECT_RATIO_MODE"), proj_open); @@ -672,13 +673,19 @@ void GdaFrame::UpdateToolbarAndMenus() CatClassifManager* ccm = project_p->GetCatClassifManager(); ccm->GetTitles(titles); - sm->Append(XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"), _("Create New Custom"), _("Create new custom categories classification.")); + sm->Append(XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"), + _("Create New Custom"), + _("Create new custom categories classification.")); sm->AppendSeparator(); for (size_t j=0; jAppend(GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0+j, titles[j]); } - GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, &GdaFrame::OnCustomCategoryClick, GdaFrame::GetGdaFrame(), GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0, GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0 + titles.size()); + GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, + &GdaFrame::OnEmptyCustomCategoryClick, + GdaFrame::GetGdaFrame(), + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0, + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0 + titles.size()); } } @@ -1086,6 +1093,42 @@ void GdaFrame::OnCustomCategoryClick(wxCommandEvent& event) if (idx < 0 || idx >= titles.size()) return; wxString cc_title = titles[idx]; + + TemplateFrame* t = TemplateFrame::GetActiveFrame(); + if (!t) return; + if (CartogramNewFrame* f = dynamic_cast(t)) { + f->OnCustomCatClassifA(cc_title); + } else if (ConditionalMapFrame* f = dynamic_cast(t)) { + f->OnCustomCatClassifA(cc_title); + } else if (MapFrame* f = dynamic_cast(t)) { + f->OnCustomCatClassifA(cc_title); + } else if (PCPFrame* f = dynamic_cast(t)) { + f->OnCustomCatClassifA(cc_title); + } else if (CartogramNewFrame* f = dynamic_cast(t)) { + f->OnCustomCatClassifA(cc_title); + } else if (ScatterNewPlotFrame* f = dynamic_cast(t)) { + f->OnCustomCatClassifA(cc_title); + } + } +} + +void GdaFrame::OnEmptyCustomCategoryClick(wxCommandEvent& event) +{ + int xrc_id = event.GetId(); + if (project_p) { + CatClassifManager* ccm = project_p->GetCatClassifManager(); + if (!ccm) return; + vector titles; + ccm->GetTitles(titles); + + int idx = xrc_id - GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0; + if (idx < 0 || idx >= titles.size()) return; + + wxString cc_title = titles[idx]; + CatClassifState* cc_state = ccm->FindClassifState(cc_title); + CatClassifDef& cc_def = cc_state->GetCatClassif(); + wxString fld_name = cc_def.assoc_db_fld_name; + project_p->SetDefaultVarName(0, fld_name); VariableSettingsDlg dlg(project_p, VariableSettingsDlg::univariate); if (dlg.ShowModal() != wxID_OK) return; @@ -1424,7 +1467,8 @@ void GdaFrame::OnSaveProject(wxCommandEvent& event) try { project_p->SaveProjectConf(); } catch( GdaException& e) { - // do nothing if save project configuration failed, since it's not critical + // do nothing if save project configuration failed, + // since it's not critical } } catch (GdaException& e) { // the title of the message dialog is empty, because @@ -1445,10 +1489,8 @@ void GdaFrame::OnSaveProject(wxCommandEvent& event) void GdaFrame::OnSaveAsProject(wxCommandEvent& event) { wxLogMessage("Click GdaFrame::OnSaveAsProject"); - if (!project_p || !project_p->GetTableInt()) - return; - + return; wxString proj_fname = project_p->GetProjectFullPath(); bool is_new_project = (proj_fname.empty() || !wxFileExists(proj_fname)); @@ -1513,6 +1555,14 @@ void GdaFrame::OnSelectWithLine(wxCommandEvent& event) t->OnSelectWithLine(event); } +void GdaFrame::OnSelectWithCustom(wxCommandEvent& event) +{ + wxLogMessage("Click GdaFrame::OnSelectWithCustom"); + TemplateFrame* t = TemplateFrame::GetActiveFrame(); + if (!t) return; + t->OnSelectWithCustom(event); +} + void GdaFrame::OnSelectionMode(wxCommandEvent& event) { wxLogMessage("Click GdaFrame::OnSelectionMode"); @@ -1536,11 +1586,11 @@ void GdaFrame::OnFixedAspectRatioMode(wxCommandEvent& event) if (t) t->OnFixedAspectRatioMode(event); } -void GdaFrame::OnSetDisplayPrecision(wxCommandEvent& event) +void GdaFrame::OnSetAxisDisplayPrecision(wxCommandEvent& event) { wxLogMessage("Click GdaFrame::OnSetDisplayPrecision"); TemplateFrame* t = TemplateFrame::GetActiveFrame(); - if (t) t->OnSetDisplayPrecision(event); + if (t) t->OnSetAxisDisplayPrecision(event); } void GdaFrame::OnZoomMode(wxCommandEvent& event) @@ -1649,6 +1699,14 @@ void GdaFrame::OnLegendUseScientificNotation(wxCommandEvent& event) t->OnLegendUseScientificNotation(event); } +void GdaFrame::OnLegendDisplayPrecision(wxCommandEvent& event) +{ + wxLogMessage("Click GdaFrame::OnLegendDisplayPrecision"); + TemplateFrame* t = TemplateFrame::GetActiveFrame(); + if (!t) return; + t->OnLegendDisplayPrecision(event); +} + void GdaFrame::OnLegendBackgroundColor(wxCommandEvent& event) { wxLogMessage("Click GdaFrame::OnLegendBackgroundColor"); @@ -2113,7 +2171,11 @@ void GdaFrame::OnMapChoices(wxCommandEvent& event) for (size_t j=0; jAppend(GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0+j, titles[j]); } - GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, &GdaFrame::OnCustomCategoryClick, GdaFrame::GetGdaFrame(), GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0, GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0 + titles.size()); + GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, + &GdaFrame::OnCustomCategoryClick, + GdaFrame::GetGdaFrame(), + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0, + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0 + titles.size()); } } PopupMenu(popupMenu, wxDefaultPosition); @@ -2525,6 +2587,53 @@ void GdaFrame::OnSpatialJoin(wxCommandEvent& event) } } +void GdaFrame::OnDissolve(wxCommandEvent& event) +{ + if (!project_p || !project_p->FindTableBase()) return; + + if (project_p->IsTableOnlyProject()) { + wxMessageDialog dlg (this, + _("Dissolve does not work with Table only datasource."), + _("Info"), wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + return; + } + if (project_p->GetShapeType() != Shapefile::POLYGON) { + wxMessageDialog dlg (this, + _("Dissolve only works on polygon dataset."), + _("Warning"), wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + return; + } + DissolveDlg* dlg = new DissolveDlg(this, project_p); + dlg->Show(true); +} + +void GdaFrame::OnGroupingMap(wxCommandEvent& event) +{ + if (!project_p || !project_p->FindTableBase()) return; + + if (project_p->IsTableOnlyProject()) { + wxMessageDialog dlg (this, + _("Hierachical Map does not work with Table only datasource."), + _("Info"), wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + return; + } + + HierachicalMapSelectDlg dlg(this, project_p); + if (dlg.ShowModal() == wxID_OK) { + HierachicalMapFrame* nf = new HierachicalMapFrame(this, project_p, + dlg.GetVarInfo(), + dlg.GetColIds(), + dlg.GetWUID(), + dlg.GetTitle(), + wxDefaultPosition, + GdaConst::map_default_size); + nf->Show(true); + } +} + void GdaFrame::OnExportSelectedToOGR(wxCommandEvent& event) { if (!project_p || !project_p->GetTableInt()) return; @@ -2572,7 +2681,8 @@ void GdaFrame::OnPreferenceSetup(wxCommandEvent& event) PreferenceDlg dlg(this); dlg.Show(true); } else { - PreferenceDlg dlg(this, project_p->GetHighlightState()); + PreferenceDlg dlg(this, project_p->GetHighlightState(), + project_p->GetTableState()); dlg.Show(true); } } @@ -2729,7 +2839,6 @@ void GdaFrame::OnRegressionClassic(wxCommandEvent& event) void GdaFrame::OnPublish(wxCommandEvent& event) { - Project* p = GetProject(); if (p) { PublishDlg dlg(this,p); @@ -3928,7 +4037,7 @@ void GdaFrame::OnOpenMultiLJC(wxCommandEvent& event) table_int->GetColData(VS.col_ids[c], VS.var_info[c].time, data); for (int i=0; i(t)) { + f->OnDisplayPrecision(event); + } else if (ScatterNewPlotFrame* f = dynamic_cast(t)) { + f->OnDisplayPrecision(event); + } else if (BoxPlotFrame* f = dynamic_cast(t)) { + f->OnDisplayPrecision(event); + } else if (HistogramFrame* f = dynamic_cast(t)) { + f->OnDisplayPrecision(event); + } else if (ConditionalNewFrame* f = dynamic_cast(t)) { + f->OnDisplayPrecision(event); + } else if (CorrelogramFrame* f = dynamic_cast(t)) { + f->OnDisplayPrecision(event); + } +} + void GdaFrame::OnSaveMoranI(wxCommandEvent& event) { wxLogMessage("In OnSaveMoranI()"); @@ -5529,6 +5657,26 @@ void GdaFrame::OnChangeConnSelectedColor(wxCommandEvent& event) } } +void GdaFrame::OnChangeConnRootSize(wxCommandEvent& event) +{ + wxLogMessage("In GdaFrame::OnChangeConnRootSize()"); + TemplateFrame* t = TemplateFrame::GetActiveFrame(); + if (!t) return; + if (HierachicalMapFrame* f = dynamic_cast(t)) { + f->OnChangeConnRootSize(event); + } +} + +void GdaFrame::OnChangeConnRootColor(wxCommandEvent& event) +{ + wxLogMessage("In GdaFrame::OnChangeConnRootColor()"); + TemplateFrame* t = TemplateFrame::GetActiveFrame(); + if (!t) return; + if (HierachicalMapFrame* f = dynamic_cast(t)) { + f->OnChangeConnRootColor(event); + } +} + void GdaFrame::OnChangeNeighborFillColor(wxCommandEvent& event) { wxLogMessage("In GdaFrame::OnChangeNeighborFillColor()"); @@ -6129,32 +6277,6 @@ void GdaFrame::OnReportBug(wxCommandEvent& WXUNUSED(event) ) wxLogMessage("In GdaFrame::OnReportBug()"); ReportBugDlg bugDlg(this); bugDlg.ShowModal(); - - - /* - wxString toEmail = "spatial@uchicago.edu"; - wxString subject = "Report GeoDa Bug"; - wxString content; - - wxString logger_path; - if (GeneralWxUtils::isMac()) { - logger_path << GenUtils::GetBasemapCacheDir() << "../../../logger.txt"; - } else { - logger_path << GenUtils::GetBasemapCacheDir() << "\\logger.txt"; - } - wxTextFile tfile; - tfile.Open(logger_path); - while(!tfile.Eof()) - { - content << tfile.GetNextLine() << "\n"; - } - - wxString mail = wxString::Format("mailto:%s?subject=%s&body=[Bug Description]: please simply describe the bug\n\n[Data]: Point/Polygon? can you share your data for troubleshooting?\n\n[Details]:\n%s", toEmail, subject, content); - wxURI url(mail); - wxString encoded_url = "open " + url.BuildURI(); - - wxExecute(encoded_url); - */ } void GdaFrame::OnCheckUpdates(wxCommandEvent& WXUNUSED(event) ) @@ -6185,6 +6307,12 @@ void GdaFrame::OnCheckTestMode(wxCommandEvent& event) OGRDataAdapter::GetInstance().AddEntry("test_mode", checked); } +void GdaFrame::OnDonate(wxCommandEvent& WXUNUSED(event) ) +{ + wxString donate_url = "https://giving.uchicago.edu/site/Donation2?1838.donation=form1&df_id=1838&mfc_pref=T&set.Designee=1901"; + wxLaunchDefaultBrowser(donate_url); +} + void GdaFrame::OnHelpAbout(wxCommandEvent& WXUNUSED(event) ) { wxLogMessage("In GdaFrame::OnHelpAbout()"); @@ -6194,13 +6322,15 @@ void GdaFrame::OnHelpAbout(wxCommandEvent& WXUNUSED(event) ) wxStaticText* cr = dynamic_cast (wxWindow::FindWindowById(XRCID("ID_COPYRIGHT"), &dlg)); wxString cr_s; - cr_s << "Copyright (C) 2011-" << Gda::version_year << " by Luc Anselin"; + + cr_s << wxString::Format(_("Copyright (C) 2011-%d by Luc Anselin"), + Gda::version_year); if (cr) cr->SetLabelText(cr_s); wxStaticText* arr = dynamic_cast (wxWindow::FindWindowById(XRCID("ID_ALL_RIGHTS_RESERVED"), &dlg)); wxString arr_s; - arr_s << "All Rights Reserved"; + arr_s << _("All Rights Reserved"); if (arr) arr->SetLabelText(arr_s); wxStaticText* vl = dynamic_cast @@ -6223,33 +6353,34 @@ void GdaFrame::OnHelpAbout(wxCommandEvent& WXUNUSED(event) ) } // otherwise assumed to be release vl_s << " " << Gda::version_day << " "; if (Gda::version_month == 1) { - vl_s << "January"; + vl_s << _("January"); } else if (Gda::version_month == 2) { - vl_s << "February"; + vl_s << _("February"); } else if (Gda::version_month == 3) { - vl_s << "March"; + vl_s << _("March"); } else if (Gda::version_month == 4) { - vl_s << "April"; + vl_s << _("April"); } else if (Gda::version_month == 5) { - vl_s << "May"; + vl_s << _("May"); } else if (Gda::version_month == 6) { - vl_s << "June"; + vl_s << _("June"); } else if (Gda::version_month == 7) { - vl_s << "July"; + vl_s << _("July"); } else if (Gda::version_month == 8) { - vl_s << "August"; + vl_s << _("August"); } else if (Gda::version_month == 9) { - vl_s << "September"; + vl_s << _("September"); } else if (Gda::version_month == 10) { - vl_s << "October"; + vl_s << _("October"); } else if (Gda::version_month == 11) { - vl_s << "November"; + vl_s << _("November"); } else { - vl_s << "December"; + vl_s << _("December"); } vl_s << " " << Gda::version_year; if (vl) vl->SetLabelText(vl_s); + wxButton* btn_donate = dynamic_cast(wxWindow::FindWindowById(XRCID("wxID_DONATE"), &dlg)); wxButton* btn_update = dynamic_cast(wxWindow::FindWindowById(XRCID("ID_CHECKUPDATES"), &dlg)); wxCheckBox* chk_testmode_stable = dynamic_cast(wxWindow::FindWindowById(XRCID("IDC_CHECK_TESTMODE_STABLE"), &dlg)); std::vector test_mode = OGRDataAdapter::GetInstance().GetHistory("test_mode"); @@ -6263,9 +6394,9 @@ void GdaFrame::OnHelpAbout(wxCommandEvent& WXUNUSED(event) ) chk_testmode_stable->SetValue(true); } } - + + btn_donate->Connect(wxEVT_BUTTON, wxCommandEventHandler(GdaFrame::OnDonate), NULL, this); chk_testmode_stable->Connect(wxEVT_CHECKBOX, wxCommandEventHandler(GdaFrame::OnCheckTestMode), NULL, this); - btn_update->Connect(wxEVT_BUTTON, wxCommandEventHandler(GdaFrame::OnCheckUpdates), NULL, this); dlg.ShowModal(); } @@ -6541,11 +6672,12 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("ID_SELECT_WITH_RECT"), GdaFrame::OnSelectWithRect) EVT_MENU(XRCID("ID_SELECT_WITH_CIRCLE"), GdaFrame::OnSelectWithCircle) EVT_MENU(XRCID("ID_SELECT_WITH_LINE"), GdaFrame::OnSelectWithLine) + EVT_MENU(XRCID("ID_SELECT_WITH_CUSTOM"), GdaFrame::OnSelectWithCustom) EVT_MENU(XRCID("ID_SELECTION_MODE"), GdaFrame::OnSelectionMode) EVT_MENU(XRCID("ID_FIT_TO_WINDOW_MODE"), GdaFrame::OnFitToWindowMode) // Fit-To-Window Mode EVT_MENU(XRCID("ID_FIXED_ASPECT_RATIO_MODE"), GdaFrame::OnFixedAspectRatioMode) - EVT_MENU(XRCID("ID_ADJUST_AXIS_PRECISION"), GdaFrame::OnSetDisplayPrecision) + EVT_MENU(XRCID("ID_ADJUST_AXIS_PRECISION"), GdaFrame::OnSetAxisDisplayPrecision) EVT_MENU(XRCID("ID_ZOOM_MODE"), GdaFrame::OnZoomMode) EVT_MENU(XRCID("ID_PAN_MODE"), GdaFrame::OnPanMode) // Print Canvas State to Log File. Used for debugging. @@ -6558,6 +6690,7 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("ID_SAVE_SELECTED_TO_COLUMN"), GdaFrame::OnSaveSelectedToColumn) EVT_MENU(XRCID("ID_CANVAS_BACKGROUND_COLOR"), GdaFrame::OnCanvasBackgroundColor) EVT_MENU(XRCID("ID_LEGEND_USE_SCI_NOTATION"), GdaFrame::OnLegendUseScientificNotation) + EVT_MENU(XRCID("ID_LEGEND_DISPLAY_PRECISION"), GdaFrame::OnLegendDisplayPrecision) EVT_MENU(XRCID("ID_LEGEND_BACKGROUND_COLOR"), GdaFrame::OnLegendBackgroundColor) EVT_MENU(XRCID("ID_SELECTABLE_FILL_COLOR"), GdaFrame::OnSelectableFillColor) EVT_MENU(XRCID("ID_SELECTABLE_OUTLINE_COLOR"), GdaFrame::OnSelectableOutlineColor) @@ -6619,6 +6752,8 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("ID_TABLE_MERGE_TABLE_DATA"), GdaFrame::OnMergeTableData) EVT_MENU(XRCID("ID_TABLE_AGGREGATION_DATA"), GdaFrame::OnAggregateData) EVT_MENU(XRCID("ID_TABLE_SPATIAL_JOIN"), GdaFrame::OnSpatialJoin) + EVT_MENU(XRCID("ID_SHAPE_DISSOLVE"), GdaFrame::OnDissolve) + EVT_MENU(XRCID("ID_HIERARCHICAL_MAP"), GdaFrame::OnGroupingMap) EVT_MENU(XRCID("ID_EXPORT_TO_CSV_FILE"), GdaFrame::OnExportToCsvFile) // not used EVT_MENU(XRCID("ID_REGRESSION_CLASSIC"), GdaFrame::OnRegressionClassic) EVT_TOOL(XRCID("ID_REGRESSION_CLASSIC"), GdaFrame::OnRegressionClassic) @@ -6730,6 +6865,7 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("IDM_MUL_LJC"), GdaFrame::OnOpenMultiLJC) EVT_TOOL(XRCID("IDM_MUL_LJC"), GdaFrame::OnOpenMultiLJC) + EVT_MENU(XRCID("ID_VIEW_DISPLAY_PRECISION"),GdaFrame::OnDisplayPrecision) EVT_MENU(XRCID("ID_HISTOGRAM_INTERVALS"), GdaFrame::OnHistogramIntervals) EVT_MENU(XRCID("ID_SAVE_CONNECTIVITY_TO_TABLE"), GdaFrame::OnSaveConnectivityToTable) EVT_MENU(XRCID("ID_SELECT_ISOLATES"), GdaFrame::OnSelectIsolates) @@ -6759,6 +6895,8 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("ID_WEIGHTS_GRAPH_THICKNESS_STRONG"), GdaFrame::OnChangeGraphThickness) EVT_MENU(XRCID("ID_WEIGHTS_GRAPH_COLOR"), GdaFrame::OnChangeGraphColor) EVT_MENU(XRCID("ID_CONN_SELECTED_COLOR"), GdaFrame::OnChangeConnSelectedColor) +EVT_MENU(XRCID("ID_CONN_ROOT_SIZE"), GdaFrame::OnChangeConnRootSize) +EVT_MENU(XRCID("ID_CONN_ROOT_COLOR"), GdaFrame::OnChangeConnRootColor) EVT_MENU(XRCID("ID_CONN_NEIGHBOR_FILL_COLOR"), GdaFrame::OnChangeNeighborFillColor) EVT_MENU(XRCID("ID_SELECT_NEIGHBORS_OF_CORES"), GdaFrame::OnSelectNeighborsOfCores) EVT_MENU(XRCID("ID_SELECT_CORES_AND_NEIGHBORS"), GdaFrame::OnSelectCoresAndNeighbors) @@ -7054,7 +7192,7 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(GdaConst::ID_PLOTS_PER_VIEW_ALL, GdaFrame::OnPlotsPerViewAll) EVT_MENU(XRCID("ID_DISPLAY_STATUS_BAR"), GdaFrame::OnDisplayStatusBar) EVT_MENU(XRCID("wxID_ABOUT"), GdaFrame::OnHelpAbout) + EVT_MENU(XRCID("wxID_DONATE"), GdaFrame::OnDonate) EVT_MENU(XRCID("wxID_CHECKUPDATES"), GdaFrame::OnCheckUpdates) EVT_MENU(XRCID("wxID_REPORTBUG"), GdaFrame::OnReportBug) - END_EVENT_TABLE() diff --git a/GeoDa.h b/GeoDa.h index 01e08f95a..57c27e16f 100644 --- a/GeoDa.h +++ b/GeoDa.h @@ -119,10 +119,11 @@ class GdaFrame: public wxFrame void OnSelectWithRect(wxCommandEvent& event); void OnSelectWithCircle(wxCommandEvent& event); void OnSelectWithLine(wxCommandEvent& event); + void OnSelectWithCustom(wxCommandEvent& event); void OnSelectionMode(wxCommandEvent& event); void OnFitToWindowMode(wxCommandEvent& event); void OnFixedAspectRatioMode(wxCommandEvent& event); - void OnSetDisplayPrecision(wxCommandEvent& event); + void OnSetAxisDisplayPrecision(wxCommandEvent& event); void OnZoomMode(wxCommandEvent& event); void OnPanMode(wxCommandEvent& event); void OnPrintCanvasState(wxCommandEvent& event); @@ -144,6 +145,7 @@ class GdaFrame: public wxFrame void OnSaveSelectedToColumn(wxCommandEvent& event); void OnCanvasBackgroundColor(wxCommandEvent& event); void OnLegendUseScientificNotation(wxCommandEvent& event); + void OnLegendDisplayPrecision(wxCommandEvent& event); void OnLegendBackgroundColor(wxCommandEvent& event); void OnSelectableFillColor(wxCommandEvent& event); void OnSelectableOutlineColor(wxCommandEvent& event); @@ -198,11 +200,12 @@ class GdaFrame: public wxFrame void OnMergeTableData(wxCommandEvent& event); void OnAggregateData(wxCommandEvent& event); void OnSpatialJoin(wxCommandEvent& event); + void OnGroupingMap(wxCommandEvent& event); void OnExportToCsvFile(wxCommandEvent& event); // not used currently void OnExportToOGR(wxCommandEvent& event); void OnExportSelectedToOGR(wxCommandEvent& event); void OnGeneratePointShpFile(wxCommandEvent& event); - + void OnDissolve(wxCommandEvent& event); void OnRegressionClassic(wxCommandEvent& event); void OnPublish(wxCommandEvent& event); @@ -493,7 +496,8 @@ class GdaFrame: public wxFrame void OnChangeGraphColor(wxCommandEvent& event); void OnChangeConnSelectedColor(wxCommandEvent& event); void OnChangeNeighborFillColor(wxCommandEvent& event); - + void OnChangeConnRootSize(wxCommandEvent& event); + void OnChangeConnRootColor(wxCommandEvent& event); void OnAddMeanCenters(wxCommandEvent& event); void OnAddCentroids(wxCommandEvent& event); void OnDisplayMeanCenters(wxCommandEvent& event); @@ -503,7 +507,8 @@ class GdaFrame: public wxFrame void OnExportMeanCntrs(wxCommandEvent& event); void OnExportCentroids(wxCommandEvent& event); void OnSaveVoronoiDupsToTable(wxCommandEvent& event); - + void OnDisplayPrecision(wxCommandEvent& event); + // ScatterPlot and PCP specific callbacks void OnViewStandardizedData(wxCommandEvent& event); void OnViewOriginalData(wxCommandEvent& event); @@ -554,7 +559,7 @@ class GdaFrame: public wxFrame void OnPlotsPerViewAll(wxCommandEvent& event); void OnDisplayStatusBar(wxCommandEvent& event); - + void OnDonate(wxCommandEvent& event); void OnHelpAbout(wxCommandEvent& event); void OnReportBug(wxCommandEvent& event); void OnCheckUpdates(wxCommandEvent& event); @@ -595,7 +600,8 @@ class GdaFrame: public wxFrame void SetMenusToDefault(); void RemoveInvalidRecentDS(); - + + void OnEmptyCustomCategoryClick(wxCommandEvent& event); void OnCustomCategoryClick(wxCommandEvent& event); void OnCustomCategoryClick_B(wxCommandEvent& event); void OnCustomCategoryClick_C(wxCommandEvent& event); diff --git a/HighlightState.cpp b/HighlightState.cpp index 2baddd2c2..688645323 100644 --- a/HighlightState.cpp +++ b/HighlightState.cpp @@ -44,6 +44,16 @@ void HighlightState::closeAndDeleteWhenEmpty() LOG_MSG("Exiting HighlightState::closeAndDeleteWhenEmpty"); } +std::map HighlightState::GetMetaData() +{ + return meta_data; +} + +void HighlightState::SetMetaData(std::map& _meta_data) +{ + meta_data = _meta_data; +} + void HighlightState::SetSize(int n) { total_highlighted = 0; highlight.resize(n); diff --git a/HighlightState.h b/HighlightState.h index ad37d7799..9bbc9164d 100644 --- a/HighlightState.h +++ b/HighlightState.h @@ -22,6 +22,7 @@ #include #include +#include #include #include "HLStateInt.h" @@ -59,7 +60,8 @@ class HighlightState : public HLStateInt { virtual wxString GetEventTypeStr(); virtual void SetEventType( EventType e ) { event_type = e; } virtual int GetTotalHighlighted() { return total_highlighted; } - + virtual std::map GetMetaData(); + virtual void SetMetaData(std::map& meta_data); virtual void registerObserver(HighlightStateObserver* o); virtual void removeObserver(HighlightStateObserver* o); virtual void notifyObservers(); @@ -69,6 +71,7 @@ class HighlightState : public HLStateInt { private: /** The list of registered HighlightStateObserver objects. */ std::list observers; + /** This array of booleans corresponds to the highlight/not-highlighted of each underlying SHP file observation. */ std::vector highlight; @@ -101,6 +104,11 @@ class HighlightState : public HLStateInt { /** When this is set to true and the list of observers is empty, the class instance will automatically delete itself. */ bool delete_self_when_empty; + + // #1552 meta data of highlighted: e.g. what original variable this + // pertained to. Or, if it was not based on a range selection, that it was a + // purely geographic/spatial selection + std::map meta_data; }; #endif diff --git a/Project.cpp b/Project.cpp index 82b376809..8509851d8 100644 --- a/Project.cpp +++ b/Project.cpp @@ -89,7 +89,7 @@ dist_metric(WeightsMetaInfo::DM_euclidean), dist_units(WeightsMetaInfo::DU_mile), min_1nn_dist_euc(-1), max_1nn_dist_euc(-1), max_dist_euc(-1), min_1nn_dist_arc(-1), max_1nn_dist_arc(-1), max_dist_arc(-1), -sourceSR(NULL), rtree_bbox_ready(false) +sourceSR(NULL), rtree_bbox_ready(false), has_null_geometry(false) { wxLogMessage("Entering Project::Project (existing project)"); @@ -205,7 +205,8 @@ Project::~Project() if (voronoi_rook_nbr_gal) delete [] voronoi_rook_nbr_gal; - for (std::map::iterator i= shared_category_scratch.begin(); i != shared_category_scratch.end(); ++i) { + for (std::map::iterator i= shared_category_scratch.begin(); + i != shared_category_scratch.end(); ++i) { delete i->second; } @@ -240,6 +241,11 @@ Project::~Project() wxLogMessage("Exiting Project::~Project"); } +CatClassifManager* Project::GetCatClassifManager() +{ + return cat_classif_manager; +} + int Project::GetNumFields() { int n_fields = 0; @@ -262,14 +268,11 @@ void Project::UpdateProjectConf(ProjectConfiguration* conf) if (layername == _layername) { // we only update Custom Categories // first correct variable_order - std::vector var_list; - std::map var_type_map; - layer_proxy->GetVarTypeMap(var_list, var_type_map); - + std::vector var_list = layer_proxy->GetFieldNames(); + std::vector var_types = layer_proxy->GetFieldTypes(); VarOrderPtree* variable_order = layer_conf->GetVarOrderPtree(); - variable_order->CorrectVarGroups(var_type_map, var_list, + variable_order->CorrectVarGroups(var_list, var_types, IsFieldCaseSensitive()); - project_conf->GetLayerConfiguration()->SetVariableOrder(variable_order); table_int->Update(*variable_order); } else { @@ -327,6 +330,19 @@ bool Project::SetWorkingDir(const wxString& path) return true; } +Shapefile::ShapeType Project::GetShapefileType() +{ + Shapefile::ShapeType shape_type = Shapefile::NULL_SHAPE; + if ( main_data.header.shape_type == Shapefile::POINT_TYP) { + shape_type = Shapefile::POINT_TYP; + } else if (main_data.header.shape_type == Shapefile::POLYGON) { + shape_type = Shapefile::POLYGON; + } else if (main_data.header.shape_type == Shapefile::POLY_LINE) { + shape_type = Shapefile::POLY_LINE; + } + return shape_type; +} + Shapefile::ShapeType Project::GetGdaGeometries(vector& geometries) { wxLogMessage("Project::GetGdaGeometries()"); @@ -336,21 +352,33 @@ Shapefile::ShapeType Project::GetGdaGeometries(vector& geometries) Shapefile::PointContents* pc; for (int i=0; ix, pc->y))); + if (pc->shape_type == 0) { + geometries.push_back(new GdaPoint()); + } else { + geometries.push_back(new GdaPoint(wxRealPoint(pc->x, pc->y))); + } } shape_type = Shapefile::POINT_TYP; } else if (main_data.header.shape_type == Shapefile::POLYGON) { Shapefile::PolygonContents* pc; for (int i=0; ishape_type == 0) { + geometries.push_back(new GdaPolygon()); + } else { + geometries.push_back(new GdaPolygon(pc)); + } } shape_type = Shapefile::POLYGON; } else if (main_data.header.shape_type == Shapefile::POLY_LINE) { Shapefile::PolyLineContents* pc; for (int i=0; ishape_type == 0) { + geometries.push_back(new GdaPolyLine()); + } else { + geometries.push_back(new GdaPolyLine(pc)); + } } shape_type = Shapefile::POLY_LINE; } @@ -396,7 +424,9 @@ void Project::CalcEucPlaneRtreeStats() } SpatialIndAlgs::fill_pt_rtree(rtree_2d, pts); double mean_d_1nn, median_d_1nn; - SpatialIndAlgs::get_pt_rtree_stats(rtree_2d, min_1nn_dist_euc, max_1nn_dist_euc, mean_d_1nn, median_d_1nn); + SpatialIndAlgs::get_pt_rtree_stats(rtree_2d, min_1nn_dist_euc, + max_1nn_dist_euc, mean_d_1nn, + median_d_1nn); wxRealPoint pt1, pt2; max_dist_euc = PointSetAlgs::EstDiameter(x, y, false, pt1, pt2); } @@ -419,7 +449,9 @@ void Project::CalcUnitSphereRtreeStats() SpatialIndAlgs::to_3d_centroids(pts_ll, pts_3d); SpatialIndAlgs::fill_pt_rtree(rtree_3d, pts_3d); double mean_d_1nn, median_d_1nn; - SpatialIndAlgs::get_pt_rtree_stats(rtree_3d, min_1nn_dist_arc, max_1nn_dist_arc, mean_d_1nn, median_d_1nn); + SpatialIndAlgs::get_pt_rtree_stats(rtree_3d, min_1nn_dist_arc, + max_1nn_dist_arc, mean_d_1nn, + median_d_1nn); wxRealPoint pt1, pt2; double d = PointSetAlgs::EstDiameter(x, y, true, pt1, pt2); max_dist_arc = GenGeomAlgs::DegToRad(d); @@ -434,8 +466,6 @@ OGRSpatialReference* Project::GetSpatialReference() // it's a OGRTable OGRLayerProxy* exist_layer = ogr_table->GetOGRLayer(); spatial_ref = exist_layer->GetSpatialReference(); - if (spatial_ref) - spatial_ref->Clone(); } else { // DbfTable wxString ds_name = datasource->GetOGRConnectStr(); @@ -444,10 +474,10 @@ OGRSpatialReference* Project::GetSpatialReference() if (!wxFileExists(ds_name)) { return NULL; } - OGRDatasourceProxy* ogr_ds = new OGRDatasourceProxy(ds_name, ds_type, true); + OGRDatasourceProxy* ogr_ds = new OGRDatasourceProxy(ds_name, ds_type, + true); OGRLayerProxy* ogr_layer = ogr_ds->GetLayerProxy(layername); spatial_ref = ogr_layer->GetSpatialReference(); - if (spatial_ref) spatial_ref = spatial_ref->Clone(); delete ogr_ds; } return spatial_ref; @@ -496,7 +526,8 @@ void Project::SaveOGRDataSource() while ( cont ) { if (filename.Contains(tmp_prefix)) { - wxString path = dirname + wxFileName::GetPathSeparator() + filename; + wxString path = dirname; + path << wxFileName::GetPathSeparator() << filename; all_tmp_files.push_back(path); } cont = wdir.GetNext(&filename); @@ -556,13 +587,15 @@ void Project::SaveDataSourceAs(const wxString& new_ds_name, bool is_update) // Create in-memory OGR geometries vector ogr_geometries; OGRwkbGeometryType geom_type; - geom_type = ogr_adapter.MakeOGRGeometries(geometries, shape_type, ogr_geometries, selected_rows); + geom_type = ogr_adapter.MakeOGRGeometries(geometries, shape_type, + ogr_geometries, selected_rows); // NOTE: for GeoJSON, automatically transform to WGS84 if (spatial_ref && ds_type == GdaConst::ds_geo_json) { OGRSpatialReference wgs84_ref; wgs84_ref.importFromEPSG(4326); - OGRCoordinateTransformation *poCT = OGRCreateCoordinateTransformation( spatial_ref, &wgs84_ref ); + OGRCoordinateTransformation *poCT; + poCT = OGRCreateCoordinateTransformation(spatial_ref, &wgs84_ref); for (size_t i=0; i < ogr_geometries.size(); i++) { ogr_geometries[i]->transform(poCT); } @@ -576,7 +609,11 @@ void Project::SaveDataSourceAs(const wxString& new_ds_name, bool is_update) prog_n_max, NULL, wxPD_CAN_ABORT|wxPD_AUTO_HIDE|wxPD_APP_MODAL); OGRLayerProxy* new_layer; - new_layer = OGRDataAdapter::GetInstance().ExportDataSource(ds_format.ToStdString(), new_ds_name, layername.ToStdString(), geom_type, ogr_geometries, table_int, selected_rows, spatial_ref, is_update); + new_layer = ogr_adapter.ExportDataSource(ds_format, new_ds_name, + layername, geom_type, + ogr_geometries, table_int, + selected_rows, spatial_ref, + is_update, cpg_encode); if (new_layer == NULL) { wxString msg = _("Saving data source cancelled."); throw GdaException(msg.mb_str()); @@ -587,7 +624,7 @@ void Project::SaveDataSourceAs(const wxString& new_ds_name, bool is_update) cont = prog_dlg.Update(new_layer->export_progress); if ( !cont ) { new_layer->stop_exporting = true; - OGRDataAdapter::GetInstance().CancelExport(new_layer); + ogr_adapter.CancelExport(new_layer); return; } if ( new_layer->export_progress == -1 ) { @@ -597,7 +634,7 @@ void Project::SaveDataSourceAs(const wxString& new_ds_name, bool is_update) } wxMilliSleep(100); } - OGRDataAdapter::GetInstance().StopExport(); + ogr_adapter.StopExport(); for (size_t i=0; iGetOGRConnectStr(); bool wd_success = SetWorkingDir(ds_path); if (wd_success) { - wxFileName temp(ds_path); proj_file_no_ext = temp.GetName(); wxString prj_path = GetProjectFullPath(); @@ -663,7 +699,6 @@ void Project::SaveProjectConf() bool Project::IsFileDataSource() { - if (datasource) return datasource->IsFileDataSource(); return false; } @@ -671,7 +706,6 @@ bool Project::IsFileDataSource() void Project::SaveDataSourceData() { wxLogMessage("Entering Project::SaveDataSourceData"); - // for some read-only datasources, suggest Export dialog GdaConst::DataSourceType ds_type = datasource->GetType(); if (ds_type == GdaConst::ds_wfs || @@ -722,7 +756,6 @@ void Project::SaveDataSourceData() // NOTE: OGR/GDAL 2.0 is still implementing addGeomField feature. layer_proxy->AddGeometries(main_data); } - wxLogMessage("Exiting Project::SaveDataSourceData"); } @@ -732,15 +765,13 @@ void Project::UpdateProjectConf() LayerConfiguration* layer_conf = project_conf->GetLayerConfiguration(); datasource = layer_conf->GetDataSource(); VarOrderPtree* var_order = layer_conf->GetVarOrderPtree(); - if (var_order) - var_order->ReInitFromTableInt(table_int); + if (var_order) var_order->ReInitFromTableInt(table_int); CustomClassifPtree* cc = layer_conf->GetCustClassifPtree(); - if (cc) - cc->SetCatClassifList(GetCatClassifManager()); + if (cc) cc->SetCatClassifList(GetCatClassifManager()); WeightsManPtree* spatial_weights = layer_conf->GetWeightsManPtree(); WeightsNewManager* wnm = ((WeightsNewManager*) GetWManInt()); - if (spatial_weights) spatial_weights-> - SetWeightsMetaInfoList(wnm->GetPtreeEntries()); + if (spatial_weights) + spatial_weights->SetWeightsMetaInfoList(wnm->GetPtreeEntries()); DefaultVarsPtree* default_vars = layer_conf->GetDefaultVarsPtree(); { std::vector def_tm_ids(default_var_time.size()); @@ -811,9 +842,9 @@ void Project::DisplayPointDupsWarning() { wxLogMessage("Project::DisplayPointDupsWarning()"); - if (point_dups_warn_prev_displayed) return; wxString msg = _("Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Press OK to save duplicate polygon ids to Table."); - wxMessageDialog dlg(NULL, msg, _("Duplicate Thiessen Polygons Found"), wxOK | wxCANCEL | wxICON_INFORMATION); + wxMessageDialog dlg(NULL, msg, _("Duplicate Thiessen Polygons Found"), + wxOK | wxCANCEL | wxICON_INFORMATION); if (dlg.ShowModal() == wxID_OK) SaveVoronoiDupsToTable(); point_dups_warn_prev_displayed = true; } @@ -859,12 +890,14 @@ void Project::SaveVoronoiDupsToTable() std::vector data(1); std::vector dup_ids(num_records, -1); std::vector undefined(num_records, true); - for (std::list >::iterator dups_iter - = point_duplicates.begin(); - dups_iter != point_duplicates.end(); dups_iter++) { + for (std::list >::iterator dups_iter = point_duplicates.begin(); + dups_iter != point_duplicates.end(); dups_iter++) + { int head_id = *(dups_iter->begin()); - for (std::list::iterator iter=dups_iter->begin(); - iter != dups_iter->end(); iter++) { + std::list::iterator iter = dups_iter->begin(); + iter++; // ignore first one + for (; iter != dups_iter->end(); iter++) + { undefined[*iter] = false; dup_ids[*iter] = head_id+1; } @@ -876,7 +909,8 @@ void Project::SaveVoronoiDupsToTable() data[0].type = GdaConst::long64_type; wxString title = _("Save Duplicate Thiessen Polygon Ids"); - SaveToTableDlg dlg(this, NULL, data, title, wxDefaultPosition, wxSize(400,400)); + SaveToTableDlg dlg(this, NULL, data, title, wxDefaultPosition, + wxSize(400,400)); dlg.ShowModal(); } @@ -1038,7 +1072,8 @@ void Project::AddCentroids() data[1].field_default = "COORD_Y"; data[1].type = GdaConst::double_type; - SaveToTableDlg dlg(this, NULL, data, _("Add Centroids to Table"), wxDefaultPosition, wxSize(400,400)); + SaveToTableDlg dlg(this, NULL, data, _("Add Centroids to Table"), + wxDefaultPosition, wxSize(400,400)); dlg.ShowModal(); } @@ -1100,7 +1135,8 @@ const std::vector& Project::GetCentroids() centroids.resize(num_records); double x, y; for ( int row_idx=0; row_idx < num_records; row_idx++ ) { - Shapefile::PointContents* pc = (Shapefile::PointContents*)main_data.records[row_idx].contents_p; + Shapefile::PointContents* pc; + pc = (Shapefile::PointContents*)main_data.records[row_idx].contents_p; centroids[row_idx] = new GdaPoint(pc->x, pc->y); } } @@ -1400,15 +1436,16 @@ void Project::CleanupPairsHLState() bool Project::CommonProjectInit() { wxLogMessage("Project::CommonProjectInit()"); + OGRDataAdapter& ogr_adapter = OGRDataAdapter::GetInstance(); if (!InitFromOgrLayer()) { - OGRDataAdapter::GetInstance().Close(); + ogr_adapter.Close(); return false; } num_records = table_int->GetNumberRows(); if (!isTableOnly) { - OGRDataAdapter::GetInstance().GetHistory("db_host"); + ogr_adapter.GetHistory("db_host"); } // convert projection to WGS84 by default if there is projection @@ -1513,11 +1550,10 @@ bool Project::InitFromOgrLayer() wxLogMessage(ds_str); GdaConst::DataSourceType ds_type = datasource->GetType(); - - // OK. ReadLayer() is running in a seperate thread. + OGRDataAdapter& ogr_adapter = OGRDataAdapter::GetInstance(); + // ReadLayer() is running in a seperate thread. // This gives us a chance to get its progress for a Progress window. - layer_proxy = OGRDataAdapter::GetInstance().T_ReadLayer(datasource_name, ds_type, layername.ToStdString()); - + layer_proxy = ogr_adapter.T_ReadLayer(datasource_name, ds_type, layername); OGRwkbGeometryType eGType = layer_proxy->GetShapeType(); if ( eGType == wkbLineString || eGType == wkbMultiLineString ) { @@ -1551,7 +1587,7 @@ bool Project::InitFromOgrLayer() } } if (!cont) { // or if cancel clicked - OGRDataAdapter::GetInstance().T_StopReadLayer(layer_proxy); + ogr_adapter.T_StopReadLayer(layer_proxy); return false; } wxMilliSleep(100); @@ -1567,20 +1603,18 @@ bool Project::InitFromOgrLayer() } - OGRDatasourceProxy* ds_proxy = OGRDataAdapter::GetInstance().GetDatasourceProxy(datasource_name, ds_type); + OGRDatasourceProxy* ds_proxy = ogr_adapter.GetDatasourceProxy(datasource_name, + ds_type); // for some datasource, writable flag can only be obtained after ready layer datasource->UpdateWritable(ds_proxy->is_writable); // Correct variable_order information, which will be used by OGRTable - std::vector var_list; - std::map var_type_map; - layer_proxy->GetVarTypeMap(var_list, var_type_map); - + std::vector var_list = layer_proxy->GetFieldNames(); + std::vector var_types = layer_proxy->GetFieldTypes(); LayerConfiguration* layer_conf = project_conf->GetLayerConfiguration(); VarOrderPtree* variable_order = layer_conf->GetVarOrderPtree(); - variable_order->CorrectVarGroups(var_type_map, var_list, + variable_order->CorrectVarGroups(var_list, var_types, IsFieldCaseSensitive()); - table_state = new TableState; time_state = new TimeState; table_int = new OGRTable(layer_proxy, ds_type, table_state, @@ -1598,7 +1632,6 @@ bool Project::InitFromOgrLayer() delete table_int; return false; } - // read cpg file for ESRI shapefile to setup encoding if (ds_type == GdaConst::ds_shapefile) { wxFileName fn(datasource_name); @@ -1610,14 +1643,16 @@ bool Project::InitFromOgrLayer() wxTextFile cpg_file; cpg_file.Open(cpg_fn); // read the first line - wxString encode_str = cpg_file.GetFirstLine(); + cpg_encode = cpg_file.GetFirstLine(); + wxString encode_str = ConvertCpgCodePage(cpg_encode); SetupEncoding(encode_str); } } isTableOnly = layer_proxy->IsTableOnly(); if (ds_type == GdaConst::ds_dbf) isTableOnly = true; - if (!isTableOnly) layer_proxy->ReadGeometries(main_data); - + if (!isTableOnly) { + has_null_geometry = layer_proxy->ReadGeometries(main_data); + } return true; } @@ -1628,12 +1663,20 @@ BackgroundMapLayer* Project::AddMapLayer(wxString datasource_name, wxLogMessage("ds:" + datasource_name + " layer: " + layer_name); BackgroundMapLayer* map_layer = NULL; // Use global OGR adapter to manage all datasources, so they can be reused - OGRDatasourceProxy* proxy = OGRDataAdapter::GetInstance().GetDatasourceProxy(datasource_name, ds_type); - if (proxy == NULL) { + OGRDataAdapter& ogr_adapter = OGRDataAdapter::GetInstance(); + OGRDatasourceProxy* proxy = NULL; + try { + proxy = ogr_adapter.GetDatasourceProxy(datasource_name, ds_type); + } catch (GdaException& e) { + return NULL; + } + if (proxy == NULL) { return NULL; } OGRLayerProxy* p_layer = proxy->GetLayerProxy(layer_name); if (p_layer == NULL || p_layer->CheckIsTableOnly()) { + // remove this datasource_proxy from cache + ogr_adapter.RemoveDatasourceProxy(datasource_name); return NULL; } if (p_layer->ReadData()) { @@ -1828,7 +1871,6 @@ void Project::SetupEncoding(wxString encode_str) table_int->SetEncoding(wxFONTENCODING_CP949); } else if (encode_str.Upper().Contains("950")) { table_int->SetEncoding(wxFONTENCODING_CP950); - } else if (encode_str.Upper().Contains("885910") || encode_str.Upper().Contains("8859_10") ) { table_int->SetEncoding(wxFONTENCODING_ISO8859_10); @@ -1890,3 +1932,87 @@ void Project::SetupEncoding(wxString encode_str) table_int->SetEncoding(wxFONTENCODING_EUC_KR); } } + +wxString Project::ConvertCpgCodePage(const wxString& code_page) +{ + if( code_page.IsEmpty() ) + return code_page; + + if(code_page.StartsWith("LDID/")) { + int nCP = -1; // windows code page. + //http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM + const char* pszCodePage = code_page.c_str(); + switch( atoi(pszCodePage+5) ) + { + case 1: nCP = 437; break; + case 2: nCP = 850; break; + case 3: nCP = 1252; break; + case 4: nCP = 10000; break; + case 8: nCP = 865; break; + case 10: nCP = 850; break; + case 11: nCP = 437; break; + case 13: nCP = 437; break; + case 14: nCP = 850; break; + case 15: nCP = 437; break; + case 16: nCP = 850; break; + case 17: nCP = 437; break; + case 18: nCP = 850; break; + case 19: nCP = 932; break; + case 20: nCP = 850; break; + case 21: nCP = 437; break; + case 22: nCP = 850; break; + case 23: nCP = 865; break; + case 24: nCP = 437; break; + case 25: nCP = 437; break; + case 26: nCP = 850; break; + case 27: nCP = 437; break; + case 28: nCP = 863; break; + case 29: nCP = 850; break; + case 31: nCP = 852; break; + case 34: nCP = 852; break; + case 35: nCP = 852; break; + case 36: nCP = 860; break; + case 37: nCP = 850; break; + case 38: nCP = 866; break; + case 55: nCP = 850; break; + case 64: nCP = 852; break; + case 77: nCP = 936; break; + case 78: nCP = 949; break; + case 79: nCP = 950; break; + case 80: nCP = 874; break; + case 87: nCP = 88591; break; + case 88: nCP = 1252; break; + case 89: nCP = 1252; break; + case 100: nCP = 852; break; + case 101: nCP = 866; break; + case 102: nCP = 865; break; + case 103: nCP = 861; break; + case 104: nCP = 895; break; + case 105: nCP = 620; break; + case 106: nCP = 737; break; + case 107: nCP = 857; break; + case 108: nCP = 863; break; + case 120: nCP = 950; break; + case 121: nCP = 949; break; + case 122: nCP = 936; break; + case 123: nCP = 932; break; + case 124: nCP = 874; break; + case 134: nCP = 737; break; + case 135: nCP = 852; break; + case 136: nCP = 857; break; + case 150: nCP = 10007; break; + case 151: nCP = 10029; break; + case 200: nCP = 1250; break; + case 201: nCP = 1251; break; + case 202: nCP = 1254; break; + case 203: nCP = 1253; break; + case 204: nCP = 1257; break; + default: break; + } + wxString new_code; + if (nCP > -1 ) new_code << nCP; + return new_code; + } + + return code_page; +} diff --git a/Project.h b/Project.h index 51810553c..26c93f04c 100644 --- a/Project.h +++ b/Project.h @@ -85,7 +85,8 @@ class Project { IDataSource* GetDataSource() { return datasource; } wxString GetProjectTitle(); /// assumed to be layer name GdaConst::DataSourceType GetDatasourceType(); - + + bool HasNullGeometry() { return has_null_geometry;} bool IsTableOnlyProject(); bool IsDataTypeChanged(); bool IsFileDataSource(); @@ -93,6 +94,9 @@ class Project { bool IsFieldCaseSensitive(); bool IsPointTypeData() { return main_data.header.shape_type == Shapefile::POINT_TYP;} + int GetShapeType() { return main_data.header.shape_type; } + + wxString GetCpgEncode() { return cpg_encode;} /** Get the current project filename with absolute path. If project file is not set, then empty string is returned. */ wxString GetProjectFullPath(); @@ -129,7 +133,7 @@ class Project { HighlightState* GetConMapHlightState() { return con_map_hl_state; } CovSpHLStateProxy* GetPairsHLState(); TableInterface* GetTableInt() { return table_int; } - CatClassifManager* GetCatClassifManager() { return cat_classif_manager; } + CatClassifManager* GetCatClassifManager(); WeightsManInterface* GetWManInt() { return w_man_int; } WeightsManState* GetWManState() { return w_man_state; } SaveButtonManager* GetSaveButtonManager() { return save_manager; } @@ -142,6 +146,10 @@ class Project { MapLayerState* GetMapLayerState(){ return maplayer_state; } ProjectConfiguration* GetProjectConf() { return project_conf; } OGRSpatialReference* GetSpatialReference(); + OGRLayerProxy* GetOGRLayerProxy() {return layer_proxy;} + /** Save in-memory Table+Geometries to OGR DataSource */ + Shapefile::ShapeType GetGdaGeometries(vector& geometries); + Shapefile::ShapeType GetShapefileType(); void AddNeighborsToSelection(boost::uuids::uuid weights_id); bool ExportVoronoi(); @@ -250,15 +258,13 @@ class Project { std::vector mean_centers; std::vector centroids; std::vector voronoi_polygons; - - /** Save in-memory Table+Geometries to OGR DataSource */ - Shapefile::ShapeType GetGdaGeometries(vector& geometries); - + protected: bool CommonProjectInit(); bool InitFromOgrLayer(); // only for ESRI Shapefile .cpg file void SetupEncoding(wxString encode_str); + wxString ConvertCpgCodePage(const wxString& code_page); /** Save in-memory Table+Geometries to OGR DataSource */ void SaveOGRDataSource(); void UpdateProjectConf(); @@ -277,7 +283,8 @@ class Project { bool is_project_valid; // true if project Shapefile created successfully wxString open_err_msg; // error message for project open failure. - + wxString cpg_encode; + // without Shapefile. int num_records; TableInterface* table_int; @@ -293,7 +300,8 @@ class Project { TimeState* time_state; TimeChooserDlg* time_chooser; MapLayerState* maplayer_state; - + + bool has_null_geometry; bool point_duplicates_initialized; bool point_dups_warn_prev_displayed; diff --git a/ProjectConf.cpp b/ProjectConf.cpp index 74440ab38..aed2638bd 100644 --- a/ProjectConf.cpp +++ b/ProjectConf.cpp @@ -199,12 +199,16 @@ ProjectConfiguration::ProjectConfiguration(const wxString& proj_path) { project_fpath = proj_path; ptree xml_tree; + try{ #ifdef __WIN32__ std::ifstream in_file(project_fpath.wc_str()); read_xml(in_file, xml_tree); #else read_xml(std::string(GET_ENCODED_FILENAME(project_fpath)), xml_tree); #endif + }catch(const boost::property_tree::xml_parser::xml_parser_error& e){ + throw GdaException("XML parsing error."); + } ReadPtree(xml_tree, proj_path); } diff --git a/ShapeOperations/GdaCache.cpp b/ShapeOperations/GdaCache.cpp index 8b15ab4cd..7f96cab26 100644 --- a/ShapeOperations/GdaCache.cpp +++ b/ShapeOperations/GdaCache.cpp @@ -21,25 +21,22 @@ const wxString GdaCache::WS_URL_HIST = "ws_url"; wxString GdaCache::GetFullPath() { - wxString exePath = wxStandardPaths::Get().GetExecutablePath(); - wxFileName exeFile(exePath); - wxString exeDir = exeFile.GetPathWithSep(); - exeDir = exeDir + "cache.sqlite"; - return exeDir; + wxString cache_path = GenUtils::GetCachePath(); + return cache_path; } GdaCache::GdaCache() { - wxString exePath = GdaCache::GetFullPath(); + wxString cache_path = GdaCache::GetFullPath(); // if cache file not exists, create one - if (!wxFileExists(exePath)) { - OGRDatasourceProxy::CreateDataSource("SQLite", exePath); + if (!wxFileExists(cache_path)) { + OGRDatasourceProxy::CreateDataSource("SQLite", cache_path); } // connect to cache file try { - cach_ds_proxy = new OGRDatasourceProxy(exePath, GdaConst::ds_sqlite, true); + cach_ds_proxy = new OGRDatasourceProxy(cache_path, GdaConst::ds_sqlite, true); layer_names = cach_ds_proxy->GetLayerNames(); wxString sql = "SELECT * FROM history"; history_table = cach_ds_proxy->GetLayerProxyBySQL(sql); @@ -134,30 +131,6 @@ void GdaCache::CleanHistory() cach_ds_proxy->ExecuteSQL(sql); } -bool GdaCache::UpdateLayer(wxString ext_ds_name, - OGRLayerProxy* ext_layer_proxy) -{ - return false; -} - -bool GdaCache::IsLayerUpdated(wxString ext_ds_name, - OGRLayerProxy* ext_layer_proxy) -{ - return false; -} - -bool GdaCache::IsLayerCached(wxString ext_ds_name, - wxString ext_layer_name) -{ - bool caseSensitive = true; - for (size_t i=0; iGetLayerProxy(query_layer_name); } - -// This function does NOT work for now -bool GdaCache::CacheLayer(wxString ext_ds_name, - OGRLayerProxy* ext_layer_proxy) -{ - OGRLayer* poSrcLayer = ext_layer_proxy->layer; - - // get information from current layer: geomtype, layer_name - // (NOTE: we don't consider coodinator system and translation here) - OGRFeatureDefn *poSrcFDefn = poSrcLayer->GetLayerDefn(); - int eGType = poSrcFDefn->GetGeomType(); - const char* pszNewLayerName = poSrcLayer->GetName(); - int bForceToPolygon = FALSE; - int bForceToMultiPolygon = FALSE; - int bForceToMultiLineString = FALSE; - - if( wkbFlatten(eGType) == wkbPolygon ) - bForceToPolygon = TRUE; - else if( wkbFlatten(eGType) == wkbMultiPolygon ) - bForceToMultiPolygon = TRUE; - else if( wkbFlatten(eGType) == wkbMultiLineString ) - bForceToMultiLineString = TRUE; - - //Setup coordinate transformation if we need it. - OGRCoordinateTransformation *poCT = NULL; - bool bTransform = FALSE; - OGRSpatialReference *poSourceSRS = NULL; - // todo - OGRSpatialReference *poOutputSRS = new OGRSpatialReference("EPSG:4326"); - - // Cache - const char *papszLCO[255] = {"OVERWRITE=yes","FORMAT=Spatialite"}; - wxString cache_layer_name = ext_ds_name + "_" + ext_layer_proxy->name; - const char *pszName = (const char*)cache_layer_name.mb_str(wxConvUTF8); - GDALDataset *poDstDS = cach_ds_proxy->ds; - OGRLayer *poDstLayer = poDstDS->CreateLayer(pszName, - poOutputSRS, - (OGRwkbGeometryType)eGType, - (char**)papszLCO); - if (poDstLayer == NULL) { - // raise create cache failed. - return false; - } - // Process Layer style table - poDstLayer->SetStyleTable( poSrcLayer->GetStyleTable () ); - - // Add fields. here to copy all field. - int nSrcFieldCount = poSrcFDefn->GetFieldCount(); - int iField; - OGRFeatureDefn *poDstFDefn = poDstLayer->GetLayerDefn(); - - for( iField = 0; iField < nSrcFieldCount; iField++ ) - { - OGRFieldDefn* poSrcFieldDefn = poSrcFDefn->GetFieldDefn(iField); - OGRFieldDefn oFieldDefn( poSrcFieldDefn ); - - // The field may have been already created at layer creation - if (poDstLayer->CreateField( &oFieldDefn ) == OGRERR_NONE) - { - // now that we've created a field, GetLayerDefn() won't return NULL - if (poDstFDefn == NULL) - poDstFDefn = poDstLayer->GetLayerDefn(); - } - } - - // Transfer feature from Source Layer to Dest Layer - OGRFeature *poFeature; - GIntBig nFeaturesWritten = 0; - poSrcLayer->ResetReading(); - - while ((poFeature = poSrcLayer->GetNextFeature()) != NULL) { - OGRFeature *poDstFeature = OGRFeature::CreateFeature( - poDstLayer->GetLayerDefn() ); - poDstFeature->SetFrom(poFeature); - - OGRGeometry *poDstGeometry = poDstFeature->GetGeometryRef(); - if (poDstGeometry != NULL) - { - if( bForceToPolygon ) - { - poDstFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToPolygon( - poDstFeature->StealGeometry())); - } - else if( bForceToMultiPolygon ) - { - poDstFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToMultiPolygon( - poDstFeature->StealGeometry() ) ); - } - else if ( bForceToMultiLineString ) - { - poDstFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToMultiLineString( - poDstFeature->StealGeometry() ) ); - } - } - if( poDstLayer->CreateFeature( poDstFeature ) == OGRERR_NONE ) - { - nFeaturesWritten ++; - } - OGRFeature::DestroyFeature( poDstFeature ); - OGRFeature::DestroyFeature( poFeature ); - } - //OGRDataSource::DestroyDataSource(poDstDS); - GDALClose(poDstDS); - // XXX - // delete poDstLayer; - return true; -} diff --git a/ShapeOperations/GdaCache.h b/ShapeOperations/GdaCache.h index 618d32a87..fad74bf4a 100644 --- a/ShapeOperations/GdaCache.h +++ b/ShapeOperations/GdaCache.h @@ -94,26 +94,7 @@ class GdaCache { * Clean the content of "history" table */ void CleanHistory(); - - /** - * GdaCache is used to store OGR layer (in memory) to local Spatialite. - * This is done in a thread that will not impact the usage of main program. - * - * If layer has been cached before, update the layer in cache. - * Otherwise, create a new layer and store it in Geoda cache. - */ - bool CacheLayer(wxString ext_ds_name, - OGRLayerProxy* ext_layer_proxy); - - bool UpdateLayer(wxString ext_ds_name, - OGRLayerProxy* ext_layer_proxy); - - bool IsLayerUpdated(wxString ext_ds_name, - OGRLayerProxy* ext_layer_proxy); - - bool IsLayerCached(wxString ext_ds_name, - wxString ext_layer_name); - + OGRLayerProxy* GetLayerProxy(wxString ext_ds_name, wxString ext_layer_name); }; diff --git a/ShapeOperations/GeodaWeight.cpp b/ShapeOperations/GeodaWeight.cpp index 80795278f..15bce7662 100644 --- a/ShapeOperations/GeodaWeight.cpp +++ b/ShapeOperations/GeodaWeight.cpp @@ -37,38 +37,38 @@ const GeoDaWeight& GeoDaWeight::operator=(const GeoDaWeight& gw) return *this; } -wxString GeoDaWeight::GetTitle() +wxString GeoDaWeight::GetTitle() const { if (!title.IsEmpty()) return title; return wxFileName(wflnm).GetName(); } -double GeoDaWeight::GetSparsity() +double GeoDaWeight::GetSparsity() const { return sparsity; } -double GeoDaWeight::GetDensity() +double GeoDaWeight::GetDensity() const { return density; } -int GeoDaWeight::GetNumObs() +int GeoDaWeight::GetNumObs() const { return num_obs; } -int GeoDaWeight::GetMinNumNbrs() +int GeoDaWeight::GetMinNumNbrs() const { return min_nbrs; } -int GeoDaWeight::GetMaxNumNbrs() +int GeoDaWeight::GetMaxNumNbrs() const { return max_nbrs; } -double GeoDaWeight::GetMeanNumNbrs() +double GeoDaWeight::GetMeanNumNbrs() const { return mean_nbrs; } -double GeoDaWeight::GetMedianNumNbrs() +double GeoDaWeight::GetMedianNumNbrs() const { return median_nbrs; } diff --git a/ShapeOperations/GeodaWeight.h b/ShapeOperations/GeodaWeight.h index 850f41fbe..c9639d975 100644 --- a/ShapeOperations/GeodaWeight.h +++ b/ShapeOperations/GeodaWeight.h @@ -50,22 +50,23 @@ class GeoDaWeight { virtual const std::vector GetNeighbors(int obs_idx)=0; virtual void Update(const std::vector& undefs)=0; - virtual bool HasIsolates()=0; + virtual bool HasIsolates() = 0; virtual void GetNbrStats() = 0; - virtual double GetSparsity(); - virtual double GetDensity(); - virtual int GetMinNumNbrs(); - virtual int GetMaxNumNbrs(); - virtual double GetMeanNumNbrs(); - virtual double GetMedianNumNbrs(); - virtual int GetNumObs(); + virtual double GetSparsity() const; + virtual double GetDensity() const; + virtual int GetMinNumNbrs() const; + virtual int GetMaxNumNbrs() const; + virtual double GetMeanNumNbrs() const; + virtual double GetMedianNumNbrs() const; + virtual int GetNumObs() const; + virtual bool IsInternalUse() const { return is_internal_use; } // Others virtual const GeoDaWeight& operator=(const GeoDaWeight& gw); - virtual wxString GetTitle(); // returns portion of wflnm if title empty + virtual wxString GetTitle() const; // returns portion of wflnm if title empty - virtual wxString GetIDName() { return id_field;} + virtual wxString GetIDName() const { return id_field;} // Properties enum WeightType { gal_type, gwt_type }; @@ -82,6 +83,7 @@ class GeoDaWeight { int max_nbrs; double mean_nbrs; double median_nbrs; + bool is_internal_use; // if internally used weights structure, will not be shown and used by users }; #endif diff --git a/ShapeOperations/OGRDataAdapter.cpp b/ShapeOperations/OGRDataAdapter.cpp index 08e791449..82e62399c 100644 --- a/ShapeOperations/OGRDataAdapter.cpp +++ b/ShapeOperations/OGRDataAdapter.cpp @@ -18,35 +18,18 @@ */ #include -#include -#include -#include -#include -#include #include #include #include -#include - -#include #include "OGRDataAdapter.h" -#include "OGRDatasourceProxy.h" #include "OGRLayerProxy.h" -#include "GdaCache.h" -#include "../DataViewer/TableInterface.h" #include "../DataViewer/DataSource.h" #include "../DialogTools/FieldNameCorrectionDlg.h" #include "../GdaShape.h" - -#include "../GdaConst.h" -#include "../Project.h" #include "../GdaException.h" -using namespace Shapefile; -using namespace std; - OGRDataAdapter::OGRDataAdapter() { CPLSetConfigOption("FGDB_BULK_LOAD", "YES"); @@ -54,19 +37,6 @@ OGRDataAdapter::OGRDataAdapter() layer_thread = NULL; gda_cache = NULL; - enable_cache = true; -} - -OGRDataAdapter::OGRDataAdapter(bool enable_cache) -{ - OGRRegisterAll(); - - layer_thread = NULL; - gda_cache = NULL; - this->enable_cache = enable_cache; - //if (enable_cache && gda_cache==NULL) { - // gda_cache = new GdaCache(); - //} } void OGRDataAdapter::Close() @@ -85,32 +55,45 @@ void OGRDataAdapter::Close() if ( !gda_cache) delete gda_cache; } -OGRDatasourceProxy* OGRDataAdapter::GetDatasourceProxy(wxString ds_name, GdaConst::DataSourceType ds_type) +OGRDatasourceProxy* OGRDataAdapter::GetDatasourceProxy(const wxString& ds_name, + GdaConst::DataSourceType ds_type) { OGRDatasourceProxy* ds_proxy; - if (ogr_ds_pool.count(ds_name) > 0) { + if (ogr_ds_pool.find(ds_name) != ogr_ds_pool.end()) { ds_proxy = ogr_ds_pool[ds_name]; } else { ds_proxy = new OGRDatasourceProxy(ds_name, ds_type, true); + // if OGRDatasourceProxy is failed to initialized, an exception will + // be thrown and catched, so the line below will not be executed. + // There is no case that ds_proxy = NULL ogr_ds_pool[ds_name] = ds_proxy; } return ds_proxy; } -std::vector OGRDataAdapter::GetHistory(wxString param_key) +void OGRDataAdapter::RemoveDatasourceProxy(const wxString& ds_name) +{ + if (ogr_ds_pool.find(ds_name) != ogr_ds_pool.end()) { + OGRDatasourceProxy* ds_proxy = ogr_ds_pool[ds_name]; + if (ds_proxy) delete ds_proxy; + ogr_ds_pool.erase(ogr_ds_pool.find(ds_name)); + } +} + +std::vector OGRDataAdapter::GetHistory(const wxString& param_key) { if (gda_cache==NULL) gda_cache = new GdaCache(); return gda_cache->GetHistory(param_key); } -void OGRDataAdapter::AddHistory(wxString param_key, wxString param_val) +void OGRDataAdapter::AddHistory(const wxString& param_key, const wxString& param_val) { if (gda_cache==NULL) gda_cache = new GdaCache(); gda_cache->AddHistory(param_key, param_val); } -void OGRDataAdapter::AddEntry(wxString param_key, wxString param_val) +void OGRDataAdapter::AddEntry(const wxString& param_key, const wxString& param_val) { if (gda_cache==NULL) gda_cache = new GdaCache(); gda_cache->AddEntry(param_key, param_val); @@ -122,7 +105,7 @@ void OGRDataAdapter::CleanHistory() gda_cache->CleanHistory(); } -GdaConst::DataSourceType OGRDataAdapter::GetLayerNames(wxString ds_name, GdaConst::DataSourceType& ds_type, vector& layer_names) +GdaConst::DataSourceType OGRDataAdapter::GetLayerNames(const wxString& ds_name, GdaConst::DataSourceType& ds_type, vector& layer_names) { OGRDatasourceProxy* ds_proxy = GetDatasourceProxy(ds_name, ds_type); ds_type = ds_proxy->ds_type; @@ -135,7 +118,9 @@ GdaConst::DataSourceType OGRDataAdapter::GetLayerNames(wxString ds_name, GdaCons // When read, related OGRDatasourceProxy instance and OGRLayerProxy instance // will be created and stored in memory, or just get from memory if already // there. -OGRLayerProxy* OGRDataAdapter::T_ReadLayer(wxString ds_name, GdaConst::DataSourceType ds_type, wxString layer_name) +OGRLayerProxy* OGRDataAdapter::T_ReadLayer(const wxString& ds_name, + GdaConst::DataSourceType ds_type, + const wxString& layer_name) { OGRLayerProxy* layer_proxy = NULL; @@ -151,7 +136,8 @@ OGRLayerProxy* OGRDataAdapter::T_ReadLayer(wxString ds_name, GdaConst::DataSourc layer_thread = NULL; } - layer_thread = new boost::thread( boost::bind(&OGRLayerProxy::ReadData, layer_proxy) ); + layer_thread = new boost::thread( boost::bind(&OGRLayerProxy::ReadData, + layer_proxy) ); return layer_proxy; } @@ -162,22 +148,6 @@ void OGRDataAdapter::T_StopReadLayer(OGRLayerProxy* layer_proxy) delete layer_thread; layer_thread = NULL; } - -void OGRDataAdapter::SaveLayer(OGRLayerProxy* layer_proxy) -{ - if (layer_proxy != NULL) layer_proxy->Save(); -} - -void OGRDataAdapter::CacheLayer -(wxString ds_name, wxString layer_name, OGRLayerProxy* layer_proxy) -{ - //XXX: we don't cache layer in 1.5.x - // cache current layer in a thread - if (enable_cache && !gda_cache->IsLayerCached(ds_name, layer_name)) { - boost::thread cache_thread(boost::bind( - &GdaCache::CacheLayer, gda_cache, ds_name, layer_proxy)); - } -} void OGRDataAdapter::StopExport() { @@ -255,7 +225,7 @@ OGRDataAdapter::MakeOGRGeometries(vector& geometries, if ( numParts == 1 ) { OGRPolygon* polygon = (OGRPolygon*)OGRGeometryFactory::createGeometry(wkbPolygon); OGRLinearRing* ring = (OGRLinearRing*)OGRGeometryFactory::createGeometry(wkbLinearRing); - for ( int j = 0; j < numPoints; j++ ) { + for ( size_t j = 0; j < numPoints; j++ ) { if ( poly->points_o != NULL ) { // for created centroids or other geometries, the actual // points are stored in points_o wxRealPoint[]. @@ -308,15 +278,16 @@ OGRDataAdapter::MakeOGRGeometries(vector& geometries, } OGRLayerProxy* -OGRDataAdapter::ExportDataSource(wxString o_ds_format, - wxString o_ds_name, - wxString o_layer_name, +OGRDataAdapter::ExportDataSource(const wxString& o_ds_format, + const wxString& o_ds_name, + const wxString& o_layer_name, OGRwkbGeometryType geom_type, vector ogr_geometries, TableInterface* table, vector& selected_rows, OGRSpatialReference* spatial_ref, - bool is_update) + bool is_update, + wxString cpg_encode) { wxLogMessage("In OGRDataAdapter::ExportDataSource()"); GdaConst::DataSourceType ds_type = IDataSource::FindDataSourceType(o_ds_format); @@ -360,7 +331,6 @@ OGRDataAdapter::ExportDataSource(wxString o_ds_format, } // try to correct - bool case_sensitive = OGRLayerProxy::IsFieldCaseSensitive(ds_type); FieldNameCorrectionDlg fname_correct_dlg(ds_type, all_fnames); if ( fname_correct_dlg.NeedCorrection()) { if (fname_correct_dlg.ShowModal() != wxID_OK) { @@ -392,7 +362,8 @@ OGRDataAdapter::ExportDataSource(wxString o_ds_format, OGRLayerProxy* new_layer_proxy; new_layer_proxy = export_ds->CreateLayer(o_layer_name, geom_type, ogr_geometries, table, - selected_rows, spatial_ref); + selected_rows, spatial_ref, + cpg_encode); wxLogMessage("start OGRLayerProxy::AddFreatures()"); export_thread = new boost::thread(boost::bind(&OGRLayerProxy::AddFeatures, @@ -403,160 +374,3 @@ OGRDataAdapter::ExportDataSource(wxString o_ds_format, wxLogMessage("Out OGRDataAdapter::ExportDataSource()"); return new_layer_proxy; } - - -void OGRDataAdapter::Export(OGRLayerProxy* source_layer_proxy, - wxString format, - wxString dest_datasource, - wxString new_layer_name, - bool is_update) -{ - OGRLayer* poSrcLayer = source_layer_proxy->layer; - OGRwkbGeometryType eGType = poSrcLayer->GetGeomType(); - OGRFeatureDefn *poSrcFDefn = poSrcLayer->GetLayerDefn(); - int number_rows = source_layer_proxy->GetNumRecords(); - - const char* pszFormat = format.c_str(); - const char* pszDestDataSource = dest_datasource.c_str(); - const char* pszNewLayerName = new_layer_name.c_str(); - char** papszDSCO = NULL; - char* pszOutputSRSDef = NULL; - char** papszLCO = NULL; - papszLCO = CSLAddString(papszLCO, "OVERWRITE=yes"); - - // get information from current layer: geomtype, layer_name - // (don't consider coodinator system and translation here) - int bForceToPoint = FALSE; - int bForceToPolygon = FALSE; - int bForceToMultiPolygon = FALSE; - int bForceToMultiLineString = FALSE; - - if( wkbFlatten(eGType) == wkbPoint ) bForceToPoint = TRUE; - else if(wkbFlatten(eGType) == wkbPolygon) bForceToPolygon = TRUE; - else if(wkbFlatten(eGType) == wkbMultiPolygon) bForceToMultiPolygon = TRUE; - else if(wkbFlatten(eGType) == wkbMultiLineString) { - bForceToMultiLineString = TRUE; - } else { // not supported geometry type - export_progress = -1; - return; - } - - // Try opening the output datasource as an existing, writable - GDALDataset *poODS = NULL; - - if (is_update == true) { - //poODS = OGRSFDriverRegistrar::Open( dest_datasource.c_str(), true); - poODS = (GDALDataset*)GDALOpenEx( dest_datasource.c_str(), - GDAL_OF_VECTOR, NULL, NULL, NULL); - } else { - // Find the output driver. - GDALDriver *poDriver; - poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat); - if( poDriver == NULL ) { - // raise driver not supported failure - error_message << "Current OGR dirver " + format + " is not " - << "supported by GeoDa.\n" << CPLGetLastErrorMsg(); - export_progress = -1; - return; - } - - // Create the output data source. - poODS = poDriver->Create( pszDestDataSource, 0, 0,0, GDT_Unknown, NULL); - } - - if( poODS == NULL ) { - // driver failed to create - //throw GdaException("Can't create output OGR driver."); - error_message << "Can't create output OGR driver." - <<"\n\nDetails:"<< CPLGetLastErrorMsg(); - export_progress = -1; - return; - } - - // Parse the output SRS definition if possible. - OGRSpatialReference *poOutputSRS = NULL; - if( pszOutputSRSDef != NULL ) { - poOutputSRS = (OGRSpatialReference*)OSRNewSpatialReference(NULL); - if( poOutputSRS->SetFromUserInput( pszOutputSRSDef ) != OGRERR_NONE){ - // raise failed to process SRS definition: - error_message << "Can't setup SRS spatial definition."; - export_progress = -1; - return; - } - } - if( !poODS->TestCapability( ODsCCreateLayer ) ){ - // "Layer %s not found, and CreateLayer not supported by driver.", - error_message << "Current OGR driver does not support layer creation." - <<"\n" << CPLGetLastErrorMsg(); - export_progress = -1; - return; - } - - // Create Layer - OGRLayer *poDstLayer = poODS->CreateLayer( pszNewLayerName, poOutputSRS, - (OGRwkbGeometryType) eGType, - papszLCO ); - if( poDstLayer == NULL ){ - //Layer creation failed. - error_message << "Creating layer field.\n:" << CPLGetLastErrorMsg(); - export_progress = -1; - return; - } - // Process Layer style table - poDstLayer->SetStyleTable( poSrcLayer->GetStyleTable() ); - OGRFeatureDefn *poDstFDefn = poDstLayer->GetLayerDefn(); - int nSrcFieldCount = poSrcFDefn->GetFieldCount(); - // Add fields. here to copy all field. - for( int iField = 0; iField < nSrcFieldCount; iField++ ){ - OGRFieldDefn* poSrcFieldDefn = poSrcFDefn->GetFieldDefn(iField); - OGRFieldDefn oFieldDefn( poSrcFieldDefn ); - // The field may have been already created at layer creation - if (poDstLayer->CreateField( &oFieldDefn ) == OGRERR_NONE){ - // now that we've created a field, GetLayerDefn() won't return NULL - if (poDstFDefn == NULL) { - poDstFDefn = poDstLayer->GetLayerDefn(); - } - } - } - - // Create OGR geometry features - for(int row=0; row< number_rows; row++){ - if(stop_exporting) return; - export_progress++; - OGRFeature *poFeature; - poFeature = OGRFeature::CreateFeature(poDstLayer->GetLayerDefn()); - poFeature->SetFrom( source_layer_proxy->data[row] ); - if (poFeature != NULL){ - if(bForceToPoint) { - poFeature->SetGeometryDirectly( - source_layer_proxy->data[row]->StealGeometry() ); - } - else if( bForceToPolygon ) { - poFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToPolygon( - source_layer_proxy->data[row]->StealGeometry() ) ); - } - else if( bForceToMultiPolygon ) { - poFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToMultiPolygon( - source_layer_proxy->data[row]->StealGeometry() ) ); - } - else if ( bForceToMultiLineString ){ - poFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToMultiLineString( - source_layer_proxy->data[row]->StealGeometry() ) ); - } - } - if( poDstLayer->CreateFeature( poFeature ) != OGRERR_NONE ){ - // raise "Failed to create feature in shapefile.\n" - error_message << "Creating feature (" < #include #include - +#include #include "../GdaConst.h" #include "../DataViewer/TableInterface.h" -#include "../DataViewer/OGRTable.h" #include "../GdaShape.h" #include "OGRDatasourceProxy.h" @@ -42,35 +41,32 @@ using namespace std; /** * A singleton data adapter for communicating with all OGR data sources. * This class automatically maintains the connections to all OGR data sources. - * This class also provides operations to OGR data sources, which include: - * GetHistory(), AddHistory(), GetDataSourceType(), GetLayerNames(), - * ReadLayer(),StopReadLayer(),SaveLayer(),T_Export(),T_StopExport() + * This class also provides operations to OGR data sources * \code * \endcode */ class OGRDataAdapter { -public: - static OGRDataAdapter& GetInstance() { - static OGRDataAdapter instance; - return instance; - } - /** - * Call to destroy OGRDataAdapter instance. - * Free all allocated memory, disconnect OGR data sources, - * and execute a safe exit. - */ - void Close(); + // Thread realted variables + boost::thread* layer_thread; + boost::thread* cache_thread; + boost::thread* export_thread; + + // Configuration Cache + GdaCache* gda_cache; + + // Store opened data source in memory + // In multi-layer scenario, this ogr-datasource pool will automatically + // manage ogr datasources and layers. + map ogr_ds_pool; + + OGRDatasourceProxy* export_ds; private: /** * constructor */ OGRDataAdapter(); - - /** - */ - OGRDataAdapter(bool enable_cache); /** * dummy constructor. Not implemented. @@ -82,25 +78,7 @@ class OGRDataAdapter { * dummy operator =. Not implemented. * To prevent assignment */ - void operator = (OGRDataAdapter const&); - -private: - // Thread realted variables - //todo: we should have a thread pool that manage their lifecycle - boost::thread* layer_thread; - boost::thread* cache_thread; - boost::thread* export_thread; - - // Cache realted variables - bool enable_cache; - GdaCache* gda_cache; - - // Store opened data source in memory - // In multi-layer scenario, this ogr-datasource pool will automatically - // manage ogr datasources and layers. - map ogr_ds_pool; - - OGRDatasourceProxy* export_ds; + void operator = (OGRDataAdapter const&); public: // export progress indicator: -1 means error, otherwise means progress @@ -110,32 +88,47 @@ class OGRDataAdapter { ostringstream error_message; public: + static OGRDataAdapter& GetInstance() { + static OGRDataAdapter instance; + return instance; + } + + /** + * Call to destroy OGRDataAdapter instance. + * Free all allocated memory, disconnect OGR data sources, + * and execute a safe exit. + */ + void Close(); + /** - * Get OGR datasource. - * If there is one in the ogr_ds_pool, return it directly. + * Get OGR datasource. If there is one in the ogr_ds_pool, return it directly. * Otherwise, create a new OGR datasource, store it in ogr_ds_pool, * then return it. */ - OGRDatasourceProxy* GetDatasourceProxy(wxString ds_name, GdaConst::DataSourceType ds_type); - - vector GetHistory(wxString param_key); + OGRDatasourceProxy* GetDatasourceProxy(const wxString& ds_name, GdaConst::DataSourceType ds_type); + + /** + * Used by multi-layers, so users can remove a layer from cache + * + */ + void RemoveDatasourceProxy(const wxString& ds_name); - void AddHistory(wxString param_key, wxString param_val); - void AddEntry(wxString param_key, wxString param_val); + /** + * functions for cache.sqlite used by GeoDa + * + */ + vector GetHistory(const wxString& param_key); + void AddHistory(const wxString& param_key, const wxString& param_val); + void AddEntry(const wxString& param_key, const wxString& param_val); void CleanHistory(); /** * get OGR layer names from a datasource + * * @param ds_name OGR data source name * @param layer_names a reference to a string vector that stores layer names */ - GdaConst::DataSourceType GetLayerNames(wxString ds_name, GdaConst::DataSourceType& ds_type, vector& layer_names); - - /** - * cacher existing layer (memory) to local spatialite - */ - void CacheLayer(wxString ds_name, wxString layer_name, - OGRLayerProxy* layer_proxy); + GdaConst::DataSourceType GetLayerNames(const wxString& ds_name, GdaConst::DataSourceType& ds_type, vector& layer_names); /** @@ -148,37 +141,36 @@ class OGRDataAdapter { * @param ds_name OGR data source name * @param layer_name OGR table name */ - OGRLayerProxy* T_ReadLayer(wxString ds_name, GdaConst::DataSourceType ds_type, wxString layer_name); + OGRLayerProxy* T_ReadLayer(const wxString& ds_name, + GdaConst::DataSourceType ds_type, + const wxString& layer_name); void T_StopReadLayer(OGRLayerProxy* layer_proxy); - - /** - * - */ - void SaveLayer(OGRLayerProxy* layer_proxy); + /** + * A threaded version of exporting OGRLayer to a data source. + * * Create a OGR datasource that contains input geometries and table. */ - OGRLayerProxy* ExportDataSource(wxString o_ds_format, - wxString o_ds_name, - wxString o_layer_name, + OGRLayerProxy* ExportDataSource(const wxString& o_ds_format, + const wxString& o_ds_name, + const wxString& o_layer_name, OGRwkbGeometryType geom_type, vector ogr_geometries, TableInterface* table, vector& selected_rows, OGRSpatialReference* spatial_ref, - bool is_update); + bool is_update, + wxString cpg_encode = wxEmptyString); void StopExport(); - void CancelExport(OGRLayerProxy* layer); - void Export(OGRLayerProxy* source_layer_proxy, - wxString format, - wxString dest_datasource, - wxString new_layer_name, - bool is_update); + void CancelExport(OGRLayerProxy* layer); + /** + * Create OGR geometries from internal GdaShapes + */ OGRwkbGeometryType MakeOGRGeometries(vector& geometries, Shapefile::ShapeType shape_type, vector& ogr_geometries, diff --git a/ShapeOperations/OGRDatasourceProxy.cpp b/ShapeOperations/OGRDatasourceProxy.cpp index 1a2010d9a..ce6badd76 100644 --- a/ShapeOperations/OGRDatasourceProxy.cpp +++ b/ShapeOperations/OGRDatasourceProxy.cpp @@ -55,31 +55,20 @@ OGRDatasourceProxy::OGRDatasourceProxy(wxString _ds_name, GdaConst::DataSourceTy if (ds_type == GdaConst::ds_unknown) { throw GdaException(GET_ENCODED_FILENAME(msg)); } - CPLErrorReset(); - + char **papszOpenOptions = NULL; if (ds_type == GdaConst::ds_csv) { + papszOpenOptions = CSLAddString(papszOpenOptions, "AUTODETECT_TYPE=YES"); + papszOpenOptions = CSLAddString(papszOpenOptions, "EMPTY_STRING_AS_NULL=YES"); + if (GdaConst::gda_ogr_csv_header == 0) { - const char *papszOpenOptions[255] = {"AUTODETECT_TYPE=YES", - "EMPTY_STRING_AS_NULL=YES", "HEADERS=NO"}; - ds = (GDALDataset*) GDALOpenEx(pszDsPath, GDAL_OF_VECTOR|GDAL_OF_UPDATE, NULL, papszOpenOptions, NULL); + papszOpenOptions = CSLAddString(papszOpenOptions, "HEADERS=NO"); } else if (GdaConst::gda_ogr_csv_header == 1) { - const char *papszOpenOptions[255] = {"AUTODETECT_TYPE=YES", - "EMPTY_STRING_AS_NULL=YES", "HEADERS=YES"}; - ds = (GDALDataset*) GDALOpenEx(pszDsPath, GDAL_OF_VECTOR|GDAL_OF_UPDATE, NULL, papszOpenOptions, NULL); - } else { - const char *papszOpenOptions[255] = {"AUTODETECT_TYPE=YES", - "EMPTY_STRING_AS_NULL=YES"}; - ds = (GDALDataset*) GDALOpenEx(pszDsPath, GDAL_OF_VECTOR|GDAL_OF_UPDATE, NULL, papszOpenOptions, NULL); + papszOpenOptions = CSLAddString(papszOpenOptions, "HEADERS=YES"); } - } else if(ds_type == GdaConst::ds_shapefile) { - //const char* papszOpenOptions[255] = {"ENCODING=CP936"}; - //ds = (GDALDataset*) GDALOpenEx(pszDsPath, GDAL_OF_VECTOR|GDAL_OF_UPDATE, NULL, papszOpenOptions, NULL); - ds = (GDALDataset*) GDALOpenEx(pszDsPath, GDAL_OF_VECTOR|GDAL_OF_UPDATE, NULL, NULL, NULL); - } else { - ds = (GDALDataset*) GDALOpenEx(pszDsPath, GDAL_OF_VECTOR|GDAL_OF_UPDATE, NULL, NULL, NULL); } - + ds = (GDALDataset*) GDALOpenEx(pszDsPath, GDAL_OF_VECTOR|GDAL_OF_UPDATE, + NULL, papszOpenOptions, NULL); is_writable = true; if (!ds) { // try without UPDATE @@ -91,6 +80,7 @@ OGRDatasourceProxy::OGRDatasourceProxy(wxString _ds_name, GdaConst::DataSourceTy } else { msg << _("\n\nDetails: ") << error_detail; } + CSLDestroy(papszOpenOptions); throw GdaException(GET_ENCODED_FILENAME(msg)); } is_writable = false; @@ -104,8 +94,8 @@ OGRDatasourceProxy::OGRDatasourceProxy(wxString _ds_name, GdaConst::DataSourceTy ds_type = GdaConst::datasrc_str_to_type[driver_name]; } - //is_writable = ds->TestCapability( ODsCCreateLayer ); layer_count = ds->GetLayerCount(); + CSLDestroy(papszOpenOptions); } OGRDatasourceProxy::OGRDatasourceProxy(wxString format, wxString dest_datasource) @@ -162,7 +152,6 @@ OGRDatasourceProxy::~OGRDatasourceProxy() layer_pool.clear(); // clean ogr data sources - //OGRDataSource::DestroyDataSource(ds); GDALClose(ds); } @@ -326,7 +315,7 @@ void OGRDatasourceProxy::CreateDataSource(wxString format, } // Create the output data source. - GDALDataset *poODS = poDriver->Create( pszDestDataSource, 0,0,0,GDT_Unknown, NULL); + GDALDataset *poODS = poDriver->Create(pszDestDataSource,0,0,0,GDT_Unknown, NULL); if( poODS == NULL ) { // driver failed to load error_message << _("Can't create output OGR driver. \n\nDetails:"); @@ -344,7 +333,8 @@ OGRDatasourceProxy::CreateLayer(wxString layer_name, vector& geometries, TableInterface* table, vector& selected_rows, - OGRSpatialReference* spatial_ref) + OGRSpatialReference* spatial_ref, + wxString cpg_encode) { wxString error_message; if(!ds->TestCapability(ODsCCreateLayer)) { @@ -355,24 +345,29 @@ OGRDatasourceProxy::CreateLayer(wxString layer_name, throw GdaException(error_message.mb_str()); } + // PRECISION is for database e.g. MSSQL + // OVERWRITE: This may be "YES" to force an existing layer of the + // desired name to be destroyed before creating the requested layer. + // LAUNDER is for database: rename desired field name + char** papszLCO = NULL; + papszLCO = CSLAddString(papszLCO, "OVERWRITE=yes"); + papszLCO = CSLAddString(papszLCO, "LAUNDER=no"); + OGRSpatialReference *poOutputSRS = spatial_ref; - OGRLayer *poDstLayer; if (ds_type == GdaConst::ds_mysql || ds_type == GdaConst::ds_postgresql || ds_type == GdaConst::ds_ms_sql || ds_type == GdaConst::ds_sqlite ) { - // PRECISION is for database e.g. MSSQL - // OVERWRITE: This may be "YES" to force an existing layer of the - // desired name to be destroyed before creating the requested layer. - // LAUNDER is for database: rename desired field name - const char* papszLCO[50] = {"PRECISION=no", "LAUNDER=yes"}; - poDstLayer = ds->CreateLayer(layer_name.mb_str(), poOutputSRS, eGType, - (char**)papszLCO); + papszLCO = CSLAddString(papszLCO, "PRECISION=no"); } else { - // ENCODING: set to "" to avoid any recoding - const char* papszLCO[50] = {"OVERWRITE=yes", "LAUNDER=no", "ENCODING="}; - poDstLayer = ds->CreateLayer(layer_name.mb_str(), poOutputSRS, eGType, - (char**)papszLCO); + if (ds_type == GdaConst::ds_shapefile || ds_type == GdaConst::ds_dbf) { + if (cpg_encode.IsEmpty() == false) { + wxString opt = "ENCODING="; + opt << cpg_encode; + papszLCO = CSLAddString(papszLCO, opt.c_str()); + } + } } - + OGRLayer *poDstLayer = ds->CreateLayer(layer_name.mb_str(), poOutputSRS, + eGType, papszLCO); if( poDstLayer == NULL ) { error_message << _("Can't write/create layer \""); error_message << layer_name; @@ -380,9 +375,8 @@ OGRDatasourceProxy::CreateLayer(wxString layer_name, error_message << CPLGetLastErrorMsg(); throw GdaException(error_message.mb_str()); } - + OGRFeatureDefn* poFeatDef = poDstLayer->GetLayerDefn(); map >::iterator field_it; - // create fields using TableInterface:table if ( table != NULL ) { std::vector col_id_map; // using orders in wxGrid @@ -422,15 +416,25 @@ OGRDatasourceProxy::CreateLayer(wxString layer_name, if ( ogr_fprecision>0 ) { oField.SetPrecision(ogr_fprecision); } - if( poDstLayer->CreateField( &oField ) != OGRERR_NONE ) { - error_message << _("Creating a field failed.\n\nDetails:"); + if( poDstLayer->CreateField( &oField, false ) != OGRERR_NONE ) { + error_message << _("OGR failed to create field.\n\nDetails:"); error_message << CPLGetLastErrorMsg(); throw GdaException(error_message.mb_str()); } + // check if field name has been launder-ed + int n_field = poFeatDef->GetFieldCount(); + OGRFieldDefn *fieldDefn = poFeatDef->GetFieldDefn(n_field - 1); + + wxString ogr_field_nm = fieldDefn->GetNameRef(); + if (fname.Cmp(ogr_field_nm) != 0) { + table->RenameSimpleCol(id, t, ogr_field_nm); + } } } } OGRLayerProxy* layer = new OGRLayerProxy(poDstLayer, ds_type, eGType); layer_pool[layer_name] = layer; + + CSLDestroy(papszLCO); return layer; } diff --git a/ShapeOperations/OGRDatasourceProxy.h b/ShapeOperations/OGRDatasourceProxy.h index 1ef807190..62616fadd 100644 --- a/ShapeOperations/OGRDatasourceProxy.h +++ b/ShapeOperations/OGRDatasourceProxy.h @@ -116,13 +116,10 @@ class OGRDatasourceProxy { vector& geometries, TableInterface* table, vector& selected_rows, - OGRSpatialReference* spatial_ref); - - void StopCreateLayer(); + OGRSpatialReference* spatial_ref, + wxString cpg_encode = wxEmptyString); + bool DeleteLayer(wxString layer_name); - -private: - boost::thread* create_layer_thread; }; diff --git a/ShapeOperations/OGRFieldProxy.cpp b/ShapeOperations/OGRFieldProxy.cpp index 920283696..359a497ed 100644 --- a/ShapeOperations/OGRFieldProxy.cpp +++ b/ShapeOperations/OGRFieldProxy.cpp @@ -94,11 +94,6 @@ OGRFieldProxy::OGRFieldProxy(OGRFieldDefn *field_defn) OGRFieldProxy::~OGRFieldProxy() { // we don't need to free OGRFieldDefn - /* - if ( ogr_fieldDefn != NULL) { - delete ogr_fieldDefn; - ogr_fieldDefn = NULL; - }*/ } void OGRFieldProxy::SetName(const wxString &new_name, bool case_sensitive) diff --git a/ShapeOperations/OGRFieldProxy.h b/ShapeOperations/OGRFieldProxy.h index eab93fba7..018b23f6f 100644 --- a/ShapeOperations/OGRFieldProxy.h +++ b/ShapeOperations/OGRFieldProxy.h @@ -30,6 +30,19 @@ * field that read from a OGR data source, */ class OGRFieldProxy { + + OGRFieldDefn* ogr_fieldDefn; + + wxString name; + + GdaConst::FieldType type; + + int length; + + int decimals; + + bool is_field_changed; + public: /** * Constuctor function. Construct OGRFieldProxy instance from an existed @@ -70,14 +83,7 @@ class OGRFieldProxy { bool IsChanged() { return is_field_changed; } void Update(); - -private: - OGRFieldDefn* ogr_fieldDefn; - wxString name; - GdaConst::FieldType type; - int length; - int decimals; - bool is_field_changed; + }; diff --git a/ShapeOperations/OGRLayerProxy.cpp b/ShapeOperations/OGRLayerProxy.cpp index fb5f9f356..9d4e0bf50 100644 --- a/ShapeOperations/OGRLayerProxy.cpp +++ b/ShapeOperations/OGRLayerProxy.cpp @@ -67,13 +67,14 @@ layer(_layer), load_progress(0), stop_reading(false), export_progress(0) */ OGRLayerProxy::OGRLayerProxy(OGRLayer* _layer, GdaConst::DataSourceType _ds_type, - OGRwkbGeometryType eGType, + OGRwkbGeometryType _eGType, int _n_rows) : mapContour(0), layer(_layer), name(_layer->GetName()), ds_type(_ds_type), -n_rows(_n_rows), eLayerType(eGType), load_progress(0), stop_reading(false), +n_rows(_n_rows), eGType(_eGType), load_progress(0), stop_reading(false), export_progress(0) { - if (n_rows==0) { + if (n_rows == 0) { + // sometimes the OGR returns 0 features (falsely) n_rows = layer->GetFeatureCount(); } @@ -147,6 +148,18 @@ void OGRLayerProxy::SetOGRLayer(OGRLayer* new_layer) bool OGRLayerProxy::ReadFieldInfo() { + // check duplicated field names + std::set field_nms; + for (int col_idx=0; col_idx < n_cols; col_idx++) { + OGRFieldDefn *fieldDefn = featureDefn->GetFieldDefn(col_idx); + field_nms.insert(fieldDefn->GetNameRef()); + } + if (field_nms.size() < n_cols) { + wxString msg = _("GeoDa can't load dataset with duplicate field names."); + error_message << msg; + throw GdaException(msg.mb_str()); + } + for (int col_idx=0; col_idxGetFieldDefn(col_idx); OGRFieldProxy *fieldProxy = new OGRFieldProxy(fieldDefn); @@ -155,16 +168,23 @@ bool OGRLayerProxy::ReadFieldInfo() return true; } -void OGRLayerProxy::GetVarTypeMap(vector& var_list, - map& var_type_map) +vector OGRLayerProxy::GetFieldTypes() { - // Get field/variable list of current ogr_layer, store in var_list vector - // Get field/variable:(its type) pair of current ogr_layer, store in map + vector field_types; for( int i=0; i< n_cols; i++) { - wxString var = fields[i]->GetName(); - var_list.push_back( var ); - var_type_map[ var ] = fields[i]->GetType(); + field_types.push_back(fields[i]->GetType()); } + return field_types; +} + +vector OGRLayerProxy::GetFieldNames() +{ + vector field_names; + for( int i=0; i< n_cols; i++) { + wxString var = fields[i]->GetName(); + field_names.push_back(var); + } + return field_names; } wxString OGRLayerProxy::GetFieldName(int pos) @@ -409,7 +429,6 @@ void OGRLayerProxy::DeleteField(int pos) n_cols--; // remove this field from OGRFieldProxy this->fields.erase( fields.begin() + pos ); - //this->fields.erase( fields.begin() + pos ); } void OGRLayerProxy::DeleteField(const wxString& field_name) @@ -538,6 +557,18 @@ vector OGRLayerProxy::GetIntegerFieldNames() return names; } +vector OGRLayerProxy::GetNumericFieldNames() +{ + vector names; + for (int i=0; iGetType() || + GdaConst::double_type == fields[i]->GetType()) { + names.push_back(GetFieldName(i)); + } + } + return names; +} + vector OGRLayerProxy::GetIntegerAndStringFieldNames() { vector names; @@ -763,15 +794,12 @@ OGRLayerProxy::AddFeatures(vector& geometries, if (table != NULL) { if (export_size == 0) export_size = table->GetNumberRows(); export_progress = export_size / 4; - // using orders in wxGrid - std::vector col_id_map; - table->FillColIdMap(col_id_map); // fields already have been created by OGRDatasourceProxy::CreateLayer() for (size_t j=0; j< fields.size(); j++) { wxString fname = fields[j]->GetName(); GdaConst::FieldType ftype = fields[j]->GetType(); // get underneath column position (no group and time =0) - int col_pos = col_id_map[j]; + int col_pos = table->GetColIdx(fname); vector undefs; if ( ftype == GdaConst::long64_type) { vector col_data; @@ -874,7 +902,8 @@ OGRLayerProxy::AddFeatures(vector& geometries, if (stop_exporting) return; if ( (i+1)%2 ==0 ) export_progress++; if( layer->CreateFeature( data[i] ) != OGRERR_NONE ) { - wxString msg = wxString::Format(" Failed to create feature (%d/%d).\n", i + 1, n_data); + wxString msg = wxString::Format(" Failed to create feature (%d/%d).\n", + i + 1, n_data); error_message << msg << CPLGetLastErrorMsg(); export_progress = -1; return; @@ -1143,7 +1172,8 @@ bool OGRLayerProxy::AddGeometries(Shapefile::Main& p_main) } bool OGRLayerProxy::GetExtent(double& minx, double& miny, - double& maxx, double& maxy) + double& maxx, double& maxy, + OGRSpatialReference* dest_sr) { OGREnvelope pEnvelope; if (layer->GetExtent(&pEnvelope) != OGRERR_NONE) return false; @@ -1152,6 +1182,21 @@ bool OGRLayerProxy::GetExtent(double& minx, double& miny, maxx = pEnvelope.MaxX; maxy = pEnvelope.MaxY; + OGRCoordinateTransformation *poCT = NULL; + if (dest_sr && spatialRef) { + poCT = OGRCreateCoordinateTransformation(spatialRef, dest_sr); + } + if (poCT) { + OGRPoint pt1(minx, miny); + pt1.transform(poCT); + minx = pt1.getX(); + miny = pt1.getY(); + OGRPoint pt2(maxx, maxy); + pt2.transform(poCT); + maxx = pt2.getX(); + maxy = pt2.getY(); + } + if ( minx == miny && maxx == maxy && minx == 0 && maxx==0) { return false; } @@ -1172,6 +1217,8 @@ void OGRLayerProxy::GetCentroids(vector& centroids) x = poPoint.getX(); y = poPoint.getY(); centroids.push_back(new GdaPoint(x, y)); + } else { + centroids.push_back(new GdaPoint(0,0)); // no geomeetry } } } @@ -1184,21 +1231,18 @@ OGRGeometry* OGRLayerProxy::GetGeometry(int idx) return geometry; } -GdaPolygon* OGRLayerProxy::GetMapBoundary(vector& geoms) +GdaPolygon* OGRLayerProxy::DissolvePolygons(vector& geoms) { OGRMultiPolygon geocol; - for ( int i=0; i < geoms.size(); i++ ) { + for (size_t i=0; i < geoms.size(); i++ ) { OGRGeometry* geometry= geoms[i]; - OGRwkbGeometryType eType = wkbFlatten(geometry->getGeometryType()); - if (eType == wkbPolygon || eType == wkbCurvePolygon ) { + OGRwkbGeometryType etype = wkbFlatten(geometry->getGeometryType()); + if (IsWkbSinglePolygon(etype)) { geocol.addGeometry(geometry); - } else if (eType == wkbMultiPolygon) { + } else if (IsWkbMultiPolygon(etype)) { OGRMultiPolygon* mpolygon = (OGRMultiPolygon *) geometry; - int n_geom = mpolygon->getNumGeometries(); - // if there is more than one polygon, then we need to count which - // part is processing accumulatively - for (size_t i = 0; i < n_geom; i++ ){ - OGRGeometry* ogrGeom = mpolygon->getGeometryRef(i); + for (size_t j = 0; j < mpolygon->getNumGeometries(); j++ ){ + OGRGeometry* ogrGeom = mpolygon->getGeometryRef(j); geocol.addGeometry(ogrGeom); } } @@ -1214,18 +1258,18 @@ GdaPolygon* OGRLayerProxy::GetMapBoundary() { if (mapContour == NULL) { OGRMultiPolygon geocol; - for ( int row_idx=0; row_idx < n_rows; row_idx++ ) { + for (size_t row_idx=0; row_idx < n_rows; row_idx++ ) { OGRFeature* feature = data[row_idx]; OGRGeometry* geometry= feature->GetGeometryRef(); - OGRwkbGeometryType eType = wkbFlatten(geometry->getGeometryType()); - if (eType == wkbPolygon || eType == wkbCurvePolygon ) { + OGRwkbGeometryType etype = wkbFlatten(geometry->getGeometryType()); + if (IsWkbSinglePolygon(etype)) { geocol.addGeometry(geometry); - } else if (eType == wkbMultiPolygon) { + } else if (IsWkbMultiPolygon(etype)) { OGRMultiPolygon* mpolygon = (OGRMultiPolygon *) geometry; int n_geom = mpolygon->getNumGeometries(); - // if there is more than one polygon, then we need to count which - // part is processing accumulatively + // if there is more than one polygon, then we need to count + // which part is processing accumulatively for (size_t i = 0; i < n_geom; i++ ){ OGRGeometry* ogrGeom = mpolygon->getGeometryRef(i); geocol.addGeometry(ogrGeom); @@ -1241,11 +1285,67 @@ GdaPolygon* OGRLayerProxy::GetMapBoundary() return NULL; } +std::vector OGRLayerProxy::DissolveMap(const std::map >& cids) +{ + std::vector results; + + if (data.empty()) return results; + + if (IsWkbPoint(eGType) || IsWkbLine(eGType)) return results; + + std::map >::const_iterator it; + for (it = cids.begin(); it != cids.end(); ++it) { + std::vector geom_set; + for (size_t j=0; jsecond.size(); j++) { + int rid = it->second[j]; + OGRFeature* feature = data[rid]; + OGRGeometry* geometry= feature->GetGeometryRef(); + geom_set.push_back(geometry); + } + GdaPolygon* new_poly = DissolvePolygons(geom_set); + results.push_back((GdaShape*)new_poly); + } + return results; +} + +bool OGRLayerProxy::IsWkbSinglePolygon(OGRwkbGeometryType etype) +{ + if (etype == wkbPolygon || etype == wkbCurvePolygon || + etype == wkbPolygon25D || etype == wkbCurvePolygonZ ) { + return true; + } + return false; +} + +bool OGRLayerProxy::IsWkbMultiPolygon(OGRwkbGeometryType etype) +{ + if (etype == wkbMultiPolygon || etype == wkbMultiPolygon25D ) { + return true; + } + return false; +} + +bool OGRLayerProxy::IsWkbPoint(OGRwkbGeometryType etype) +{ + if (etype == wkbPoint || etype == wkbMultiPoint ) { + return true; + } + return false; +} + +bool OGRLayerProxy::IsWkbLine(OGRwkbGeometryType etype) +{ + if (etype == wkbLineString || etype == wkbMultiLineString ) { + return true; + } + return false; +} + GdaPolygon* OGRLayerProxy::OGRGeomToGdaShape(OGRGeometry* geom) { OGRwkbGeometryType eType = wkbFlatten(geom->getGeometryType()); Shapefile::PolygonContents* pc = new Shapefile::PolygonContents(); - if (eType == wkbPolygon || eType == wkbCurvePolygon ) { + if (IsWkbSinglePolygon(eType)) { pc->shape_type = Shapefile::POLYGON; OGRPolygon* p = (OGRPolygon *)geom; OGRLinearRing* pLinearRing = NULL; @@ -1268,17 +1368,15 @@ GdaPolygon* OGRLayerProxy::OGRGeomToGdaShape(OGRGeometry* geom) // read points int i=0; for (size_t j=0; j < pc->num_parts; j++) { - pLinearRing = j==0 ? - p->getExteriorRing() : p->getInteriorRing(j-1); + pLinearRing = j==0 ? p->getExteriorRing() : p->getInteriorRing(j-1); if (pLinearRing) { - for (size_t k=0; k < pLinearRing->getNumPoints(); k++) - { + for (size_t k=0; k < pLinearRing->getNumPoints(); k++) { pc->points[i].x = pLinearRing->getX(k); pc->points[i++].y = pLinearRing->getY(k); } } } - } else if (eType == wkbMultiPolygon) { + } else if (IsWkbMultiPolygon(eType)) { pc->shape_type = Shapefile::POLYGON; OGRMultiPolygon* mpolygon = (OGRMultiPolygon *) geom; int n_geom = mpolygon->getNumGeometries(); @@ -1291,7 +1389,7 @@ GdaPolygon* OGRLayerProxy::OGRGeomToGdaShape(OGRGeometry* geom) OGRGeometry* ogrGeom = mpolygon->getGeometryRef(i); OGRPolygon* p = static_cast(ogrGeom); // number of interior rings + 1 exterior ring - int ni_rings = p->getNumInteriorRings()+1; + int ni_rings = p->getNumInteriorRings() + 1; pc->num_parts += ni_rings; pc->parts.resize(pc->num_parts); @@ -1318,6 +1416,8 @@ GdaPolygon* OGRLayerProxy::OGRGeomToGdaShape(OGRGeometry* geom) bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) { + bool has_null_geometry = false; + // get geometry envelope OGREnvelope pEnvelope; if (layer->GetExtent(&pEnvelope) == OGRERR_NONE) { @@ -1345,8 +1445,7 @@ bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) OGRGeometry* geometry= feature->GetGeometryRef(); OGRwkbGeometryType eType = geometry ? wkbFlatten(geometry->getGeometryType()) : eGType; // sometime OGR can't return correct value from GetGeomType() call - if (eGType == wkbUnknown) - eGType = eType; + if (eGType == wkbUnknown) eGType = eType; if (eType == wkbPoint) { Shapefile::PointContents* pc = new Shapefile::PointContents(); @@ -1366,6 +1465,7 @@ bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) GetExtent(p_main, pc, row_idx); } } else { + has_null_geometry = true; pc->shape_type = Shapefile::NULL_SHAPE; } p_main.records[feature_counter++].contents_p = pc; @@ -1385,10 +1485,11 @@ bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) OGRPoint* p = static_cast(ogrGeom); pc->x = p->getX(); pc->y = p->getY(); - if (noExtent) - GetExtent(p_main, pc, row_idx); - + if (noExtent) GetExtent(p_main, pc, row_idx); } + } else { + has_null_geometry = true; + pc->shape_type = Shapefile::NULL_SHAPE; } p_main.records[feature_counter++].contents_p = pc; @@ -1423,13 +1524,15 @@ bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) pLinearRing = j==0 ? p->getExteriorRing() : p->getInteriorRing(j-1); if (pLinearRing) - for (size_t k=0; k < pLinearRing->getNumPoints(); k++){ + for (size_t k=0; k < pLinearRing->getNumPoints(); k++) { pc->points[i].x = pLinearRing->getX(k); pc->points[i++].y = pLinearRing->getY(k); } } - if (noExtent) - GetExtent(p_main, pc, row_idx); + if (noExtent) GetExtent(p_main, pc, row_idx); + } else { + has_null_geometry = true; + pc->shape_type = Shapefile::NULL_SHAPE; } p_main.records[feature_counter++].contents_p = pc; @@ -1441,13 +1544,12 @@ bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) p_main.header.shape_type = Shapefile::POLYGON; OGRMultiPolygon* mpolygon = (OGRMultiPolygon *) geometry; int n_geom = mpolygon->getNumGeometries(); - // if there is more than one polygon, then we need to count which - // part is processing accumulatively + // if there is more than one polygon, then we need to count + // which part is processing accumulatively int part_idx = 0, numPoints = 0; OGRLinearRing* pLinearRing = NULL; int pidx =0; - for (size_t i = 0; i < n_geom; i++ ) - { + for (size_t i = 0; i < n_geom; i++ ) { OGRGeometry* ogrGeom = mpolygon->getGeometryRef(i); OGRPolygon* p = static_cast(ogrGeom); if ( i == 0 ) { @@ -1481,9 +1583,11 @@ bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) pc->points[pidx++].y = pLinearRing->getY(k); } } - if (noExtent) - GetExtent(p_main, pc, row_idx); + if (noExtent) GetExtent(p_main, pc, row_idx); } + } else { + has_null_geometry = true; + pc->shape_type = Shapefile::NULL_SHAPE; } p_main.records[feature_counter++].contents_p = pc; @@ -1493,177 +1597,5 @@ bool OGRLayerProxy::ReadGeometries(Shapefile::Main& p_main) } } - return true; + return has_null_geometry; } - -void OGRLayerProxy::T_Export(wxString format, - wxString dest_datasource, - wxString new_layer_name, - bool is_update) -{ - export_progress = 0; - stop_exporting = FALSE; - boost::thread export_thread(boost::bind(&OGRLayerProxy::Export, this, format, dest_datasource, new_layer_name, is_update)); -} - -void OGRLayerProxy::T_StopExport() -{ - stop_exporting = TRUE; - export_progress = 0; -} - -void OGRLayerProxy::Export(wxString format, - wxString dest_datasource, - wxString new_layer_name, - bool is_update) -{ - const char* pszFormat = format.c_str(); - const char* pszDestDataSource = dest_datasource.c_str(); - const char* pszNewLayerName = new_layer_name.c_str(); - char** papszDSCO = NULL; - char* pszOutputSRSDef = NULL; - char** papszLCO = NULL; - papszLCO = CSLAddString(papszLCO, "OVERWRITE=yes"); - OGRLayer* poSrcLayer = this->layer; - OGRFeatureDefn *poSrcFDefn = poSrcLayer->GetLayerDefn(); - - // get information from current layer: geomtype, layer_name - // (don't consider coodinator system and translation here) - int bForceToPoint = FALSE; - int bForceToPolygon = FALSE; - int bForceToMultiPolygon = FALSE; - int bForceToMultiLineString = FALSE; - - if( wkbFlatten(eGType) == wkbPoint ) - bForceToPoint = TRUE; - else if(wkbFlatten(eGType) == wkbPolygon) - bForceToPolygon = TRUE; - else if(wkbFlatten(eGType) == wkbMultiPolygon) - bForceToMultiPolygon = TRUE; - else if(wkbFlatten(eGType) == wkbMultiLineString) { - bForceToMultiLineString = TRUE; - } else { // not supported geometry type - export_progress = -1; - return; - } - // Try opening the output datasource as an existing, writable - GDALDataset *poODS = NULL; - - if (is_update == true) { - poODS = (GDALDataset*) GDALOpenEx( pszDestDataSource, - GDAL_OF_VECTOR, NULL, NULL, NULL ); - } else { - // Find the output driver. - GDALDriver *poDriver; - poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat); - - if( poDriver == NULL ) { - // raise driver not supported failure - error_message << "Current OGR dirver " + format + " is not " - << "supported by GeoDa.\n" << CPLGetLastErrorMsg(); - export_progress = -1; - return; - } - - // Create the output data source. - poODS = poDriver->Create(pszDestDataSource, 0, 0, 0, GDT_Unknown, NULL); - } - - if( poODS == NULL ) { - // driver failed to create - // throw GdaException("Can't create output OGR driver."); - error_message << "Can't create output OGR driver." - <<"\n\nDetails:"<< CPLGetLastErrorMsg(); - export_progress = -1; - return; - } - - // Parse the output SRS definition if possible. - OGRSpatialReference *poOutputSRS = this->GetSpatialReference(); - if( pszOutputSRSDef != NULL ) { - poOutputSRS = (OGRSpatialReference*)OSRNewSpatialReference(NULL); - if( poOutputSRS->SetFromUserInput( pszOutputSRSDef ) != OGRERR_NONE){ - // raise failed to process SRS definition: - error_message << "Can't setup SRS spatial definition."; - export_progress = -1; - return; - } - } - if( !poODS->TestCapability( ODsCCreateLayer ) ){ - // "Layer %s not found, and CreateLayer not supported by driver.", - error_message << "Current OGR driver does not support layer creation." - <<"\n" << CPLGetLastErrorMsg(); - export_progress = -1; - return; - } - - // Create Layer - OGRLayer *poDstLayer = poODS->CreateLayer( pszNewLayerName, poOutputSRS, - (OGRwkbGeometryType) eGType, - papszLCO ); - if( poDstLayer == NULL ){ - //Layer creation failed. - error_message << "Creating layer field.\n:" << CPLGetLastErrorMsg(); - export_progress = -1; - return; - } - - // Process Layer style table - poDstLayer->SetStyleTable( poSrcLayer->GetStyleTable() ); - OGRFeatureDefn *poDstFDefn = poDstLayer->GetLayerDefn(); - int nSrcFieldCount = poSrcFDefn->GetFieldCount(); - // Add fields. here to copy all field. - for( int iField = 0; iField < nSrcFieldCount; iField++ ){ - OGRFieldDefn* poSrcFieldDefn = poSrcFDefn->GetFieldDefn(iField); - OGRFieldDefn oFieldDefn( poSrcFieldDefn ); - // The field may have been already created at layer creation - if (poDstLayer->CreateField( &oFieldDefn ) == OGRERR_NONE){ - // now that we've created a field, GetLayerDefn() won't return NULL - if (poDstFDefn == NULL) { - poDstFDefn = poDstLayer->GetLayerDefn(); - } - } - } - - // Create OGR geometry features - for(int row=0; row< this->n_rows; row++){ - if(stop_exporting) return; - export_progress++; - OGRFeature *poFeature; - poFeature = OGRFeature::CreateFeature(poDstLayer->GetLayerDefn()); - poFeature->SetFrom( this->data[row] ); - if (poFeature != NULL){ - if(bForceToPoint) { - poFeature->SetGeometryDirectly( - this->data[row]->StealGeometry() ); - } - else if( bForceToPolygon ) { - poFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToPolygon( - this->data[row]->StealGeometry() ) ); - } - else if( bForceToMultiPolygon ) { - poFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToMultiPolygon( - this->data[row]->StealGeometry() ) ); - } - else if ( bForceToMultiLineString ){ - poFeature->SetGeometryDirectly( - OGRGeometryFactory::forceToMultiLineString( - this->data[row]->StealGeometry() ) ); - } - } - if( poDstLayer->CreateFeature( poFeature ) != OGRERR_NONE ){ - // raise "Failed to create feature in shapefile.\n" - error_message << "Creating feature (" < fields; @@ -97,7 +94,8 @@ class OGRLayerProxy { bool HasError(); - bool GetExtent(double& minx, double& miny, double& maxx, double& maxy); + bool GetExtent(double& minx, double& miny, double& maxx, double& maxy, + OGRSpatialReference* dest_sr=NULL); OGRwkbGeometryType GetShapeType(); @@ -116,17 +114,6 @@ class OGRLayerProxy { * It may return failure because the layer doesn't support writeback. */ void Save(); - - /** - * Export current ogr layer to layer in other ogr data source - * @param format exported driver name (OGR style) - * @param dest_datasource exported data source name (OGR style) - */ - void Export(wxString format, wxString dest_datasource, wxString new_layer_name, bool is_update); - - void T_Export(wxString format, wxString dest_datasource, wxString new_layer_name, bool is_update); - - void T_StopExport(); /** * Add new features to an empty OGRLayer @@ -145,10 +132,13 @@ class OGRLayerProxy { void GetCentroids(vector& centroids); static GdaPolygon* OGRGeomToGdaShape(OGRGeometry* geom); - static GdaPolygon* GetMapBoundary(vector& geoms); + + static GdaPolygon* DissolvePolygons(vector& geoms); GdaPolygon* GetMapBoundary(); - + + std::vector DissolveMap(const std::map >& cids); + Shapefile::ShapeType GetGdaGeometries(vector& geoms, OGRSpatialReference* input_sr=NULL); @@ -181,9 +171,7 @@ class OGRLayerProxy { int AddField(const wxString& field_name, GdaConst::FieldType field_type, int field_length, int field_precision); - /** - * - */ + void UpdateFieldProperties(int col); /** @@ -191,82 +179,51 @@ class OGRLayerProxy { */ wxString GetFieldName(int pos); - /** - * Set field name at an input field position. - */ + // Set field name at an input field position. void SetFieldName(int pos, const wxString& new_fname); - - /** - * - */ + void DeleteField(int pos); - - /** - * - */ + void DeleteField(const wxString& field_name); - - /** - * - */ + int GetFieldPos(const wxString& field_name); - - /** - */ + GdaConst::FieldType GetFieldType(int pos); - - /** - */ + GdaConst::FieldType GetFieldType(const wxString& field_name); - /** - * - */ + int GetFieldLength(int pos); void SetFieldLength(int pos, int new_len); - /** - * - */ + int GetFieldDecimals(int pos); void SetFieldDecimals(int pos, int new_dec); - /** - * - */ + bool UpdateColumn(); bool UpdateColumn(int col_idx, vector &vals); bool UpdateColumn(int col_idx, vector &vals); bool UpdateColumn(int col_idx, vector &vals); - /** - * - */ + bool IsTableOnly(); + bool CheckIsTableOnly(); - /** - * - */ + bool UpdateOGRFeature(OGRFeature* feature); - /** - * - */ + bool AppendOGRFeature(vector& content); - /** - * - */ + bool InsertOGRFeature(); - /** - * var_list: variable/column/field list - * var_type_map: variable/column/field -- field type - */ - void GetVarTypeMap(vector& var_list, - map& var_type_map); - /** - * - */ + vector GetFieldTypes(); + + vector GetFieldNames(); + OGRFeature* GetFeatureAt(int rid); OGRGeometry* GetGeometry(int idx); vector GetIntegerFieldNames(); + + vector GetNumericFieldNames(); vector GetIntegerAndStringFieldNames(); @@ -307,6 +264,14 @@ class OGRLayerProxy { bool IsFieldExisted(const wxString& field_name); bool CallCartoDBAPI(wxString url); + + static bool IsWkbPoint(OGRwkbGeometryType etype); + + static bool IsWkbLine(OGRwkbGeometryType etype); + + static bool IsWkbSinglePolygon(OGRwkbGeometryType etype); + + static bool IsWkbMultiPolygon(OGRwkbGeometryType etype); }; #endif diff --git a/ShapeOperations/VoronoiUtils.cpp b/ShapeOperations/VoronoiUtils.cpp index cbdded729..aff0ae635 100644 --- a/ShapeOperations/VoronoiUtils.cpp +++ b/ShapeOperations/VoronoiUtils.cpp @@ -201,10 +201,10 @@ bool Gda::VoronoiUtils::MakePolygons(const std::vector& x, SampleStatistics::CalcMinMax(x, x_orig_min, x_orig_max); SampleStatistics::CalcMinMax(y, y_orig_min, y_orig_max); double orig_scale = std::max(x_orig_max-x_orig_min, - y_orig_max-y_orig_min); + y_orig_max-y_orig_min); if (orig_scale == 0) orig_scale = 1; - double big_dbl = 1073741824; // 2^30 - double p = (big_dbl/orig_scale); + double big_dbl = 1073741824; // 2^30 should be replaced with DBL_MAX + double p = big_dbl / orig_scale; std::map > dups; std::map >::iterator dups_iter; @@ -321,7 +321,7 @@ bool Gda::VoronoiUtils::MakePolygons(const std::vector& x, double x1 = (edge_x1 / p) + x_orig_min; double y1 = (edge_y1 / p) + y_orig_min; if (edge_cnt == 0) { - x_init == x0; + x_init == x0; // ??? y_init == y0; } //wxString msg; @@ -394,17 +394,13 @@ bool Gda::VoronoiUtils::MakePolygons(const std::vector& x, // make sure that the cell's internal point is also within the // convex hull. - { - double x0 = - (((double) x_int[cell.source_index()]) / p) + x_orig_min; - double y0 = - (((double) y_int[cell.source_index()]) / p) + y_orig_min; - append(h_pts, make >(x0, y0)); - } + double x0 = (((double) x_int[cell.source_index()]) / p) + x_orig_min; + double y0 = (((double) y_int[cell.source_index()]) / p) + y_orig_min; + append(h_pts, make >(x0, y0)); boost::geometry::convex_hull(h_pts, hull); - ring_type outer_ring = hull.outer(); + ring_type outer_ring = hull.outer(); int pts_cnt = 0; for (ring_type::iterator it=outer_ring.begin(); it != outer_ring.end(); it++) { diff --git a/ShapeOperations/WeightsManager.cpp b/ShapeOperations/WeightsManager.cpp index 0eac669ca..a75ff7db6 100644 --- a/ShapeOperations/WeightsManager.cpp +++ b/ShapeOperations/WeightsManager.cpp @@ -47,7 +47,6 @@ WeightsNewManager::WeightsNewManager(WeightsManState* w_man_state_, WeightsNewManager::~WeightsNewManager() { - for (EmTypeCItr it=entry_map.begin(); it != entry_map.end(); ++it) { Entry e = it->second; if (e.gal_weight) { @@ -96,7 +95,9 @@ std::list WeightsNewManager::GetPtreeEntries() const { std::list p; BOOST_FOREACH(const boost::uuids::uuid& w_uuid, uuid_order) { - p.push_back(entry_map.find(w_uuid)->second.wpte); + if (entry_map.find(w_uuid)->second.wpte.wmi.weights_type != WeightsMetaInfo::WT_internal) { + p.push_back(entry_map.find(w_uuid)->second.wpte); + } } return p; } @@ -121,10 +122,19 @@ bool WeightsNewManager::AssociateGal(boost::uuids::uuid w_uuid, GalWeight* gw) -void WeightsNewManager::GetIds(std::vector& ids) const +void WeightsNewManager::GetIds(std::vector& ids, + bool allow_internal_weights) const { ids.clear(); - BOOST_FOREACH(boost::uuids::uuid u, uuid_order) ids.push_back(u); + BOOST_FOREACH(boost::uuids::uuid u, uuid_order) { + if (allow_internal_weights == true || + (allow_internal_weights == false && + entry_map.find(u)->second.wpte.wmi.weights_type != + WeightsMetaInfo::WT_internal)) + { + ids.push_back(u); + } + } } boost::uuids::uuid WeightsNewManager::FindIdByMetaInfo(const WeightsMetaInfo& wmi) const @@ -210,7 +220,7 @@ std::list WeightsNewManager::GetIds() const } WeightsMetaInfo::SymmetryEnum - WeightsNewManager::IsSym(boost::uuids::uuid w_uuid) const +WeightsNewManager::IsSym(boost::uuids::uuid w_uuid) const { EmTypeCItr it = entry_map.find(w_uuid); if (it == entry_map.end()) return WeightsMetaInfo::SYM_unknown; @@ -218,7 +228,7 @@ WeightsMetaInfo::SymmetryEnum } WeightsMetaInfo::SymmetryEnum - WeightsNewManager::CheckSym(boost::uuids::uuid w_uuid, ProgressDlg* p_dlg) +WeightsNewManager::CheckSym(boost::uuids::uuid w_uuid, ProgressDlg* p_dlg) { if (IsSym(w_uuid) != WeightsMetaInfo::SYM_unknown) return IsSym(w_uuid); EmType::iterator it = entry_map.find(w_uuid); @@ -498,6 +508,18 @@ wxString WeightsNewManager::SuggestTitleFromFileName(const wxString& fname) cons return title; } +bool WeightsNewManager::IsInternalUse(boost::uuids::uuid w_uuid) const +{ + bool flag = false; + EmTypeCItr it = entry_map.find(w_uuid); + if (it != entry_map.end()) { + if (it->second.wpte.wmi.weights_type == WeightsMetaInfo::WT_internal) { + flag = true; + } + } + return flag; +} + wxString WeightsNewManager::GetTitle(boost::uuids::uuid w_uuid) const { EmTypeCItr it = entry_map.find(w_uuid); diff --git a/ShapeOperations/WeightsManager.h b/ShapeOperations/WeightsManager.h index 03176162f..b90d2a331 100644 --- a/ShapeOperations/WeightsManager.h +++ b/ShapeOperations/WeightsManager.h @@ -47,7 +47,8 @@ class WeightsNewManager : public WeightsManInterface bool AssociateGal(boost::uuids::uuid w_uuid, GalWeight* gw); // Implementation of WeightsManInterface - virtual void GetIds(std::vector& ids) const; + virtual void GetIds(std::vector& ids, + bool allow_internal_weights = false) const; virtual boost::uuids::uuid FindIdByMetaInfo(const WeightsMetaInfo& wmi) const; virtual boost::uuids::uuid FindIdByFilename(const wxString& file) const; virtual boost::uuids::uuid FindIdByTitle(const wxString& title) const; @@ -80,7 +81,8 @@ class WeightsNewManager : public WeightsManInterface virtual bool IsValid(boost::uuids::uuid w_uuid); virtual bool IsBinaryWeights(boost::uuids::uuid w_uuid); virtual WeightsMetaInfo::WeightTypeEnum GetWeightsType(boost::uuids::uuid w_uuid); - + virtual bool IsInternalUse(boost::uuids::uuid w_uuid) const; + private: struct Entry { Entry() : gal_weight(0), geoda_weight(0) {} diff --git a/TemplateCanvas.cpp b/TemplateCanvas.cpp index 0975d11c7..8cca7b0db 100644 --- a/TemplateCanvas.cpp +++ b/TemplateCanvas.cpp @@ -1,613 +1,630 @@ -/** - * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved - * - * This file is part of GeoDa. - * - * GeoDa is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GeoDa is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -//#include - -#include "DialogTools/SaveToTableDlg.h" -#include "Explore/CatClassifManager.h" - - -#include "GdaShape.h" -#include "ShpFile.h" -#include "GeoDa.h" -#include "Project.h" -#include "GdaConst.h" -#include "GenUtils.h" -#include "GenGeomAlgs.h" -#include "TemplateCanvas.h" -#include "TemplateFrame.h" -#include "GdaConst.h" -#include "logger.h" - - -using namespace std; -//////////////////////////////////////////////////////////////////////////////// -// -// -//////////////////////////////////////////////////////////////////////////////// -BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(boost::geometry::cs::cartesian) - -IMPLEMENT_CLASS(TemplateCanvas, wxScrolledWindow) - -BEGIN_EVENT_TABLE(TemplateCanvas, wxScrolledWindow) - EVT_SIZE(TemplateCanvas::OnSize) - EVT_IDLE(TemplateCanvas::OnIdle) - EVT_PAINT(TemplateCanvas::OnPaint) - EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground) - EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent) - EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent) - EVT_KEY_DOWN(TemplateCanvas::OnKeyEvent) - EVT_KEY_UP(TemplateCanvas::OnKeyEvent) - EVT_SCROLLWIN(TemplateCanvas::OnScrollChanged) - EVT_TIMER(-1, TemplateCanvas::OnHighlightTimerEvent) -END_EVENT_TABLE() - -TemplateCanvas::TemplateCanvas(wxWindow* parent, - TemplateFrame* template_frame_, - Project* project_s, - HLStateInt* hl_state_int_, - const wxPoint& pos, - const wxSize& size, - bool fixed_aspect_ratio_mode_s, - bool fit_to_window_mode_s, - bool enable_high_dpi_support_) -: wxScrolledWindow(parent, wxID_ANY, pos, size, - wxNO_FULL_REPAINT_ON_RESIZE | wxCLIP_CHILDREN), -mousemode(select), selectstate(start), brushtype(rectangle), is_brushing(false), -scrollbarmode(none), remember_shiftdown(false), project(project_s), -highlight_state(hl_state_int_), template_frame(template_frame_), -selectable_outline_visible(true), user_canvas_background_color(false), -selectable_outline_color(GdaConst::selectable_outline_color), -selectable_fill_color(GdaConst::selectable_fill_color), -highlight_color(GdaConst::highlight_color), -canvas_background_color(GdaConst::canvas_background_color), -selectable_shps_type(mixed), use_category_brushes(false), -draw_sel_shps_by_z_val(false), -isResize(false), -layer0_bm(0), layer1_bm(0), layer2_bm(0), faded_layer_bm(0), -layer0_valid(false), layer1_valid(false), layer2_valid(false), -total_hover_obs(0), max_hover_obs(11), hover_obs(11), -is_pan_zoom(false), prev_scroll_pos_x(0), prev_scroll_pos_y(0), +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +//#include + +#include "DialogTools/SaveToTableDlg.h" +#include "Explore/CatClassifManager.h" + + +#include "GdaShape.h" +#include "ShpFile.h" +#include "GeoDa.h" +#include "Project.h" +#include "GdaConst.h" +#include "GenUtils.h" +#include "GenGeomAlgs.h" +#include "TemplateCanvas.h" +#include "TemplateFrame.h" +#include "GdaConst.h" +#include "logger.h" + + +using namespace std; +//////////////////////////////////////////////////////////////////////////////// +// +// +//////////////////////////////////////////////////////////////////////////////// +BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(boost::geometry::cs::cartesian) + +IMPLEMENT_CLASS(TemplateCanvas, wxScrolledWindow) + +BEGIN_EVENT_TABLE(TemplateCanvas, wxScrolledWindow) + EVT_SIZE(TemplateCanvas::OnSize) + EVT_IDLE(TemplateCanvas::OnIdle) + EVT_PAINT(TemplateCanvas::OnPaint) + EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground) + EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent) + EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent) + EVT_KEY_DOWN(TemplateCanvas::OnKeyEvent) + EVT_KEY_UP(TemplateCanvas::OnKeyEvent) + EVT_SCROLLWIN(TemplateCanvas::OnScrollChanged) + EVT_TIMER(-1, TemplateCanvas::OnHighlightTimerEvent) +END_EVENT_TABLE() + +TemplateCanvas::TemplateCanvas(wxWindow* parent, + TemplateFrame* template_frame_, + Project* project_s, + HLStateInt* hl_state_int_, + const wxPoint& pos, + const wxSize& size, + bool fixed_aspect_ratio_mode_s, + bool fit_to_window_mode_s, + bool enable_high_dpi_support_) +: wxScrolledWindow(parent, wxID_ANY, pos, size, + wxNO_FULL_REPAINT_ON_RESIZE | wxCLIP_CHILDREN), +mousemode(select), selectstate(start), brushtype(rectangle), is_brushing(false), +scrollbarmode(none), remember_shiftdown(false), project(project_s), +highlight_state(hl_state_int_), template_frame(template_frame_), +selectable_outline_visible(true), user_canvas_background_color(false), +selectable_outline_color(GdaConst::selectable_outline_color), +selectable_fill_color(GdaConst::selectable_fill_color), +highlight_color(GdaConst::highlight_color), +canvas_background_color(GdaConst::canvas_background_color), +selectable_shps_type(mixed), use_category_brushes(false), +draw_sel_shps_by_z_val(false), +isResize(false), +layer0_bm(0), layer1_bm(0), layer2_bm(0), faded_layer_bm(0), +layer0_valid(false), layer1_valid(false), layer2_valid(false), +total_hover_obs(0), max_hover_obs(11), hover_obs(11), +is_pan_zoom(false), prev_scroll_pos_x(0), prev_scroll_pos_y(0), useScientificNotation(false), -is_showing_brush(false), -axis_display_precision(2), +is_showing_brush(false), +axis_display_precision(2), axis_display_fixed_point(false), +display_precision(3), display_precision_fixed_point(false), +category_disp_precision(3), category_disp_fixed_point(false), enable_high_dpi_support(enable_high_dpi_support_), scale_factor(1.0), -point_radius(GdaConst::my_point_click_radius), -MASK_R(183), MASK_G(184), MASK_B(185) -{ - highlight_timer = new wxTimer(this); +point_radius(GdaConst::my_point_click_radius), +MASK_R(183), MASK_G(184), MASK_B(185) +{ + highlight_timer = new wxTimer(this); if (enable_high_dpi_support) { scale_factor = GetContentScaleFactor(); } - - // default is one time slice - cat_data.CreateEmptyCategories(1, highlight_state->GetHighlightSize()); - - // will set the correct cursor for current mode - SetMouseMode(mousemode); - - SetBackgroundStyle(wxBG_STYLE_CUSTOM); // default style -} - -/** - The destructor. Note that all destructors in C++ should be declared - "virtual". Also note that super-class destructors are called automatically, - and it is a mistake to call them explicitly (unlike for consturctors or - other virtual methods). All of the GdaShape objects in - #selectable_shps are deleted in this destructor. - */ -TemplateCanvas::~TemplateCanvas() -{ - BOOST_FOREACH( GdaShape* shp, background_shps ) delete shp; - BOOST_FOREACH( GdaShape* shp, selectable_shps ) delete shp; - BOOST_FOREACH( GdaShape* shp, foreground_shps ) delete shp; - - if (HasCapture()) { - ReleaseMouse(); - } - deleteLayerBms(); -} - -void TemplateCanvas::OnHighlightTimerEvent(wxTimerEvent &event) -{ - highlight_state->SetEventType(HLStateInt::delta); - highlight_state->notifyObservers(this); - highlight_timer->Stop(); -} - -// We will handle drawing our background in a paint event -// handler. So, do nothing in this handler. -void TemplateCanvas::OnEraseBackground(wxEraseEvent& event) -{ -} - -void TemplateCanvas::SetScientificNotation(bool flag) -{ - useScientificNotation = flag; -} - -void TemplateCanvas::deleteLayerBms() -{ - if (layer0_bm) delete layer0_bm; layer0_bm = 0; - if (layer1_bm) delete layer1_bm; layer1_bm = 0; - if (layer2_bm) delete layer2_bm; layer2_bm = 0; - if (faded_layer_bm) delete faded_layer_bm; faded_layer_bm = 0; - - layer0_valid = false; - layer1_valid = false; - layer2_valid = false; -} - -void TemplateCanvas::resizeLayerBms(int width, int height) -{ - deleteLayerBms(); - - int vs_w, vs_h; - GetClientSize(&vs_w, &vs_h); - + + // default is one time slice + cat_data.CreateEmptyCategories(1, highlight_state->GetHighlightSize()); + + // will set the correct cursor for current mode + SetMouseMode(mousemode); + + SetBackgroundStyle(wxBG_STYLE_CUSTOM); // default style +} + +/** + The destructor. Note that all destructors in C++ should be declared + "virtual". Also note that super-class destructors are called automatically, + and it is a mistake to call them explicitly (unlike for consturctors or + other virtual methods). All of the GdaShape objects in + #selectable_shps are deleted in this destructor. + */ +TemplateCanvas::~TemplateCanvas() +{ + BOOST_FOREACH( GdaShape* shp, background_shps ) delete shp; + BOOST_FOREACH( GdaShape* shp, selectable_shps ) delete shp; + BOOST_FOREACH( GdaShape* shp, foreground_shps ) delete shp; + + if (HasCapture()) { + ReleaseMouse(); + } + deleteLayerBms(); +} + +void TemplateCanvas::OnHighlightTimerEvent(wxTimerEvent &event) +{ + highlight_state->SetEventType(HLStateInt::delta); + highlight_state->notifyObservers(this); + highlight_timer->Stop(); +} + +// We will handle drawing our background in a paint event +// handler. So, do nothing in this handler. +void TemplateCanvas::OnEraseBackground(wxEraseEvent& event) +{ +} + +void TemplateCanvas::SetScientificNotation(bool flag) +{ + useScientificNotation = flag; +} + +void TemplateCanvas::SetCategoryDisplayPrecision(int prec, bool fixed_point) +{ + category_disp_precision = prec; + category_disp_fixed_point = fixed_point; +} + +void TemplateCanvas::deleteLayerBms() +{ + if (layer0_bm) delete layer0_bm; layer0_bm = 0; + if (layer1_bm) delete layer1_bm; layer1_bm = 0; + if (layer2_bm) delete layer2_bm; layer2_bm = 0; + if (faded_layer_bm) delete faded_layer_bm; faded_layer_bm = 0; + + layer0_valid = false; + layer1_valid = false; + layer2_valid = false; +} + +void TemplateCanvas::resizeLayerBms(int width, int height) +{ + deleteLayerBms(); + + int vs_w, vs_h; + GetClientSize(&vs_w, &vs_h); + if (width > 0) vs_w = width; - if (height >0 ) vs_h = height; - - if (enable_high_dpi_support) { - layer0_bm = new wxBitmap; - layer1_bm = new wxBitmap; - layer2_bm = new wxBitmap; - layer0_bm->CreateScaled(vs_w, vs_h, 32, scale_factor); - layer1_bm->CreateScaled(vs_w, vs_h, 32, scale_factor); - layer2_bm->CreateScaled(vs_w, vs_h, 32, scale_factor); - } else { - layer0_bm = new wxBitmap(vs_w, vs_h, 32); - layer1_bm = new wxBitmap(vs_w, vs_h, 32); - layer2_bm = new wxBitmap(vs_w, vs_h, 32); - } - - layer0_valid = false; - layer1_valid = false; - layer2_valid = false; -} - -// redraw everything -void TemplateCanvas::invalidateBms() -{ - layer0_valid = false; - layer1_valid = false; - layer2_valid = false; - ResetFadedLayer(); -} - -bool TemplateCanvas::GetFixedAspectRatioMode() -{ - return last_scale_trans.fixed_aspect_ratio; -} - -void TemplateCanvas::SetFixedAspectRatioMode(bool mode) -{ - last_scale_trans.SetFixedAspectRatio(mode); - - ResizeSelectableShps(); -} - -void TemplateCanvas::SetDisplayPrecision(int n) -{ - axis_display_precision = n; - PopulateCanvas(); -} - -bool TemplateCanvas::GetFitToWindowMode() -{ - return fit_to_window_mode; -} - -void TemplateCanvas::SetFitToWindowMode(bool mode) -{ - fit_to_window_mode = mode; - scrollbarmode = none; - - if (fit_to_window_mode) { - is_pan_zoom = false; - - prev_scroll_pos_x = 0; - prev_scroll_pos_y = 0; - - ResetShapes(); - } -} - -void TemplateCanvas::OnKeyEvent(wxKeyEvent& event) -{ - if (mousemode == zoom) { - if (event.ShiftDown()) { - - SetCursor(GdaConst::zoomOutCursor); - } else { - SetCursor(GdaConst::zoomInCursor); - } - } - event.Skip(); -} - -void TemplateCanvas::OnScrollChanged(wxScrollWinEvent& event) -{ - //layer0_valid = false; - - int orient = event.GetOrientation(); - int pos_e = event.GetPosition(); // this was often returning 0 on Windows - int pos_w = GetScrollPos(orient); - - // There must be a bug in wxWidgets 3.0 for Windows because often - // pos_e == 0 when it shouldn't be. When pos_e == 0, we use the - // value from pos_w instead. However, pos_w is often the same as - // the previous value when it shouldn't be. This at least prevents - // the window from jumping around. Actually dragging the scroll - // bars by the thumb slider works. - int pos = (pos_e == 0) ? pos_w : pos_e; - - if (pos!=0 && is_pan_zoom) { - int v_offset = 0; - int h_offset = 0; - - if (orient == wxHORIZONTAL) { - h_offset = pos - prev_scroll_pos_x ; - prev_scroll_pos_x = pos; - } else if (orient == wxVERTICAL) { - v_offset = -pos + prev_scroll_pos_y ; - prev_scroll_pos_y = pos; - } - - last_scale_trans.ScrollView(h_offset, v_offset); - ResizeSelectableShps(); - } - event.Skip(); -} - -wxString TemplateCanvas::GetCanvasStateString() -{ - return ""; -} - - -void TemplateCanvas::ResizeSelectableShps(int virtual_scrn_w, - int virtual_scrn_h) -{ - int vs_w = virtual_scrn_w; - int vs_h = virtual_scrn_h; - - if (vs_w <= 0 && vs_h <=0 ) { - GetClientSize(&vs_w, &vs_h); - } - - // view: extent, margins, width, height - last_scale_trans.SetView(vs_w, vs_h); - - if (last_scale_trans.IsValid()) { - BOOST_FOREACH( GdaShape* ms, background_shps ) { - if (ms) ms->applyScaleTrans(last_scale_trans); - } - BOOST_FOREACH( GdaShape* ms, selectable_shps ) { - if (ms) ms->applyScaleTrans(last_scale_trans); - } - BOOST_FOREACH( GdaShape* ms, foreground_shps ) { - if (ms) ms->applyScaleTrans(last_scale_trans); - } - } - layer0_valid = false; - layer1_valid = false; - layer2_valid = false; - ResetFadedLayer(); -} - -void TemplateCanvas::ResetBrushing() -{ - is_showing_brush = false; - sel1.x = 0; - sel1.y = 0; - sel2.x = 0; - sel2.y = 0; -} - -void TemplateCanvas::ResetShapes() -{ - last_scale_trans.Reset(); - is_pan_zoom = false; - - ResetFadedLayer(); - - ResetBrushing(); - SetMouseMode(select); - ResizeSelectableShps(); -} - -void TemplateCanvas::ResetFadedLayer() -{ - if (faded_layer_bm) { - delete faded_layer_bm; - faded_layer_bm = NULL; - } - -} - -void TemplateCanvas::ZoomShapes(bool is_zoomin) -{ - if (sel2.x == 0 && sel2.y==0) - return; - - if (sel1.x == sel2.x) - sel2.x = sel1.x + 2; - - if (sel1.y == sel2.y) - sel2.y = sel1.y + 2; - - last_scale_trans.Zoom(is_zoomin, sel1, sel2); - - is_pan_zoom = true; - is_showing_brush = false; - - ResetBrushing(); - ResizeSelectableShps(); -} - -void TemplateCanvas::PanShapes() -{ - if (sel2.x == 0 && sel2.y==0) - return; - - last_scale_trans.PanView(sel1, sel2); - - is_pan_zoom = true; - is_showing_brush = false; - - ResetBrushing(); - ResizeSelectableShps(); -} - -void TemplateCanvas::SetMouseMode(MouseMode mode) -{ - mousemode = mode; - if (mousemode == select) { - SetCursor(*wxSTANDARD_CURSOR); - - } else if (mousemode == pan) { - SetCursor(wxCursor(wxCURSOR_HAND)); - - } else if (mousemode == zoom) { - if (remember_shiftdown) - SetCursor(GdaConst::zoomOutCursor); - else - SetCursor(GdaConst::zoomInCursor); - - } else if (mousemode == zoomout) { - SetCursor(GdaConst::zoomOutCursor); - - } else { // default - SetCursor(*wxSTANDARD_CURSOR); - } -} - -std::vector TemplateCanvas::CreateSelShpsFromProj(vector& selectable_shps, Project* project) -{ - using namespace Shapefile; - std::vector empty_shps_ids; - - if (selectable_shps.size() > 0) { - return empty_shps_ids; - } - int num_recs = project->GetNumRecords(); - selectable_shps.resize(num_recs); - - vector& records = project->main_data.records; - Header& hdr = project->main_data.header; - - if (hdr.shape_type == Shapefile::POINT_TYP) { - PointContents* pc = 0; - for (int i=0; ishape_type == 0) { - empty_shps_ids.push_back(i); - selectable_shps[i] = new GdaPoint(); - } else { - selectable_shps[i] = new GdaPoint(wxRealPoint(pc->x,pc->y)); - } - - } - } else if (hdr.shape_type == Shapefile::POLYGON) { - - PolygonContents* pc = 0; - for (int i=0; ishape_type == 0) { - empty_shps_ids.push_back(i); - selectable_shps[i] = new GdaPolygon(); - } else { - selectable_shps[i] = new GdaPolygon(pc); - } - } - - } else if (hdr.shape_type == Shapefile::POLY_LINE) { - PolyLineContents* pc = 0; - //wxPen pen(GdaConst::selectable_fill_color, 1, wxSOLID); - for (int i=0; ishape_type == 0) { - empty_shps_ids.push_back(i); - selectable_shps[i] = new GdaPolyLine(); - } else { - selectable_shps[i] = new GdaPolyLine(pc); - } - } - } - - return empty_shps_ids; -} - -wxRealPoint TemplateCanvas::MousePntToObsPnt(const wxPoint &pt) -{ - wxPoint new_pt = pt; - wxRealPoint data_pt = last_scale_trans.View2Data(new_pt); - return data_pt; -} - -void TemplateCanvas::SetSelectableOutlineVisible(bool visible) -{ - selectable_outline_visible = visible; - - layer0_valid = false; - - UpdateSelectableOutlineColors(); -} - -bool TemplateCanvas::IsSelectableOutlineVisible() -{ - return selectable_outline_visible; -} - -void TemplateCanvas::SetBackgroundColorVisible(bool visible) -{ - user_canvas_background_color = visible; - + if (height >0 ) vs_h = height; + + if (enable_high_dpi_support) { + layer0_bm = new wxBitmap; + layer1_bm = new wxBitmap; + layer2_bm = new wxBitmap; + layer0_bm->CreateScaled(vs_w, vs_h, 32, scale_factor); + layer1_bm->CreateScaled(vs_w, vs_h, 32, scale_factor); + layer2_bm->CreateScaled(vs_w, vs_h, 32, scale_factor); + } else { + layer0_bm = new wxBitmap(vs_w, vs_h, 32); + layer1_bm = new wxBitmap(vs_w, vs_h, 32); + layer2_bm = new wxBitmap(vs_w, vs_h, 32); + } + + layer0_valid = false; + layer1_valid = false; + layer2_valid = false; +} + +// redraw everything +void TemplateCanvas::invalidateBms() +{ + layer0_valid = false; + layer1_valid = false; + layer2_valid = false; + ResetFadedLayer(); +} + +bool TemplateCanvas::GetFixedAspectRatioMode() +{ + return last_scale_trans.fixed_aspect_ratio; +} + +void TemplateCanvas::SetFixedAspectRatioMode(bool mode) +{ + last_scale_trans.SetFixedAspectRatio(mode); + + ResizeSelectableShps(); +} + +void TemplateCanvas::SetAxisDisplayPrecision(int n, bool fixed_point) +{ + axis_display_precision = n; + axis_display_fixed_point = fixed_point; + PopulateCanvas(); +} + +void TemplateCanvas::SetDisplayPrecision(int prec, bool fixed_point) +{ + display_precision = prec; + display_precision_fixed_point = fixed_point; + //invalidateBms(); + PopulateCanvas(); +} + +bool TemplateCanvas::GetFitToWindowMode() +{ + return fit_to_window_mode; +} + +void TemplateCanvas::SetFitToWindowMode(bool mode) +{ + fit_to_window_mode = mode; + scrollbarmode = none; + + if (fit_to_window_mode) { + is_pan_zoom = false; + + prev_scroll_pos_x = 0; + prev_scroll_pos_y = 0; + + ResetShapes(); + } +} + +void TemplateCanvas::OnKeyEvent(wxKeyEvent& event) +{ + if (mousemode == zoom) { + if (event.ShiftDown()) { + + SetCursor(GdaConst::zoomOutCursor); + } else { + SetCursor(GdaConst::zoomInCursor); + } + } + event.Skip(); +} + +void TemplateCanvas::OnScrollChanged(wxScrollWinEvent& event) +{ + //layer0_valid = false; + + int orient = event.GetOrientation(); + int pos_e = event.GetPosition(); // this was often returning 0 on Windows + int pos_w = GetScrollPos(orient); + + // There must be a bug in wxWidgets 3.0 for Windows because often + // pos_e == 0 when it shouldn't be. When pos_e == 0, we use the + // value from pos_w instead. However, pos_w is often the same as + // the previous value when it shouldn't be. This at least prevents + // the window from jumping around. Actually dragging the scroll + // bars by the thumb slider works. + int pos = (pos_e == 0) ? pos_w : pos_e; + + if (pos!=0 && is_pan_zoom) { + int v_offset = 0; + int h_offset = 0; + + if (orient == wxHORIZONTAL) { + h_offset = pos - prev_scroll_pos_x ; + prev_scroll_pos_x = pos; + } else if (orient == wxVERTICAL) { + v_offset = -pos + prev_scroll_pos_y ; + prev_scroll_pos_y = pos; + } + + last_scale_trans.ScrollView(h_offset, v_offset); + ResizeSelectableShps(); + } + event.Skip(); +} + +wxString TemplateCanvas::GetCanvasStateString() +{ + return ""; +} + + +void TemplateCanvas::ResizeSelectableShps(int virtual_scrn_w, + int virtual_scrn_h) +{ + int vs_w = virtual_scrn_w; + int vs_h = virtual_scrn_h; + + if (vs_w <= 0 && vs_h <=0 ) { + GetClientSize(&vs_w, &vs_h); + } + + // view: extent, margins, width, height + last_scale_trans.SetView(vs_w, vs_h); + + if (last_scale_trans.IsValid()) { + BOOST_FOREACH( GdaShape* ms, background_shps ) { + if (ms) ms->applyScaleTrans(last_scale_trans); + } + BOOST_FOREACH( GdaShape* ms, selectable_shps ) { + if (ms) ms->applyScaleTrans(last_scale_trans); + } + BOOST_FOREACH( GdaShape* ms, foreground_shps ) { + if (ms) ms->applyScaleTrans(last_scale_trans); + } + } + layer0_valid = false; + layer1_valid = false; + layer2_valid = false; + ResetFadedLayer(); +} + +void TemplateCanvas::ResetBrushing() +{ + is_showing_brush = false; + sel1.x = 0; + sel1.y = 0; + sel2.x = 0; + sel2.y = 0; +} + +void TemplateCanvas::ResetShapes() +{ + last_scale_trans.Reset(); + is_pan_zoom = false; + + ResetFadedLayer(); + + ResetBrushing(); + SetMouseMode(select); + ResizeSelectableShps(); +} + +void TemplateCanvas::ResetFadedLayer() +{ + if (faded_layer_bm) { + delete faded_layer_bm; + faded_layer_bm = NULL; + } + +} + +void TemplateCanvas::ZoomShapes(bool is_zoomin) +{ + if (sel2.x == 0 && sel2.y==0) + return; + + if (sel1.x == sel2.x) + sel2.x = sel1.x + 2; + + if (sel1.y == sel2.y) + sel2.y = sel1.y + 2; + + last_scale_trans.Zoom(is_zoomin, sel1, sel2); + + is_pan_zoom = true; + is_showing_brush = false; + + ResetBrushing(); + ResizeSelectableShps(); +} + +void TemplateCanvas::PanShapes() +{ + if (sel2.x == 0 && sel2.y==0) + return; + + last_scale_trans.PanView(sel1, sel2); + + is_pan_zoom = true; + is_showing_brush = false; + + ResetBrushing(); + ResizeSelectableShps(); +} + +void TemplateCanvas::SetMouseMode(MouseMode mode) +{ + mousemode = mode; + if (mousemode == select) { + SetCursor(*wxSTANDARD_CURSOR); + + } else if (mousemode == pan) { + SetCursor(wxCursor(wxCURSOR_HAND)); + + } else if (mousemode == zoom) { + if (remember_shiftdown) + SetCursor(GdaConst::zoomOutCursor); + else + SetCursor(GdaConst::zoomInCursor); + + } else if (mousemode == zoomout) { + SetCursor(GdaConst::zoomOutCursor); + + } else { // default + SetCursor(*wxSTANDARD_CURSOR); + } +} + +std::vector TemplateCanvas::CreateSelShpsFromProj(vector& selectable_shps, Project* project) +{ + using namespace Shapefile; + std::vector empty_shps_ids; + + if (selectable_shps.size() > 0) { + return empty_shps_ids; + } + int num_recs = project->GetNumRecords(); + selectable_shps.resize(num_recs); + + vector& records = project->main_data.records; + Header& hdr = project->main_data.header; + + if (hdr.shape_type == Shapefile::POINT_TYP) { + PointContents* pc = 0; + for (int i=0; ishape_type == 0) { + empty_shps_ids.push_back(i); + selectable_shps[i] = new GdaPoint(); + } else { + selectable_shps[i] = new GdaPoint(wxRealPoint(pc->x,pc->y)); + } + + } + } else if (hdr.shape_type == Shapefile::POLYGON) { + + PolygonContents* pc = 0; + for (int i=0; ishape_type == 0) { + empty_shps_ids.push_back(i); + selectable_shps[i] = new GdaPolygon(); + } else { + selectable_shps[i] = new GdaPolygon(pc); + } + } + + } else if (hdr.shape_type == Shapefile::POLY_LINE) { + PolyLineContents* pc = 0; + //wxPen pen(GdaConst::selectable_fill_color, 1, wxSOLID); + for (int i=0; ishape_type == 0) { + empty_shps_ids.push_back(i); + selectable_shps[i] = new GdaPolyLine(); + } else { + selectable_shps[i] = new GdaPolyLine(pc); + } + } + } + + return empty_shps_ids; +} + +wxRealPoint TemplateCanvas::MousePntToObsPnt(const wxPoint &pt) +{ + wxPoint new_pt = pt; + wxRealPoint data_pt = last_scale_trans.View2Data(new_pt); + return data_pt; +} + +void TemplateCanvas::SetSelectableOutlineVisible(bool visible) +{ + selectable_outline_visible = visible; + + layer0_valid = false; + + UpdateSelectableOutlineColors(); +} + +bool TemplateCanvas::IsSelectableOutlineVisible() +{ + return selectable_outline_visible; +} + +void TemplateCanvas::SetBackgroundColorVisible(bool visible) +{ + user_canvas_background_color = visible; + + layer0_valid = false; + ReDraw(); +} + +bool TemplateCanvas::IsUserBackgroundColorVisible() +{ + return user_canvas_background_color; +} + +void TemplateCanvas::SetSelectableOutlineColor(wxColour color) +{ + selectable_outline_color = color; + + layer0_valid = false; + layer1_valid = false; + layer2_valid = false; + + UpdateSelectableOutlineColors(); +} + +void TemplateCanvas::SetSelectableFillColor(wxColour color) +{ + selectable_fill_color = color; + UpdateSelectableOutlineColors(); + layer0_valid = false; - ReDraw(); -} - -bool TemplateCanvas::IsUserBackgroundColorVisible() -{ - return user_canvas_background_color; -} - -void TemplateCanvas::SetSelectableOutlineColor(wxColour color) -{ - selectable_outline_color = color; - - layer0_valid = false; - layer1_valid = false; - layer2_valid = false; - - UpdateSelectableOutlineColors(); -} - -void TemplateCanvas::SetSelectableFillColor(wxColour color) -{ - selectable_fill_color = color; - UpdateSelectableOutlineColors(); - - layer0_valid = false; - layer1_valid = false; + layer1_valid = false; layer2_valid = false; - ReDraw(); -} - -void TemplateCanvas::SetHighlightColor(wxColour color) -{ - highlight_color = color; + ReDraw(); +} + +void TemplateCanvas::SetHighlightColor(wxColour color) +{ + highlight_color = color; layer1_valid = false; - ReDraw(); -} - -void TemplateCanvas::SetCanvasBackgroundColor(wxColour color) -{ - canvas_background_color = color; + ReDraw(); +} + +void TemplateCanvas::SetCanvasBackgroundColor(wxColour color) +{ + canvas_background_color = color; layer0_valid = false; - ReDraw(); -} - -void TemplateCanvas::UpdateSelectableOutlineColors() -{ -} - -/** - Impelmentation of HighlightStateObservable interface. This - is called by HighlightState when it notifies all observers - that its state has changed. */ -void TemplateCanvas::update(HLStateInt* o) -{ - if (layer2_bm) { - ResetBrushing(); - - if (draw_sel_shps_by_z_val) { - // force a full redraw - layer0_valid = false; - return; - } - - HLStateInt::EventType type = o->GetEventType(); - if (type == HLStateInt::transparency) { - ResetFadedLayer(); - } - // re-paint highlight layer (layer1_bm) - layer1_valid = false; - DrawLayers(); - - UpdateStatusBar(); - } -} - -void TemplateCanvas::RenderToDC(wxDC &dc, int w, int h) -{ -#ifdef __WIN32__ - GdaScaleTrans old_scale_trans = last_scale_trans; - + ReDraw(); +} + +void TemplateCanvas::UpdateSelectableOutlineColors() +{ +} + +/** + Impelmentation of HighlightStateObservable interface. This + is called by HighlightState when it notifies all observers + that its state has changed. */ +void TemplateCanvas::update(HLStateInt* o) +{ + if (layer2_bm) { + ResetBrushing(); + + if (draw_sel_shps_by_z_val) { + // force a full redraw + layer0_valid = false; + DrawLayers(); + } else { + HLStateInt::EventType type = o->GetEventType(); + if (type == HLStateInt::transparency) { + ResetFadedLayer(); + } + // re-paint highlight layer (layer1_bm) + layer1_valid = false; + DrawLayers(); + + UpdateStatusBar(); + } + } +} + +void TemplateCanvas::RenderToDC(wxDC &dc, int w, int h) +{ +#ifdef __WIN32__ + GdaScaleTrans old_scale_trans = last_scale_trans; + int screen_w = GetClientSize().GetWidth(); int screen_h = GetClientSize().GetHeight(); double scale = (double)w / screen_w; last_scale_trans.SetView(w, h); - last_scale_trans.top_margin *= scale; - last_scale_trans.left_margin *= scale; - last_scale_trans.right_margin *= scale; + last_scale_trans.top_margin *= scale; + last_scale_trans.left_margin *= scale; + last_scale_trans.right_margin *= scale; last_scale_trans.bottom_margin *= scale; - resizeLayerBms(w, h); + resizeLayerBms(w, h); ResizeSelectableShps(w, h); DrawLayers(); dc.DrawBitmap(*layer2_bm, 0, 0); - last_scale_trans.top_margin /= scale; - last_scale_trans.left_margin /= scale; - last_scale_trans.right_margin /= scale; + last_scale_trans.top_margin /= scale; + last_scale_trans.left_margin /= scale; + last_scale_trans.right_margin /= scale; last_scale_trans.bottom_margin /= scale; last_scale_trans.SetView(screen_w, screen_h); - ReDraw(); -#else + ReDraw(); +#else int screen_w = GetClientSize().GetWidth(); int screen_h = GetClientSize().GetHeight(); double old_scale = scale_factor; @@ -617,8 +634,8 @@ void TemplateCanvas::RenderToDC(wxDC &dc, int w, int h) DrawLayers(); dc.DrawBitmap(*layer2_bm, 0, 0); scale_factor = old_scale; - ReDraw(); -#endif + ReDraw(); +#endif } void TemplateCanvas::RenderToSVG(wxDC &dc, int w, int h) @@ -643,162 +660,154 @@ void TemplateCanvas::RenderToSVG(wxDC &dc, int w, int h) shp->paintSelf(dc); } ResizeSelectableShps(); -} - -void TemplateCanvas::DrawLayers() -{ - if (layer2_valid && layer1_valid && layer0_valid) - return; - if (!layer0_valid) { - DrawLayer0(); - } - if (!layer1_valid) { - DrawLayer1(); - } - if (!layer2_valid) { - DrawLayer2(); - } - //wxWakeUpIdle(); - Refresh(false); -} - - -// Draw all solid background, background decorations and unhighlighted -// shapes. -void TemplateCanvas::DrawLayer0() -{ - if (layer0_bm == NULL) - return; - - wxMemoryDC dc(*layer0_bm); +} + +void TemplateCanvas::DrawLayers() +{ + if (layer2_valid && layer1_valid && layer0_valid) + return; + if (!layer0_valid) { + DrawLayer0(); + } + if (!layer1_valid) { + DrawLayer1(); + } + if (!layer2_valid) { + DrawLayer2(); + } + //wxWakeUpIdle(); + Refresh(false); +} + + +// Draw all solid background, background decorations and unhighlighted +// shapes. +void TemplateCanvas::DrawLayer0() +{ + if (layer0_bm == NULL) + return; + + wxMemoryDC dc(*layer0_bm); dc.SetBackground(wxBrush(canvas_background_color)); - dc.Clear(); - - BOOST_FOREACH( GdaShape* shp, background_shps ) { - shp->paintSelf(dc); - } - - DrawSelectableShapes(dc); - - dc.SelectObject(wxNullBitmap); - layer0_valid = true; - layer1_valid = false; -} - - -// draw highlighted shapes. -void TemplateCanvas::DrawLayer1() -{ - if (layer1_bm == NULL) - return; - wxMemoryDC dc(*layer1_bm); + dc.Clear(); + + BOOST_FOREACH( GdaShape* shp, background_shps ) { + shp->paintSelf(dc); + } + + DrawSelectableShapes(dc); + + dc.SelectObject(wxNullBitmap); + layer0_valid = true; + layer1_valid = false; +} + + +// draw highlighted shapes. +void TemplateCanvas::DrawLayer1() +{ + if (layer1_bm == NULL) + return; + wxMemoryDC dc(*layer1_bm); dc.SetBackground(wxBrush(canvas_background_color)); - dc.Clear(); - // faded the background half transparency - if (highlight_state->GetTotalHighlighted()>0) { - if (faded_layer_bm == NULL) { - wxImage image = layer0_bm->ConvertToImage(); - if (!image.HasAlpha()) { - image.InitAlpha(); - } - unsigned char *alpha=image.GetAlpha(); - memset(alpha, GdaConst::plot_transparency_unhighlighted, - image.GetWidth()*image.GetHeight()); - - faded_layer_bm = new wxBitmap(image); - } + dc.Clear(); + // faded the background half transparency + std::vector& hl = highlight_state->GetHighlight(); + bool has_hl = false; + for (size_t i=0; iConvertToImage(); + if (!image.HasAlpha()) { + image.InitAlpha(); + } + unsigned char *alpha=image.GetAlpha(); + memset(alpha, GdaConst::plot_transparency_unhighlighted, + image.GetWidth()*image.GetHeight()); + + faded_layer_bm = new wxBitmap(image); + } if (enable_high_dpi_support) { dc.SetUserScale(1/scale_factor, 1/scale_factor); dc.DrawBitmap(*faded_layer_bm,0,0); dc.SetUserScale(1.0, 1.0); } else { dc.DrawBitmap(*faded_layer_bm,0,0); - } - } else { - dc.DrawBitmap(*layer0_bm, 0, 0); - } - - DrawHighlightedShapes(dc); - - dc.SelectObject(wxNullBitmap); - layer1_valid = true; - layer2_valid = false; -} - -void TemplateCanvas::DrawLayer2() -{ - if (layer2_bm == NULL) - return; - wxMemoryDC dc(*layer2_bm); + } + } else { + dc.DrawBitmap(*layer0_bm, 0, 0); + } + + DrawHighlightedShapes(dc); + + dc.SelectObject(wxNullBitmap); + layer1_valid = true; + layer2_valid = false; +} + +void TemplateCanvas::DrawLayer2() +{ + if (layer2_bm == NULL) + return; + wxMemoryDC dc(*layer2_bm); dc.Clear(); - dc.DrawBitmap(*layer1_bm, 0, 0); - BOOST_FOREACH( GdaShape* shp, foreground_shps ) { - shp->paintSelf(dc); - } - - dc.SelectObject(wxNullBitmap); - layer2_valid = true; -} - -void TemplateCanvas::OnPaint(wxPaintEvent& event) -{ - if (layer2_bm) { - wxSize sz = GetClientSize(); + dc.DrawBitmap(*layer1_bm, 0, 0); + BOOST_FOREACH( GdaShape* shp, foreground_shps ) { + shp->paintSelf(dc); + } + + dc.SelectObject(wxNullBitmap); + layer2_valid = true; +} + +void TemplateCanvas::OnPaint(wxPaintEvent& event) +{ + if (layer2_bm) { + wxSize sz = GetClientSize(); wxMemoryDC dc(*layer2_bm); - //dc.SetBackground(*wxTRANSPARENT_BRUSH); - //dc.SetBackground(*wxWHITE_BRUSH); - //dc.Clear(); - wxPaintDC paint_dc(this); - - paint_dc.Blit(0, 0, sz.x, sz.y, &dc, 0, 0); - - // Draw optional control objects if needed - PaintControls(paint_dc); - - helper_PaintSelectionOutline(paint_dc); - - //wxBufferedPaintDC paint_dc(this, *layer2_bm); - //PaintSelectionOutline(paint_dc); - } - event.Skip(); -} - -void TemplateCanvas::ReDraw() -{ - isResize = true; -} - -void TemplateCanvas::OnIdle(wxIdleEvent& event) -{ - if (isResize) { - isResize = false; - + paint_dc.Blit(0, 0, sz.x, sz.y, &dc, 0, 0); + // Draw optional control objects if needed + PaintControls(paint_dc); + helper_PaintSelectionOutline(paint_dc); + } + event.Skip(); +} + +void TemplateCanvas::ReDraw() +{ + isResize = true; +} + +void TemplateCanvas::OnIdle(wxIdleEvent& event) +{ + if (isResize) { + isResize = false; int cs_w=0, cs_h=0; GetClientSize(&cs_w, &cs_h); - last_scale_trans.SetView(cs_w, cs_h); - - resizeLayerBms(cs_w, cs_h); - - ResizeSelectableShps(cs_w, cs_h); - - event.RequestMore(); // render continuously, not only once on idle - } - - if (!layer2_valid || !layer1_valid || !layer0_valid) { - DrawLayers(); - event.RequestMore(); // render continuously, not only once on idle - } -} - -void TemplateCanvas::OnSize(wxSizeEvent& event) -{ - ResetBrushing(); - isResize = true; - event.Skip(); -} - + resizeLayerBms(cs_w, cs_h); + ResizeSelectableShps(cs_w, cs_h); + event.RequestMore(); // render continuously, not only once on idle + } + if (!layer2_valid || !layer1_valid || !layer0_valid) { + DrawLayers(); + event.RequestMore(); // render continuously, not only once on idle + } +} + +void TemplateCanvas::OnSize(wxSizeEvent& event) +{ + ResetBrushing(); + isResize = true; + event.Skip(); +} + void TemplateCanvas::SetPointRadius(double r) { point_radius = r; @@ -814,96 +823,100 @@ void TemplateCanvas::SetPointRadius(double r) } } } - -bool TemplateCanvas::_IsShpValid(int idx) -{ - if (selectable_shps[idx] == NULL || selectable_shps[idx]->isNull()) { - return false; - } - - if (!selectable_shps_undefs.empty() && selectable_shps_undefs[idx] == true) { - return false; - } - return true; -} - - -// draw unhighlighted selectable shapes -// using wxDC only since windows platform has poor wxGC support -void TemplateCanvas::DrawSelectableShapes(wxMemoryDC &dc) -{ - if (selectable_shps.size() == 0) - return; - - if (use_category_brushes) { - DrawSelectableShapes_dc(dc); - - } else { - for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); - } - } - } -} - -// draw highlighted selectable shapes -void TemplateCanvas::DrawHighlightedShapes(wxMemoryDC &dc) -{ - if (selectable_shps.size() == 0) - return; - - if (use_category_brushes) { - bool highlight_only = true; - DrawSelectableShapes_dc(dc, highlight_only); - - } else { - vector& hs = GetSelBitVec(); - for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); - } - } - } -} - -void TemplateCanvas::DrawSelectableShapes_dc(wxMemoryDC &_dc, bool hl_only, - bool revert) -{ - vector& hs = highlight_state->GetHighlight(); -#ifdef __WXOSX__ - wxGCDC dc(_dc); - helper_DrawSelectableShapes_dc(dc, hs, hl_only, revert); -#else - helper_DrawSelectableShapes_dc(_dc, hs, hl_only, revert); -#endif -} - -void TemplateCanvas::helper_DrawSelectableShapes_dc(wxDC &dc, vector& hs, bool hl_only, bool revert, bool crosshatch, bool is_print, const wxColour& fixed_pen_color) -{ - int cc_ts = cat_data.curr_canvas_tm_step; - int num_cats = cat_data.GetNumCategories(cc_ts); - int w; + +bool TemplateCanvas::_IsShpValid(int idx) +{ + if (selectable_shps[idx] == NULL || selectable_shps[idx]->isNull()) { + return false; + } + + if (!selectable_shps_undefs.empty() && selectable_shps_undefs[idx] == true) { + return false; + } + return true; +} + + +// draw unhighlighted selectable shapes +// using wxDC only since windows platform has poor wxGC support +void TemplateCanvas::DrawSelectableShapes(wxMemoryDC &dc) +{ + if (selectable_shps.size() == 0) + return; + + if (use_category_brushes) { + DrawSelectableShapes_dc(dc); + + } else { + for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); + } + } + } +} + +// draw highlighted selectable shapes +void TemplateCanvas::DrawHighlightedShapes(wxMemoryDC &dc) +{ + if (selectable_shps.size() == 0) + return; + + if (use_category_brushes) { + bool highlight_only = true; + DrawSelectableShapes_dc(dc, highlight_only); + + } else { + vector& hs = GetSelBitVec(); + for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); + } + } + } +} + +void TemplateCanvas::DrawSelectableShapes_dc(wxMemoryDC &_dc, bool hl_only, + bool revert) +{ + vector& hs = highlight_state->GetHighlight(); +#ifdef __WXOSX__ + wxGCDC dc(_dc); + helper_DrawSelectableShapes_dc(dc, hs, hl_only, revert); +#else + helper_DrawSelectableShapes_dc(_dc, hs, hl_only, revert); +#endif +} + +void TemplateCanvas::helper_DrawSelectableShapes_dc(wxDC &dc, vector& hs, + bool hl_only, bool revert, + bool crosshatch, + bool is_print, + const wxColour& fixed_pen_color) +{ + int cc_ts = cat_data.curr_canvas_tm_step; + int num_cats = cat_data.GetNumCategories(cc_ts); + int w; int h; - dc.GetSize(&w, &h); - - if (selectable_shps_type == points) { - int bnd = w*h; - vector dirty(bnd, false); - - dc.SetBrush(*wxTRANSPARENT_BRUSH); - wxDouble r = point_radius; - if (w < 150 || h < 150) { - r *= 0.66; - } - if (selectable_shps.size() > 100 && (w < 80 || h < 80)) { - r = 0.2; - } - GdaPoint* p; - for (int cat=0; cat dirty(bnd, false); + + dc.SetBrush(*wxTRANSPARENT_BRUSH); + wxDouble r = point_radius; + if (w < 150 || h < 150) { + r *= 0.66; + } + if (selectable_shps.size() > 100 && (w < 80 || h < 80)) { + r = 0.2; + } + GdaPoint* p; + for (int cat=0; cat& hs, if (fixed_pen_color != *wxWHITE) { dc.SetPen(wxPen(fixed_pen_color)); } - dc.SetBrush(cat_data.GetCategoryBrush(cc_ts, cat)); + dc.SetBrush(cat_data.GetCategoryBrush(cc_ts, cat)); } - vector& ids = cat_data.GetIdsRef(cc_ts, cat); - for (int i=0, iend=ids.size(); iisNull()) { - continue; - } - int bnd_idx = p->center.x + p->center.y*w; - if (is_print) { - dc.DrawCircle(p->center.x, p->center.y, r); - } else if (bnd_idx >= 0 && bnd_idx < bnd && !dirty[bnd_idx]) { - dc.DrawCircle(p->center.x, p->center.y, r); - dirty[bnd_idx] = true; - } - } - } - - } else if (selectable_shps_type == polygons) { - - GdaPolygon* p; - for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); + for (int i=0, iend=ids.size(); iisNull()) { + continue; + } + int bnd_idx = p->center.x + p->center.y*w; + if (is_print) { + dc.DrawCircle(p->center.x, p->center.y, r); + } else if (bnd_idx >= 0 && bnd_idx < bnd && !dirty[bnd_idx]) { + dc.DrawCircle(p->center.x, p->center.y, r); + dirty[bnd_idx] = true; + } + } + } + } else if (selectable_shps_type == polygons) { + GdaPolygon* p; + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); - - for (int i=0, iend=ids.size(); i& ids = cat_data.GetIdsRef(cc_ts, cat); + + for (int i=0, iend=ids.size(); iisNull()) - continue; - if (p->all_points_same) { - dc.DrawPoint(p->center.x, p->center.y); - } else { - if (p->n_count > 1) { - dc.DrawPolyPolygon(p->n_count, p->count, p->points); - } else { - dc.DrawPolygon(p->n, p->points); - } - } - } - } - - } else if (selectable_shps_type == circles) { - // Only Bubble Chart uses circles currently, but Bubble Chart uses - // DrawSelectableShapesByZVal. This will be useful for Cartogram map - GdaCircle* c; - for (int cat=0; catall_points_same) { + dc.DrawPoint(p->center.x, p->center.y); + } else { + if (p->n_count > 1) { + dc.DrawPolyPolygon(p->n_count, p->count, p->points); + } else { + dc.DrawPolygon(p->n, p->points); + } + } + } + } + + } else if (selectable_shps_type == circles) { + // Only Bubble Chart uses circles currently, but Bubble Chart uses + // DrawSelectableShapesByZVal. This will be useful for Cartogram map + GdaCircle* c; + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); - for (int i=0, iend=ids.size(); i& ids = cat_data.GetIdsRef(cc_ts, cat); + for (int i=0, iend=ids.size(); iisNull()) - continue; - dc.DrawCircle(c->center.x, c->center.y, c->radius); - } - } - - } else if (selectable_shps_type == polylines) { - dc.SetBrush(*wxTRANSPARENT_BRUSH); - // only PCP uses PolyLines currently. So, we assume that there - // is only one group of line segments connected together. - // If we support Shapefile polyline map objects, then this will - // have to change. - GdaPolyLine* s = 0; - for (int cat=0; catcenter.x, c->center.y, c->radius); + } + } + + } else if (selectable_shps_type == polylines) { + dc.SetBrush(*wxTRANSPARENT_BRUSH); + // only PCP uses PolyLines currently. So, we assume that there + // is only one group of line segments connected together. + // If we support Shapefile polyline map objects, then this will + // have to change. + GdaPolyLine* s = 0; + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); - for (int i=0, iend=ids.size(); iisNull()) continue; - for (int v=0; vn-1; v++) { - dc.DrawLine(s->points[v].x, s->points[v].y, - s->points[v+1].x, s->points[v+1].y); - } - } - } - } -} - -void TemplateCanvas::DrawPoints(wxGCDC& dc, CatClassifData& cat_data, vector& hs, double radius, int alpha, wxColour fixed_pen_color, bool cross_hatch) + } + vector& ids = cat_data.GetIdsRef(cc_ts, cat); + for (int i=0, iend=ids.size(); iisNull()) continue; + for (int v=0; vn-1; v++) { + dc.DrawLine(s->points[v].x, s->points[v].y, + s->points[v+1].x, s->points[v+1].y); + } + } + } + } +} + +void TemplateCanvas::DrawPoints(wxGCDC& dc, CatClassifData& cat_data, + vector& hs, double radius, int alpha, + wxColour fixed_pen_color, bool cross_hatch) { //int alpha = GdaConst::plot_transparency_unhighlighted;; int cc_ts = cat_data.curr_canvas_tm_step; @@ -1065,11 +1078,13 @@ void TemplateCanvas::DrawPoints(wxGCDC& dc, CatClassifData& cat_data, vector& ids = cat_data.GetIdsRef(cc_ts, cat); @@ -1090,7 +1105,9 @@ void TemplateCanvas::DrawPoints(wxGCDC& dc, CatClassifData& cat_data, vector& hs,int alpha, wxColour fixed_pen_color, bool cross_hatch) +void TemplateCanvas::DrawPolygons(wxGCDC& dc, CatClassifData& cat_data, + vector& hs, int alpha, + wxColour fixed_pen_color, bool cross_hatch) { //int alpha = GdaConst::plot_transparency_unhighlighted;; int cc_ts = cat_data.curr_canvas_tm_step; @@ -1185,7 +1202,9 @@ void TemplateCanvas::DrawCircles(wxGCDC& dc, CatClassifData& cat_data, vector& hs,int alpha, wxColour fixed_pen_color, bool cross_hatch) +void TemplateCanvas::DrawLines(wxGCDC& dc, CatClassifData& cat_data, + vector& hs, int alpha, + wxColour fixed_pen_color, bool cross_hatch) { //int alpha = GdaConst::plot_transparency_unhighlighted;; int cc_ts = cat_data.curr_canvas_tm_step; @@ -1206,7 +1225,8 @@ void TemplateCanvas::DrawLines(wxGCDC& dc, CatClassifData& cat_data, vector& ids = cat_data.GetIdsRef(cc_ts, cat); @@ -1223,1315 +1243,1281 @@ void TemplateCanvas::DrawLines(wxGCDC& dc, CatClassifData& cat_data, vector& hs, - bool hl_only, - bool revert, - bool crosshatch, - int alpha) -{ - //vector& hs = GetSelBitVec(); - - gc.SetAntialiasMode(wxANTIALIAS_NONE); - gc.SetInterpolationQuality( wxINTERPOLATION_NONE ); - - int cc_ts = cat_data.curr_canvas_tm_step; - int num_cats=cat_data.GetNumCategories(cc_ts); - int w = layer0_bm->GetWidth(); - int h = layer0_bm->GetHeight(); - - if (selectable_shps_type == points) { - int bnd = w*h; - vector dirty(bnd, false); - - wxDouble r = point_radius; - if (w < 150 || h < 150) { - r *= 0.66; - } - if (selectable_shps.size() > 100 && (w < 80 || h < 80)) { - r = 0.2; - } - GdaPoint* p; - for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); - wxGraphicsPath path = gc.CreatePath(); - - for (int i=0, iend=ids.size(); iisNull()) - continue; - int bnd_idx = p->center.x + p->center.y*w; - if (bnd_idx >= 0 && bnd_idx < bnd && !dirty[bnd_idx]) { - path.AddCircle(p->center.x, p->center.y, r); - dirty[bnd_idx] = true; - } - } - gc.StrokePath(path); - } - - } else if (selectable_shps_type == polygons) { - GdaPolygon* p; - for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); - - for (int i=0, iend=ids.size(); iisNull()) - continue; - if (p->all_points_same) { - path.AddCircle(p->center.x, p->center.y, 0.2); - } else { - for (int c=0, s=0, t=p->count[0]; cn_count; c++) { - path.MoveToPoint(p->points[s]); - for (int pt=s+1; ptn; pt++) { - path.AddLineToPoint(p->points[pt]); - } - path.CloseSubpath(); - s = t; - if (c+1 < p->n_count) { - t += p->count[c+1]; - } - } - } - gc.FillPath(path, wxWINDING_RULE); - if (selectable_outline_visible) { - gc.StrokePath(path); - } - } - } - } else if (selectable_shps_type == circles) { - // Only Cartogram map uses this currently - GdaCircle* c; - for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); - if (selectable_outline_visible) { - for (int i=0, iend=ids.size(); icenter.x, c->center.y, c->radius); - gc.FillPath(path, wxWINDING_RULE); - gc.StrokePath(path); - } - } else { - // Note: in the case of circles, it is much slower - // to batch render all of the circles together rather - // than filling them one at a time. This does not appear - // to be true for polygons. - for (int i=0, iend=ids.size(); icenter.x, c->center.y, c->radius); - gc.FillPath(path, wxWINDING_RULE); - } - } - } - - } else if (selectable_shps_type == polylines) { - // only PCP uses PolyLines currently. So, we assume that there - // is only one group of line segments connected together. - // If we support Shapefile polyline map objects, then this will - // have to change. - //gc->SetAntialiasMode(wxANTIALIAS_NONE); - GdaPolyLine* s = 0; - for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); - wxGraphicsPath path = gc.CreatePath(); - for (int i=0, iend=ids.size(); ipoints[0]); - for (int v=0; v < s->n-1; v++) { - path.AddLineToPoint(s->points[v+1]); - } - } - gc.StrokePath(path); - } - } -} - -void TemplateCanvas::OnMouseEvent(wxMouseEvent& event) -{ - // Capture the mouse when left mouse button is down. - if (event.LeftIsDown() && !HasCapture()) - CaptureMouse(); - - if (event.LeftUp() && HasCapture()) - ReleaseMouse(); - - if (mousemode == select) { - - if (selectstate == start) { - if (event.LeftDown()) { - prev = GetActualPos(event); - - if (sel1.x > 0 && sel1.y > 0 && sel2.x > 0 && sel2.y >0) { - // already has selection then - // detect if click inside brush_shape - GdaShape* brush_shape = NULL; - if (brushtype == rectangle) { - brush_shape = new GdaRectangle(sel1, sel2); - } else if (brushtype == circle) { - brush_shape = new GdaCircle(sel1, sel2); - } else if (brushtype == line) { - brush_shape = new GdaPolyLine(sel1, sel2); - } - if (brush_shape->Contains(prev)) { - // brushing - is_brushing = true; - remember_shiftdown = false; // brush will cancel shift - selectstate = brushing; - } else { - // cancel brushing since click outside, restore leftdown - ResetBrushing(); + vector& hs, + bool hl_only, + bool revert, + bool crosshatch, + int alpha) +{ + gc.SetAntialiasMode(wxANTIALIAS_NONE); + gc.SetInterpolationQuality( wxINTERPOLATION_NONE ); + + int cc_ts = cat_data.curr_canvas_tm_step; + int num_cats=cat_data.GetNumCategories(cc_ts); + int w = layer0_bm->GetWidth(); + int h = layer0_bm->GetHeight(); + + if (selectable_shps_type == points) { + int bnd = w*h; + vector dirty(bnd, false); + + wxDouble r = point_radius; + if (w < 150 || h < 150) { + r *= 0.66; + } + if (selectable_shps.size() > 100 && (w < 80 || h < 80)) { + r = 0.2; + } + GdaPoint* p; + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); + wxGraphicsPath path = gc.CreatePath(); + + for (int i=0, iend=ids.size(); iisNull()) + continue; + int bnd_idx = p->center.x + p->center.y*w; + if (bnd_idx >= 0 && bnd_idx < bnd && !dirty[bnd_idx]) { + path.AddCircle(p->center.x, p->center.y, r); + dirty[bnd_idx] = true; + } + } + gc.StrokePath(path); + } + + } else if (selectable_shps_type == polygons) { + GdaPolygon* p; + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); + + for (int i=0, iend=ids.size(); iisNull()) + continue; + if (p->all_points_same) { + path.AddCircle(p->center.x, p->center.y, 0.2); + } else { + for (int c=0, s=0, t=p->count[0]; cn_count; c++) { + path.MoveToPoint(p->points[s]); + for (int pt=s+1; ptn; pt++) { + path.AddLineToPoint(p->points[pt]); + } + path.CloseSubpath(); + s = t; + if (c+1 < p->n_count) { + t += p->count[c+1]; + } + } + } + gc.FillPath(path, wxWINDING_RULE); + if (selectable_outline_visible) { + gc.StrokePath(path); + } + } + } + } else if (selectable_shps_type == circles) { + // Only Cartogram map uses this currently + GdaCircle* c; + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); + if (selectable_outline_visible) { + for (int i=0, iend=ids.size(); icenter.x, c->center.y, c->radius); + gc.FillPath(path, wxWINDING_RULE); + gc.StrokePath(path); + } + } else { + // Note: in the case of circles, it is much slower + // to batch render all of the circles together rather + // than filling them one at a time. This does not appear + // to be true for polygons. + for (int i=0, iend=ids.size(); icenter.x, c->center.y, c->radius); + gc.FillPath(path, wxWINDING_RULE); + } + } + } + + } else if (selectable_shps_type == polylines) { + // only PCP uses PolyLines currently. So, we assume that there + // is only one group of line segments connected together. + // If we support Shapefile polyline map objects, then this will + // have to change. + //gc->SetAntialiasMode(wxANTIALIAS_NONE); + GdaPolyLine* s = 0; + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); + wxGraphicsPath path = gc.CreatePath(); + for (int i=0, iend=ids.size(); ipoints[0]); + for (int v=0; v < s->n-1; v++) { + path.AddLineToPoint(s->points[v+1]); + } + } + gc.StrokePath(path); + } + } +} + +void TemplateCanvas::OnMouseEvent(wxMouseEvent& event) +{ + // Capture the mouse when left mouse button is down. + if (event.LeftIsDown() && !HasCapture()) + CaptureMouse(); + + if (event.LeftUp() && HasCapture()) + ReleaseMouse(); + + if (mousemode == select) { + if (selectstate == start) { + if (event.LeftDown()) { + prev = GetActualPos(event); + if (sel1.x > 0 && sel1.y > 0 && sel2.x > 0 && sel2.y >0) { + // already has selection then + // detect if click inside brush_shape + GdaShape* brush_shape = NULL; + if (brushtype == rectangle) { + brush_shape = new GdaRectangle(sel1, sel2); + } else if (brushtype == circle) { + brush_shape = new GdaCircle(sel1, sel2); + } else if (brushtype == line) { + brush_shape = new GdaPolyLine(sel1, sel2); + } else if (brushtype == custom_select) { + brush_shape = new GdaPolygon(sel1, sel2); + + } + if (brush_shape->Contains(prev)) { + // brushing + is_brushing = true; + remember_shiftdown = false; // brush will cancel shift + selectstate = brushing; + } else { + // cancel brushing since click outside, restore leftdown + ResetBrushing(); sel1 = prev; - sel2 = prev; + sel2 = prev; selectstate = leftdown; - is_showing_brush = false; - //UpdateSelection(); - } - delete brush_shape; - - } else { - sel1 = prev; - selectstate = leftdown; - } - - } else if (event.RightDown()) { - ResetBrushing(); - DisplayRightClickMenu(event.GetPosition()); - - } else { - // hover - if (template_frame && template_frame->IsStatusBarVisible()) { - prev = GetActualPos(event); - DetermineMouseHoverObjects(prev); - UpdateStatusBar(); - } - } - - } else if (selectstate == leftdown) { + is_showing_brush = false; + } + delete brush_shape; + } else { + sel1 = prev; + selectstate = leftdown; + } + + } else if (event.RightDown()) { + ResetBrushing(); + DisplayRightClickMenu(event.GetPosition()); + } else { + // hover + if (template_frame && template_frame->IsStatusBarVisible()) { + prev = GetActualPos(event); + DetermineMouseHoverObjects(prev); + UpdateStatusBar(); + } + } + + } else if (selectstate == leftdown) { if (event.Moving() || event.Dragging()) { - is_showing_brush = true; - wxPoint act_pos = GetActualPos(event); - if (fabs((double) (sel1.x - act_pos.x)) + - fabs((double) (sel1.y - act_pos.y)) > 2) { - sel2 = GetActualPos(event); - selectstate = dragging; - remember_shiftdown = event.ShiftDown(); - UpdateSelection(remember_shiftdown); - //UpdateStatusBar(); - //Refresh(false); - } - } else if (event.LeftUp()) { - wxPoint act_pos = GetActualPos(event); - if (act_pos == sel1 ) { - sel2 = sel1; - } - UpdateSelection(event.ShiftDown(), true); - selectstate = start; - ResetBrushing(); - - } else if (event.RightDown()) { - selectstate = start; - } - - } else if (selectstate == dragging) { - if (event.Dragging()) { // mouse moved while buttons still down - sel2 = GetActualPos(event); - - UpdateSelection(remember_shiftdown); - //UpdateStatusBar(); - //Refresh(false); - - } else if (event.LeftUp()) { - sel2 = GetActualPos(event); - - UpdateSelection(remember_shiftdown); - remember_shiftdown = false; - selectstate = start; - //Refresh(false); - - } else if (event.RightDown()) { - DisplayRightClickMenu(event.GetPosition()); - } - - } else if (selectstate == brushing) { - if (event.LeftUp()) { - is_brushing = false; // will check again if brushing when mouse down again - selectstate = start; - - } else if (event.RightDown()) { - is_brushing = false; - selectstate = start; - Refresh(); - - } else if (is_brushing && (event.Moving() || event.Dragging())) { - wxPoint cur = GetActualPos(event); - wxPoint diff = cur - prev; - sel1 += diff; - sel2 += diff; - //UpdateStatusBar(); - - UpdateSelection(); - //Refresh(false); // keep painting the select rect - prev = cur; - } - } - - } else if (mousemode == zoom || mousemode == zoomout) { - - if (selectstate == start) { - if (event.LeftDown()) { - prev = GetActualPos(event); - sel1 = prev; - selectstate = leftdown; - is_showing_brush = true; - - } else if (event.RightDown()) { - DisplayRightClickMenu(event.GetPosition()); - } - - } else if (selectstate == leftdown) { - if (event.Moving() || event.Dragging()) { - wxPoint act_pos = GetActualPos(event); - if (fabs((double) (prev.x - act_pos.x)) + - fabs((double) (prev.y - act_pos.y)) > 2) { - sel1 = prev; - sel2 = GetActualPos(event); - selectstate = dragging; - remember_shiftdown = event.ShiftDown(); - Refresh(false); - } - } else if (event.LeftUp()) { - if (event.ShiftDown() || event.CmdDown() || mousemode == zoomout) { - // zoom out by a factor of two - is_showing_brush = false; - sel2 = GetActualPos(event); - int c_w, c_h; - GetClientSize(&c_w, &c_h); - if (c_w <=1) c_w = 8; - if (c_h <=1) c_h = 8; - sel1.x = sel2.x - (c_w/8); - sel1.y = sel2.y - (c_h/8); - sel2.x = sel2.x + (c_w/8); - sel2.y = sel2.y + (c_h/8); - ZoomShapes(false); + is_showing_brush = true; + wxPoint act_pos = GetActualPos(event); + if (fabs((double) (sel1.x - act_pos.x)) + + fabs((double) (sel1.y - act_pos.y)) > 2) { + sel2 = GetActualPos(event); + selectstate = dragging; + remember_shiftdown = event.ShiftDown(); + UpdateSelection(remember_shiftdown); + } + } else if (event.LeftUp()) { + wxPoint act_pos = GetActualPos(event); + if (act_pos == sel1 ) { + sel2 = sel1; + } + UpdateSelection(event.ShiftDown(), true); + selectstate = start; + ResetBrushing(); + + } else if (event.RightDown()) { + selectstate = start; + } + + } else if (selectstate == dragging) { + if (event.Dragging()) { // mouse moved while buttons still down + sel2 = GetActualPos(event); + UpdateSelection(remember_shiftdown); + } else if (event.LeftUp()) { + sel2 = GetActualPos(event); + UpdateSelection(remember_shiftdown); + remember_shiftdown = false; + selectstate = start; + } else if (event.RightDown()) { + DisplayRightClickMenu(event.GetPosition()); + } + + } else if (selectstate == brushing) { + if (event.LeftUp()) { + is_brushing = false; // will check again if brushing when mouse down again + selectstate = start; + + } else if (event.RightDown()) { + is_brushing = false; + selectstate = start; + Refresh(); + + } else if (is_brushing && (event.Moving() || event.Dragging())) { + wxPoint cur = GetActualPos(event); + wxPoint diff = cur - prev; + sel1 += diff; + sel2 += diff; + + UpdateSelection(); + prev = cur; + } + } + } else if (mousemode == zoom || mousemode == zoomout) { + if (selectstate == start) { + if (event.LeftDown()) { + prev = GetActualPos(event); + sel1 = prev; + selectstate = leftdown; + is_showing_brush = true; + } else if (event.RightDown()) { + DisplayRightClickMenu(event.GetPosition()); + } + } else if (selectstate == leftdown) { + if (event.Moving() || event.Dragging()) { + wxPoint act_pos = GetActualPos(event); + if (fabs((double) (prev.x - act_pos.x)) + + fabs((double) (prev.y - act_pos.y)) > 2) { + sel1 = prev; + sel2 = GetActualPos(event); + selectstate = dragging; + remember_shiftdown = event.ShiftDown(); + Refresh(false); + } + } else if (event.LeftUp()) { + if (event.ShiftDown() || event.CmdDown() || mousemode == zoomout) { + // zoom out by a factor of two + is_showing_brush = false; + sel2 = GetActualPos(event); + int c_w, c_h; + GetClientSize(&c_w, &c_h); + if (c_w <=1) c_w = 8; + if (c_h <=1) c_h = 8; + sel1.x = sel2.x - (c_w/8); + sel1.y = sel2.y - (c_h/8); + sel2.x = sel2.x + (c_w/8); + sel2.y = sel2.y + (c_h/8); + ZoomShapes(false); } else { sel1 = sel2; - } - selectstate = start; - Refresh(false); - } else if (event.RightDown()) { - selectstate = start; - } - } else if (selectstate == dragging) { - if (event.Dragging()) { // mouse moved while buttons still down - sel2 = GetActualPos(event); - Refresh(false); - } else if (event.LeftUp() ) { - sel2 = GetActualPos(event); - remember_shiftdown = event.ShiftDown() || event.CmdDown() || mousemode == zoomout; - ZoomShapes(!remember_shiftdown); - remember_shiftdown = false; - - selectstate = start; - ResetBrushing(); - Refresh(false); - - } else if (event.RightDown()) { - DisplayRightClickMenu(event.GetPosition()); - } - } - - } else if (mousemode == pan) { - if (selectstate == start) { - if (event.LeftDown()) { - prev = GetActualPos(event); - sel1 = prev; - selectstate = leftdown; - } else if (event.RightDown()) { - DisplayRightClickMenu(event.GetPosition()); - } - } else if (selectstate == leftdown) { - if (event.Moving() || event.Dragging()) { - wxPoint act_pos = GetActualPos(event); - if (fabs((double) (prev.x - act_pos.x)) + - fabs((double) (prev.y - act_pos.y)) > 2) { - sel1 = prev; - sel2 = GetActualPos(event); - selectstate = dragging; - } - } else if (event.LeftUp()) { - selectstate = start; - } else if (event.RightDown()) { - selectstate = start; - } - } else if (selectstate == dragging) { - if (event.Dragging()) { // mouse moved while buttons still down - sel2 = GetActualPos(event); - } else if (event.LeftUp() ) { - sel2 = GetActualPos(event); - - remember_shiftdown = false; - selectstate = start; - PanShapes(); - } else if (event.RightDown()) { - DisplayRightClickMenu(event.GetPosition()); - } - } - } -} - -void TemplateCanvas::OnMouseCaptureLostEvent(wxMouseCaptureLostEvent& event) -{ - if (HasCapture()) - ReleaseMouse(); -} - -void TemplateCanvas::PaintSelectionOutline(wxMemoryDC& _dc) -{ -#ifndef __WIN32__ - wxGCDC dc(_dc); - helper_PaintSelectionOutline(dc); -#else - helper_PaintSelectionOutline(_dc); -#endif -} - -void TemplateCanvas::helper_PaintSelectionOutline(wxDC& dc) -{ - if (is_showing_brush && (mousemode == select || mousemode == zoom || mousemode == zoomout)) - { - if (sel1 != sel2) { - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.SetPen(*wxBLACK_PEN); - if (brushtype == rectangle) { - dc.DrawRectangle(wxRect(sel1, sel2)); - } else if (brushtype == line) { - dc.DrawLine(sel1, sel2); - } else if (brushtype == circle) { - dc.DrawCircle(sel1, GenUtils::distance(sel1, sel2)); - } - } - } -} - -void TemplateCanvas::PaintControls(wxDC& dc) -{ -} - -// The following five methods enable the use of a custom -// HLStateInt object -// Returns bit vector of selection values according -// to selectable objects -vector& TemplateCanvas::GetSelBitVec() -{ - return highlight_state->GetHighlight(); -} - -// Returns number of newly selected objects -int TemplateCanvas::GetNumNewlySel() -{ - return highlight_state->GetTotalNewlyHighlighted(); -} - -// Sets number of newly selected objects -void TemplateCanvas::SetNumNewlySel(int n) -{ - highlight_state->SetTotalNewlyHighlighted(n); -} - -// Returns list of newly selected objects. Only indexes -// 0 through GetNumNewlySel()-1 are valid. -vector& TemplateCanvas::GetNewlySelList() -{ - return highlight_state->GetNewlyHighlighted(); -} - -// Returns number of newly unselected objects -int TemplateCanvas::GetNumNewlyUnsel() -{ - return highlight_state->GetTotalNewlyUnhighlighted(); -} - -void TemplateCanvas::SetNumNewlyUnsel(int n) -{ - highlight_state->SetTotalNewlyUnhighlighted(n); -} - -// Returns list of newly unselected objects. Only indexes -// 0 through GetNumNewlyUnsel()-1 are valid. -vector& TemplateCanvas::GetNewlyUnselList() -{ - return highlight_state->GetNewlyUnhighlighted(); -} - -wxPoint TemplateCanvas::GetActualPos(const wxMouseEvent& event) -{ - return wxPoint(event.GetX(), event.GetY()); -} - -void TemplateCanvas::DisplayRightClickMenu(const wxPoint& pos) -{ - ResetBrushing(); -} - -void TemplateCanvas::AppendCustomCategories(wxMenu* menu, - CatClassifManager* ccm) -{ - // search for ID_CAT_CLASSIF_A(B,C)_MENU submenus - const int num_sub_menus=3; - vector menu_id(num_sub_menus); - vector sub_menu_id(num_sub_menus); - vector base_id(num_sub_menus); - menu_id[0] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"); - menu_id[1] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_B"); // conditional horizontal menu - menu_id[2] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_C"); // conditional verticle menu - sub_menu_id[0] = XRCID("ID_CAT_CLASSIF_A_MENU"); - sub_menu_id[1] = XRCID("ID_CAT_CLASSIF_B_MENU"); - sub_menu_id[2] = XRCID("ID_CAT_CLASSIF_C_MENU"); - base_id[0] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0; - base_id[1] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_B0; - base_id[2] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_C0; - - for (int i=0; iFindItem(sub_menu_id[i]); - if (!smii) continue; - wxMenu* smi = smii->GetSubMenu(); - if (!smi) continue; - int m_id = smi->FindItem(_("Custom Breaks")); - wxMenuItem* mi = smi->FindItem(m_id); - if (!mi) continue; - - wxMenu* sm = mi->GetSubMenu(); - // clean - wxMenuItemList items = sm->GetMenuItems(); - for (int i=0; iDelete(items[i]); - } - - sm->Append(menu_id[i], _("Create New Custom"), _("Create new custom categories classification.")); - sm->AppendSeparator(); - - vector titles; - ccm->GetTitles(titles); - for (size_t j=0; jAppend(base_id[i]+j, titles[j]); - } - if (i==0) { - // regular map menu - GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, &GdaFrame::OnCustomCategoryClick, GdaFrame::GetGdaFrame(), GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0, GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0 + titles.size()); - } else if (i==1) { - // conditional horizontal map menu - GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, &GdaFrame::OnCustomCategoryClick_B, GdaFrame::GetGdaFrame(), GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_B0, GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_B0 + titles.size()); - } else if (i==2) { - // conditional verticle map menu - GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, &GdaFrame::OnCustomCategoryClick_C, GdaFrame::GetGdaFrame(), GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_C0, GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_C0 + titles.size()); - } - } -} - -void TemplateCanvas::UpdateSelectRegion(bool translate, wxPoint diff) -{ - -} - -// This is a good candidate for parallelization in the future. Could -// also use an r-tree to greatly reduce number of comparisons needed. -// For efficency sake, will make this default solution assume that -// selectable shapes and highlight state are in a one-to-one -// correspondence. Special views such as histogram, or perhaps -// even map legends will have to override UpdateSelection and -// NotifyObservables. -void TemplateCanvas::UpdateSelection(bool shiftdown, bool pointsel) -{ - if (selectable_shps_type == circles) { - UpdateSelectionCircles(shiftdown, pointsel); - } else if (selectable_shps_type == polylines) { - UpdateSelectionPolylines(shiftdown, pointsel); + } + selectstate = start; + Refresh(false); + } else if (event.RightDown()) { + selectstate = start; + } + } else if (selectstate == dragging) { + if (event.Dragging()) { // mouse moved while buttons still down + sel2 = GetActualPos(event); + Refresh(false); + } else if (event.LeftUp() ) { + sel2 = GetActualPos(event); + remember_shiftdown = event.ShiftDown() || event.CmdDown() || + mousemode == zoomout; + ZoomShapes(!remember_shiftdown); + remember_shiftdown = false; + + selectstate = start; + ResetBrushing(); + Refresh(false); + + } else if (event.RightDown()) { + DisplayRightClickMenu(event.GetPosition()); + } + } + + } else if (mousemode == pan) { + if (selectstate == start) { + if (event.LeftDown()) { + prev = GetActualPos(event); + sel1 = prev; + selectstate = leftdown; + } else if (event.RightDown()) { + DisplayRightClickMenu(event.GetPosition()); + } + } else if (selectstate == leftdown) { + if (event.Moving() || event.Dragging()) { + wxPoint act_pos = GetActualPos(event); + if (fabs((double) (prev.x - act_pos.x)) + + fabs((double) (prev.y - act_pos.y)) > 2) { + sel1 = prev; + sel2 = GetActualPos(event); + selectstate = dragging; + } + } else if (event.LeftUp()) { + selectstate = start; + } else if (event.RightDown()) { + selectstate = start; + } + } else if (selectstate == dragging) { + if (event.Dragging()) { // mouse moved while buttons still down + sel2 = GetActualPos(event); + } else if (event.LeftUp() ) { + sel2 = GetActualPos(event); + + remember_shiftdown = false; + selectstate = start; + PanShapes(); + } else if (event.RightDown()) { + DisplayRightClickMenu(event.GetPosition()); + } + } + } +} + +void TemplateCanvas::OnMouseCaptureLostEvent(wxMouseCaptureLostEvent& event) +{ + if (HasCapture()) ReleaseMouse(); +} + +void TemplateCanvas::PaintSelectionOutline(wxMemoryDC& _dc) +{ +#ifndef __WIN32__ + wxGCDC dc(_dc); + helper_PaintSelectionOutline(dc); +#else + helper_PaintSelectionOutline(_dc); +#endif +} + +void TemplateCanvas::helper_PaintSelectionOutline(wxDC& dc) +{ + if (is_showing_brush && + (mousemode == select || mousemode == zoom || mousemode == zoomout)) + { + if (sel1 != sel2) { + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.SetPen(*wxBLACK_PEN); + if (brushtype == rectangle) { + dc.DrawRectangle(wxRect(sel1, sel2)); + } else if (brushtype == line) { + dc.DrawLine(sel1, sel2); + } else if (brushtype == circle) { + dc.DrawCircle(sel1, GenUtils::distance(sel1, sel2)); + } + } + } +} + +void TemplateCanvas::PaintControls(wxDC& dc) +{ +} + +// The following five methods enable the use of a custom +// HLStateInt object +// Returns bit vector of selection values according +// to selectable objects +vector& TemplateCanvas::GetSelBitVec() +{ + return highlight_state->GetHighlight(); +} + +// Returns number of newly selected objects +int TemplateCanvas::GetNumNewlySel() +{ + return highlight_state->GetTotalNewlyHighlighted(); +} + +// Sets number of newly selected objects +void TemplateCanvas::SetNumNewlySel(int n) +{ + highlight_state->SetTotalNewlyHighlighted(n); +} + +// Returns list of newly selected objects. Only indexes +// 0 through GetNumNewlySel()-1 are valid. +vector& TemplateCanvas::GetNewlySelList() +{ + return highlight_state->GetNewlyHighlighted(); +} + +// Returns number of newly unselected objects +int TemplateCanvas::GetNumNewlyUnsel() +{ + return highlight_state->GetTotalNewlyUnhighlighted(); +} + +void TemplateCanvas::SetNumNewlyUnsel(int n) +{ + highlight_state->SetTotalNewlyUnhighlighted(n); +} + +// Returns list of newly unselected objects. Only indexes +// 0 through GetNumNewlyUnsel()-1 are valid. +vector& TemplateCanvas::GetNewlyUnselList() +{ + return highlight_state->GetNewlyUnhighlighted(); +} + +wxPoint TemplateCanvas::GetActualPos(const wxMouseEvent& event) +{ + return wxPoint(event.GetX(), event.GetY()); +} + +void TemplateCanvas::DisplayRightClickMenu(const wxPoint& pos) +{ + ResetBrushing(); +} + +void TemplateCanvas::AppendCustomCategories(wxMenu* menu, + CatClassifManager* ccm) +{ + // search for ID_CAT_CLASSIF_A(B,C)_MENU submenus + const int num_sub_menus=3; + vector menu_id(num_sub_menus); + vector sub_menu_id(num_sub_menus); + vector base_id(num_sub_menus); + menu_id[0] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"); + menu_id[1] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_B"); // conditional horizontal menu + menu_id[2] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_C"); // conditional verticle menu + sub_menu_id[0] = XRCID("ID_CAT_CLASSIF_A_MENU"); + sub_menu_id[1] = XRCID("ID_CAT_CLASSIF_B_MENU"); + sub_menu_id[2] = XRCID("ID_CAT_CLASSIF_C_MENU"); + base_id[0] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0; + base_id[1] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_B0; + base_id[2] = GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_C0; + + for (int i=0; iFindItem(sub_menu_id[i]); + if (!smii) continue; + wxMenu* smi = smii->GetSubMenu(); + if (!smi) continue; + int m_id = smi->FindItem(_("Custom Breaks")); + wxMenuItem* mi = smi->FindItem(m_id); + if (!mi) continue; + + wxMenu* sm = mi->GetSubMenu(); + // clean + wxMenuItemList items = sm->GetMenuItems(); + for (int i=0; iDelete(items[i]); + } + + sm->Append(menu_id[i], _("Create New Custom"), + _("Create new custom categories classification.")); + sm->AppendSeparator(); + + vector titles; + ccm->GetTitles(titles); + for (size_t j=0; jAppend(base_id[i]+j, titles[j]); + } + if (i==0) { + // regular map menu + GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, + &GdaFrame::OnCustomCategoryClick, + GdaFrame::GetGdaFrame(), + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0, + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0 + titles.size()); + } else if (i==1) { + // conditional horizontal map menu + GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, + &GdaFrame::OnCustomCategoryClick_B, + GdaFrame::GetGdaFrame(), + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_B0, + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_B0 + titles.size()); + } else if (i==2) { + // conditional verticle map menu + GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, + &GdaFrame::OnCustomCategoryClick_C, + GdaFrame::GetGdaFrame(), + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_C0, + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_C0 + titles.size()); + } + } +} + +void TemplateCanvas::UpdateSelectRegion(bool translate, wxPoint diff) +{ + +} + +// This is a good candidate for parallelization in the future. Could +// also use an r-tree to greatly reduce number of comparisons needed. +// For efficency sake, will make this default solution assume that +// selectable shapes and highlight state are in a one-to-one +// correspondence. Special views such as histogram, or perhaps +// even map legends will have to override UpdateSelection and +// NotifyObservables. +void TemplateCanvas::UpdateSelection(bool shiftdown, bool pointsel) +{ + if (selectable_shps_type == circles) { + UpdateSelectionCircles(shiftdown, pointsel); + } else if (selectable_shps_type == polylines) { + UpdateSelectionPolylines(shiftdown, pointsel); } else { - // rectangle - UpdateSelectionPoints(shiftdown, pointsel); - } - - // re-paint highlight layer (layer1_bm) - layer1_valid = false; - DrawLayers(); - - UpdateStatusBar(); -} - -// The following function assumes that the set of selectable objects -// being selected against are all points. Since all GdaShape objects -// define a center point, this is also the default function for -// all GdaShape selectable objects. -void TemplateCanvas::UpdateSelectionPoints(bool shiftdown, bool pointsel) -{ - int hl_size = GetSelBitVec().size(); - if (hl_size != selectable_shps.size()) return; - - vector& hs = GetSelBitVec(); - bool selection_changed = false; - - if (pointsel) { // a point selection - for (int i=0; ipointWithin(sel1)) { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } else { - hs[i] = true; - selection_changed = true; - } - } else { - if (!shiftdown && hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } - } else { // determine which obs intersect the selection region. - if (brushtype == rectangle) { - wxRegion rect(wxRect(sel1, sel2)); - for (int i=0; icenter) != - wxOutRegion); - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - - } else if (brushtype == circle) { - // using quad-tree to do pre-selection - double radius = GenUtils::distance(sel1, sel2); - // determine if each center is within radius of sel1 - for (int i=0; icenter) <= radius); - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - } else if (brushtype == line) { - wxRegion rect(wxRect(sel1, sel2)); - // determine if each center is within rect and also within distance - // 3.0 of line passing through sel1 and sel2 - // Note: we can speed up calculations for GenUtils::pointToLineDist - // by reusing parts of the calculation. See - // GenUtils::pointToLineDist for algorithm that the following - // is based upon. - double p1x = sel1.x; - double p1y = sel1.y; - double p2x = sel2.x; - double p2y = sel2.y; - double p2xMp1x = p2x - p1x; - double p2yMp1y = p2y - p1y; - double dp1p2 = GenUtils::distance(sel1, sel2); - double delta = 3.0 * dp1p2; - for (int i=0; icenter) != - wxOutRegion); - if (contains) { - double p0x = selectable_shps[i]->center.x; - double p0y = selectable_shps[i]->center.y; - // determine if selectable_shps[i]->center is within - // distance 3.0 of line passing through sel1 and sel2 - if (abs(p2xMp1x * (p1y-p0y) - (p1x-p0x) * p2yMp1y) > - delta ) contains = false; - } - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - } - } - if (selection_changed) { - int total_highlighted = 0; // used for MapCanvas::Drawlayer1 - for (int i=0; iSetTotalHighlighted(total_highlighted); - highlight_timer->Start(50); - } -} - -// The following function assumes that the set of selectable objects -// being selected against are all GdaCircle objects. -void TemplateCanvas::UpdateSelectionCircles(bool shiftdown, bool pointsel) -{ - int hl_size = GetSelBitVec().size(); - if (hl_size != selectable_shps.size()) return; - - vector& hs = GetSelBitVec(); - bool selection_changed = false; - - if (pointsel) { // a point selection - for (int i=0; iisNull()) continue; - if (GenUtils::distance(s->center, sel1) <= s->radius) { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } else { - hs[i] = true; - selection_changed = true; - } - } else { - if (!shiftdown && hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } - } else { - if (brushtype == rectangle) { - wxRect rect(sel1, sel2); - double rect_x = rect.GetPosition().x; - double rect_y = rect.GetPosition().y; - double half_rect_w = fabs((double) (sel1.x - sel2.x))/2.0; - double half_rect_h = fabs((double) (sel1.y - sel2.y))/2.0; - for (int i=0; iisNull()) continue; - double cdx = fabs((s->center.x - rect_x) - half_rect_w); - double cdy = fabs((s->center.y - rect_y) - half_rect_h); - bool contains = true; - if (cdx > (half_rect_w + s->radius) || - cdy > (half_rect_h + s->radius)) { - contains = false; - } else if (cdx <= half_rect_w || - cdy <= half_rect_h) { - contains = true; - } else { - double t1 = cdx - half_rect_w; - double t2 = cdy - half_rect_h; - double corner_dist_sq = t1*t1 + t2*t2; - contains = corner_dist_sq <= (s->radius)*(s->radius); - } - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - } else if (brushtype == circle) { - double radius = GenUtils::distance(sel1, sel2); - // determine if circles overlap - for (int i=0; iisNull()) continue; - bool contains = (radius + s->radius >= - GenUtils::distance(sel1, s->center)); - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - } else if (brushtype == line) { - wxRealPoint hp((sel1.x+sel2.x)/2.0, (sel1.y+sel2.y)/2.0); - double hp_rad = GenUtils::distance(sel1, sel2)/2.0; - for (int i=0; iisNull()) continue; - bool contains = ((GenUtils::pointToLineDist(s->center, - sel1, sel2) <= - s->radius) && - (GenUtils::distance(hp, s->center) <= - hp_rad + s->radius)); - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - } - } - if (selection_changed) { - int total_highlighted = 1; // used for MapCanvas::Drawlayer1 - highlight_state->SetTotalHighlighted(total_highlighted); - highlight_timer->Start(50); - } -} - -// The following function assumes that the set of selectable objects -// being selected against are all GdaPolyLine objects. -void TemplateCanvas::UpdateSelectionPolylines(bool shiftdown, bool pointsel) -{ - int hl_size = GetSelBitVec().size(); - if (hl_size != selectable_shps.size()) return; - - vector& hs = GetSelBitVec(); - bool selection_changed = false; - - GdaPolyLine* p; - if (pointsel) { // a point selection - double radius = 3.0; - wxRealPoint hp; - double hp_rad; - for (int i=0; iisNull()) continue; - bool contains = false; - for (int j=0, its=p->n-1; jpoints[j].x + p->points[j+1].x)/2.0; - hp.y = (p->points[j].y + p->points[j+1].y)/2.0; - hp_rad = GenUtils::distance(p->points[j], - p->points[j+1])/2.0; - - if ((GenUtils::pointToLineDist(sel1, - p->points[j], - p->points[j+1]) <= - radius) && - (GenUtils::distance(hp, sel1) <= hp_rad + radius)) - { - contains = true; - break; - } - } - if (contains) { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } else { - hs[i] = true; - selection_changed = true; - } - } else { - if (!shiftdown && hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } - } else { // determine which obs intersect the selection region. - if (brushtype == rectangle) { - wxPoint lleft; // lower left corner of rect - wxPoint uright; // upper right corner of rect - wxPoint uleft; // upper right corner - wxPoint lright; // lower right corner - GenGeomAlgs::StandardizeRect(sel1, sel2, lleft, uright); - uleft.x = lleft.x; - uleft.y = uright.y; - lright.x = uright.x; - lright.y = lleft.y; - for (int i=0; iisNull()) continue; - bool contains = false; - for (int j=0, its=p->n-1; jpoints[j]; - wxPoint& next_pt = p->points[j+1]; - if (GenGeomAlgs::LineSegsIntersect(pt, next_pt,lleft, uleft) || - GenGeomAlgs::LineSegsIntersect(pt, next_pt, uleft, uright) || - GenGeomAlgs::LineSegsIntersect(pt, next_pt, uright, lright) || - GenGeomAlgs::LineSegsIntersect(pt, next_pt, lright, lleft)) - { - contains = true; - break; - } - } - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - } else if (brushtype == line) { - for (int i=0; iisNull()) continue; - bool contains = false; - for (int j=0, its=p->n-1; jpoints[j]; - wxPoint& next_pt = p->points[j+1]; - if (GenGeomAlgs::LineSegsIntersect(pt, next_pt, sel1, sel2)) - { - contains = true; - break; - } - } - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - } else if (brushtype == circle) { - double radius = GenUtils::distance(sel1, sel2); - wxRealPoint hp; - double hp_rad; - for (int i=0; iisNull()) continue; - bool contains = false; - for (int j=0, its=p->n-1; jpoints[j]; - wxPoint& next_pt = p->points[j+1]; - hp.x = (pt.x + next_pt.x)/2.0; - hp.y = (pt.y + next_pt.y)/2.0; - hp_rad = GenUtils::distance(pt, next_pt)/2.0; - - if ((GenUtils::pointToLineDist(sel1, pt, next_pt) <= radius) && - (GenUtils::distance(hp, sel1) <= hp_rad + radius)) - { - contains = true; - break; - } - } - if (!shiftdown) { - if (contains) { - if (!hs[i]) { - hs[i] = true; - selection_changed = true; - } - } else { - if (hs[i]) { - hs[i] = false; - selection_changed = true; - } - } - } else { // do not unhighlight if not in intersection region - if (contains && !hs[i]) { - hs[i] = true; - selection_changed = true; - } - } - } - } - } - if (selection_changed) { - int total_highlighted = 1; // used for MapCanvas::Drawlayer1 - highlight_state->SetTotalHighlighted(total_highlighted); - highlight_timer->Start(50); - } -} - -void TemplateCanvas::SelectAllInCategory(int category, - bool add_to_selection) -{ - int cc_ts = cat_data.curr_canvas_tm_step; - if (category < 0 && category >= cat_data.GetNumCategories(cc_ts)) { - return; - } - int hl_size = highlight_state->GetHighlightSize(); - if (hl_size != selectable_shps.size()) return; - - vector& hs = highlight_state->GetHighlight(); - bool selection_changed = false; - - vector obs_in_cat(hl_size, false); - vector& ids = cat_data.GetIdsRef(cc_ts, category); - - for (int i=0, iend=ids.size(); iSetEventType(HLStateInt::delta); - highlight_state->notifyObservers(); - } -} - - -/** In this default implementation of NotifyObservables, we assume - that the selectable_shps are in one-to-one correspondence - with the shps in the highlight_state observable vector. If this is - not true, then NotifyObservables() needs to be redefined in the - child class. This method looks at the vectors of newly highlighted - and unhighlighted observations as set by the calling UpdateSelection - method, and determines the best notification to broadcast to all - other HighlightStateObserver instances. - */ -void TemplateCanvas::NotifyObservables() -{ - // Goal: assuming that all views have the ability to draw - // deltas, try to determine set of operations that will minimize - // number of shapes to draw/erease. Remember that all classes - // have the ability to erase all shapes for free. But, we will also - // assume that when a delta update is given, that the class can - // also determine how best to do the update. - - int total_newly_selected = highlight_state->GetTotalNewlyHighlighted(); - int total_newly_unselected = highlight_state->GetTotalNewlyUnhighlighted(); - - if (total_newly_selected == 0 && - total_newly_unselected == highlight_state->GetTotalHighlighted()) { - highlight_state->SetEventType(HLStateInt::unhighlight_all); - highlight_state->notifyObservers(this); - } else { - highlight_state->SetEventType(HLStateInt::delta); - highlight_state->SetTotalNewlyHighlighted(total_newly_selected); - highlight_state->SetTotalNewlyUnhighlighted(total_newly_unselected); - highlight_state->notifyObservers(this); - } -} - -void TemplateCanvas::DetermineMouseHoverObjects(wxPoint pt) -{ - total_hover_obs = 0; - hover_obs.clear(); - int total_obs = selectable_shps.size(); - if (selectable_shps_type == circles) { - // slightly faster than GdaCircle::pointWithin - for (int i=0; iisNull()) continue; - if (GenUtils::distance_sqrd(s->center, pt) <= - s->radius*s->radius) { - hover_obs.push_back(i); - total_hover_obs++; - } - } - } else if (selectable_shps_type == polygons || - selectable_shps_type == polylines || - selectable_shps_type == rectangles) - { - for (int i=0; ipointWithin(pt)) { - hover_obs.push_back(i); - total_hover_obs++; - } - } - } else { // selectable_shps_type == points or anything without pointWithin - const double r2 = point_radius; - for (int i=0; icenter, pt) - <= 16.5) { - hover_obs.push_back(i); - total_hover_obs++; - } - } - } -} - -void TemplateCanvas::UpdateStatusBar() -{ - wxStatusBar* sb = 0; - if (template_frame) sb = template_frame->GetStatusBar(); - if (!sb) return; - wxString s; - if (mousemode == select && selectstate == start) { - s << "mouse position = (" << sel1.x << "," << sel1.y << ")"; - if (total_hover_obs >= 1) { - s << ", sel obs id: " << hover_obs[0]+1; - } - } - sb->SetStatusText(s); -} - -wxString TemplateCanvas::GetCanvasTitle() -{ - return wxEmptyString; -} - -/** Global title or time step has changed. Update canvas and title - as necessary */ -void TemplateCanvas::TimeChange() -{ -} - -void TemplateCanvas::CreateZValArrays(int num_canvas_tms, int num_obs) -{ - z_val_order.resize(num_canvas_tms); - for (int t=0; t& undefs) -{ - if (project->GetNumRecords() != selectable_shps.size()) return; - vector data(1); - - int cc_ts = cat_data.curr_canvas_tm_step; - int num_cats = cat_data.GetNumCategories(cc_ts); - vector dt(selectable_shps.size()); - - data[0].type = GdaConst::long64_type; - data[0].l_val = &dt; - data[0].label = label; - data[0].field_default = field_default; - data[0].undefined = &undefs; - - for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); - for (int i=0, iend=ids.size(); i >& colors) -{ - int cc_ts = cat_data.curr_canvas_tm_step; - int num_cats=cat_data.GetNumCategories(cc_ts); - - for (int cat=0; cat ids_copy; - colors[clr] = ids_copy; - - vector& ids = cat_data.GetIdsRef(cc_ts, cat); - - for (int i=0, iend=ids.size(); i& clrs, - vector& bins) -{ - - if (selectable_shps_type == points) { - shape_type = "POINT"; - } else if (selectable_shps_type == polygons) { - shape_type = "POLYGON"; - } - - int cc_ts = cat_data.curr_canvas_tm_step; - int num_cats=cat_data.GetNumCategories(cc_ts); - - if (num_cats >1) { - for (int cat=0; cat& hs = GetSelBitVec(); + bool selection_changed = false; + + if (pointsel) { // a point selection + for (int i=0; ipointWithin(sel1)) { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } else { + hs[i] = true; + selection_changed = true; + } + } else { + if (!shiftdown && hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } + } else { // determine which obs intersect the selection region. + if (brushtype == rectangle) { + wxRegion rect(wxRect(sel1, sel2)); + for (int i=0; icenter) != + wxOutRegion); + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + + } else if (brushtype == circle) { + // using quad-tree to do pre-selection + double radius = GenUtils::distance(sel1, sel2); + // determine if each center is within radius of sel1 + for (int i=0; icenter) <= radius); + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + } else if (brushtype == line) { + wxRegion rect(wxRect(sel1, sel2)); + // determine if each center is within rect and also within distance + // 3.0 of line passing through sel1 and sel2 + // Note: we can speed up calculations for GenUtils::pointToLineDist + // by reusing parts of the calculation. See + // GenUtils::pointToLineDist for algorithm that the following + // is based upon. + double p1x = sel1.x; + double p1y = sel1.y; + double p2x = sel2.x; + double p2y = sel2.y; + double p2xMp1x = p2x - p1x; + double p2yMp1y = p2y - p1y; + double dp1p2 = GenUtils::distance(sel1, sel2); + double delta = 3.0 * dp1p2; + for (int i=0; icenter) != + wxOutRegion); + if (contains) { + double p0x = selectable_shps[i]->center.x; + double p0y = selectable_shps[i]->center.y; + // determine if selectable_shps[i]->center is within + // distance 3.0 of line passing through sel1 and sel2 + if (abs(p2xMp1x * (p1y-p0y) - (p1x-p0x) * p2yMp1y) > + delta ) contains = false; + } + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + } + } + if (selection_changed) { + int total_highlighted = 0; // used for MapCanvas::Drawlayer1 + for (int i=0; iSetTotalHighlighted(total_highlighted); + highlight_timer->Start(50); + } +} + +// The following function assumes that the set of selectable objects +// being selected against are all GdaCircle objects. +void TemplateCanvas::UpdateSelectionCircles(bool shiftdown, bool pointsel) +{ + int hl_size = GetSelBitVec().size(); + if (hl_size != selectable_shps.size()) return; + + vector& hs = GetSelBitVec(); + bool selection_changed = false; + + if (pointsel) { // a point selection + for (int i=0; iisNull()) continue; + if (GenUtils::distance(s->center, sel1) <= s->radius) { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } else { + hs[i] = true; + selection_changed = true; + } + } else { + if (!shiftdown && hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } + } else { + if (brushtype == rectangle) { + wxRect rect(sel1, sel2); + double rect_x = rect.GetPosition().x; + double rect_y = rect.GetPosition().y; + double half_rect_w = fabs((double) (sel1.x - sel2.x))/2.0; + double half_rect_h = fabs((double) (sel1.y - sel2.y))/2.0; + for (int i=0; iisNull()) continue; + double cdx = fabs((s->center.x - rect_x) - half_rect_w); + double cdy = fabs((s->center.y - rect_y) - half_rect_h); + bool contains = true; + if (cdx > (half_rect_w + s->radius) || + cdy > (half_rect_h + s->radius)) { + contains = false; + } else if (cdx <= half_rect_w || + cdy <= half_rect_h) { + contains = true; + } else { + double t1 = cdx - half_rect_w; + double t2 = cdy - half_rect_h; + double corner_dist_sq = t1*t1 + t2*t2; + contains = corner_dist_sq <= (s->radius)*(s->radius); + } + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + } else if (brushtype == circle) { + double radius = GenUtils::distance(sel1, sel2); + // determine if circles overlap + for (int i=0; iisNull()) continue; + bool contains = (radius + s->radius >= + GenUtils::distance(sel1, s->center)); + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + } else if (brushtype == line) { + wxRealPoint hp((sel1.x+sel2.x)/2.0, (sel1.y+sel2.y)/2.0); + double hp_rad = GenUtils::distance(sel1, sel2)/2.0; + for (int i=0; iisNull()) continue; + bool contains = ((GenUtils::pointToLineDist(s->center, + sel1, sel2) <= + s->radius) && + (GenUtils::distance(hp, s->center) <= + hp_rad + s->radius)); + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + } + } + if (selection_changed) { + int total_highlighted = 1; // used for MapCanvas::Drawlayer1 + highlight_state->SetTotalHighlighted(total_highlighted); + highlight_timer->Start(50); + } +} + +// The following function assumes that the set of selectable objects +// being selected against are all GdaPolyLine objects. +void TemplateCanvas::UpdateSelectionPolylines(bool shiftdown, bool pointsel) +{ + int hl_size = GetSelBitVec().size(); + if (hl_size != selectable_shps.size()) return; + + vector& hs = GetSelBitVec(); + bool selection_changed = false; + + GdaPolyLine* p; + if (pointsel) { // a point selection + double radius = 3.0; + wxRealPoint hp; + double hp_rad; + for (int i=0; iisNull()) continue; + bool contains = false; + for (int j=0, its=p->n-1; jpoints[j].x + p->points[j+1].x)/2.0; + hp.y = (p->points[j].y + p->points[j+1].y)/2.0; + hp_rad = GenUtils::distance(p->points[j], + p->points[j+1])/2.0; + + if ((GenUtils::pointToLineDist(sel1, + p->points[j], + p->points[j+1]) <= + radius) && + (GenUtils::distance(hp, sel1) <= hp_rad + radius)) + { + contains = true; + break; + } + } + if (contains) { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } else { + hs[i] = true; + selection_changed = true; + } + } else { + if (!shiftdown && hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } + } else { // determine which obs intersect the selection region. + if (brushtype == rectangle) { + wxPoint lleft; // lower left corner of rect + wxPoint uright; // upper right corner of rect + wxPoint uleft; // upper right corner + wxPoint lright; // lower right corner + GenGeomAlgs::StandardizeRect(sel1, sel2, lleft, uright); + uleft.x = lleft.x; + uleft.y = uright.y; + lright.x = uright.x; + lright.y = lleft.y; + for (int i=0; iisNull()) continue; + bool contains = false; + for (int j=0, its=p->n-1; jpoints[j]; + wxPoint& next_pt = p->points[j+1]; + if (GenGeomAlgs::LineSegsIntersect(pt, next_pt,lleft, uleft) || + GenGeomAlgs::LineSegsIntersect(pt, next_pt, uleft, uright) || + GenGeomAlgs::LineSegsIntersect(pt, next_pt, uright, lright) || + GenGeomAlgs::LineSegsIntersect(pt, next_pt, lright, lleft)) + { + contains = true; + break; + } + } + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + } else if (brushtype == line) { + for (int i=0; iisNull()) continue; + bool contains = false; + for (int j=0, its=p->n-1; jpoints[j]; + wxPoint& next_pt = p->points[j+1]; + if (GenGeomAlgs::LineSegsIntersect(pt, next_pt, sel1, sel2)) + { + contains = true; + break; + } + } + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + } else if (brushtype == circle) { + double radius = GenUtils::distance(sel1, sel2); + wxRealPoint hp; + double hp_rad; + for (int i=0; iisNull()) continue; + bool contains = false; + for (int j=0, its=p->n-1; jpoints[j]; + wxPoint& next_pt = p->points[j+1]; + hp.x = (pt.x + next_pt.x)/2.0; + hp.y = (pt.y + next_pt.y)/2.0; + hp_rad = GenUtils::distance(pt, next_pt)/2.0; + + if ((GenUtils::pointToLineDist(sel1, pt, next_pt) <= radius) && + (GenUtils::distance(hp, sel1) <= hp_rad + radius)) + { + contains = true; + break; + } + } + if (!shiftdown) { + if (contains) { + if (!hs[i]) { + hs[i] = true; + selection_changed = true; + } + } else { + if (hs[i]) { + hs[i] = false; + selection_changed = true; + } + } + } else { // do not unhighlight if not in intersection region + if (contains && !hs[i]) { + hs[i] = true; + selection_changed = true; + } + } + } + } + } + if (selection_changed) { + int total_highlighted = 1; // used for MapCanvas::Drawlayer1 + highlight_state->SetTotalHighlighted(total_highlighted); + highlight_timer->Start(50); + } +} + +void TemplateCanvas::SelectAllInCategory(int category, + bool add_to_selection) +{ + int cc_ts = cat_data.curr_canvas_tm_step; + if (category < 0 && category >= cat_data.GetNumCategories(cc_ts)) { + return; + } + int hl_size = highlight_state->GetHighlightSize(); + if (hl_size != selectable_shps.size()) return; + + vector& hs = highlight_state->GetHighlight(); + bool selection_changed = false; + + vector obs_in_cat(hl_size, false); + vector& ids = cat_data.GetIdsRef(cc_ts, category); + + for (int i=0, iend=ids.size(); iSetEventType(HLStateInt::delta); + highlight_state->notifyObservers(); // notify self to update drawing + } +} + +void TemplateCanvas::DetermineMouseHoverObjects(wxPoint pt) +{ + total_hover_obs = 0; + hover_obs.clear(); + int total_obs = selectable_shps.size(); + if (selectable_shps_type == circles) { + // slightly faster than GdaCircle::pointWithin + for (int i=0; iisNull()) continue; + if (GenUtils::distance_sqrd(s->center, pt) <= + s->radius*s->radius) { + hover_obs.push_back(i); + total_hover_obs++; + } + } + } else if (selectable_shps_type == polygons || + selectable_shps_type == polylines || + selectable_shps_type == rectangles) + { + for (int i=0; ipointWithin(pt)) { + hover_obs.push_back(i); + total_hover_obs++; + } + } + } else { // selectable_shps_type == points or anything without pointWithin + const double r2 = point_radius; + for (int i=0; icenter, pt) + <= 16.5) { + hover_obs.push_back(i); + total_hover_obs++; + } + } + } +} + +void TemplateCanvas::UpdateStatusBar() +{ + wxStatusBar* sb = 0; + if (template_frame) sb = template_frame->GetStatusBar(); + if (!sb) return; + wxString s; + if (mousemode == select && selectstate == start) { + s << "mouse position = (" << sel1.x << "," << sel1.y << ")"; + if (total_hover_obs >= 1) { + s << ", sel obs id: " << hover_obs[0]+1; + } + } + sb->SetStatusText(s); +} + +wxString TemplateCanvas::GetCanvasTitle() +{ + return wxEmptyString; +} + +/** Global title or time step has changed. Update canvas and title + as necessary */ +void TemplateCanvas::TimeChange() +{ +} + +void TemplateCanvas::CreateZValArrays(int num_canvas_tms, int num_obs) +{ + z_val_order.resize(num_canvas_tms); + for (int t=0; t TemplateCanvas::SaveCategories(const wxString& title, + const wxString& label, + const wxString& field_default, + vector& undefs) +{ + std::vector new_fields; + if (project->GetNumRecords() != selectable_shps.size()) return new_fields; + vector data(1); + + int cc_ts = cat_data.curr_canvas_tm_step; + int num_cats = cat_data.GetNumCategories(cc_ts); + vector dt(selectable_shps.size()); + + data[0].type = GdaConst::long64_type; + data[0].l_val = &dt; + data[0].label = label; + data[0].field_default = field_default; + data[0].undefined = &undefs; + + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); + for (int i=0, iend=ids.size(); i >& colors) +{ + int cc_ts = cat_data.curr_canvas_tm_step; + int num_cats=cat_data.GetNumCategories(cc_ts); + + for (int cat=0; cat ids_copy; + colors[clr] = ids_copy; + + vector& ids = cat_data.GetIdsRef(cc_ts, cat); + + for (int i=0, iend=ids.size(); i& clrs, + vector& bins) +{ + + if (selectable_shps_type == points) { + shape_type = "POINT"; + } else if (selectable_shps_type == polygons) { + shape_type = "POLYGON"; + } + + int cc_ts = cat_data.curr_canvas_tm_step; + int num_cats=cat_data.GetNumCategories(cc_ts); + + if (num_cats >1) { + for (int cat=0; catapplyScaleTrans(last_scale_trans); } - virtual void SetBrushType(BrushType brush) { brushtype = brush; } virtual BrushType GetBrushType() { return brushtype; } virtual MouseMode GetMouseMode() { return mousemode; } /** Will set the mouse mode and change the mouse cursor */ virtual void SetMouseMode(MouseMode mode); - virtual bool GetFitToWindowMode(); virtual void SetFitToWindowMode(bool mode); - virtual bool GetFixedAspectRatioMode(); virtual void SetFixedAspectRatioMode(bool mode); - virtual void SetDisplayPrecision(int n); - - /** generic function to create and initialized th*e selectable_shps vector - based on a passed-in Project pointer and given an initial canvas - screen size. */ - static std::vector CreateSelShpsFromProj(std::vector& selectable_shps, - Project* project); - + virtual void SetAxisDisplayPrecision(int n, bool fixed_point=false); + /** convert mouse coordiante point to original observation-coordinate points. This is an inverse of the affine transformation that converts data points to screen points. */ virtual wxRealPoint MousePntToObsPnt(const wxPoint &pt); - - void CreateZValArrays(int num_canvas_tms, int num_obs); + virtual wxString GetCategoriesTitle(); - virtual void SaveCategories(const wxString& title, + virtual std::vector SaveCategories(const wxString& title, const wxString& label, const wxString& field_default, std::vector& undefs); - - - virtual void RenderToDC(wxDC &dc, int w, int h); virtual void RenderToSVG(wxDC &dc, int w, int h); - - const wxBitmap* GetLayer0() { return layer0_bm; } - const wxBitmap* GetLayer1() { return layer1_bm; } - const wxBitmap* GetLayer2() { return layer2_bm; } - void deleteLayerBms(); - void resizeLayerBms(int width, int height); - void invalidateBms(); - - void ReDraw(); - + virtual void DrawLayer0(); virtual void DrawLayer1(); virtual void DrawLayer2(); virtual void DrawLayers(); - void DrawPoints(wxGCDC& dc, CatClassifData& cat_data, vector& hs, - double radius, - int alpha = 255, - wxColour fixed_pen_color = *wxWHITE, - bool cross_hatch = false); - void DrawPolygons(wxGCDC& dc, CatClassifData& cat_data, vector& hs, - int alpha = 255, - wxColour fixed_pen_color = *wxWHITE, - bool cross_hatch = false); - void DrawCircles(wxGCDC& dc, CatClassifData& cat_data, vector& hs, - int alpha = 255, - wxColour fixed_pen_color = *wxWHITE, - bool cross_hatch = false); - void DrawLines(wxGCDC& dc, CatClassifData& cat_data, vector& hs, - int alpha = 255, - wxColour fixed_pen_color = *wxWHITE, - bool cross_hatch = false); - + virtual wxBitmap* GetPrintLayer() { return layer2_bm; } - + // should be implemented by inherited classes for drawing on this canvas virtual void PopulateCanvas() = 0; - - int GetMarginLeft() { return last_scale_trans.slack_x;} - int GetMarginRight() { return last_scale_trans.slack_x;} - int GetMarginTop() { return last_scale_trans.slack_y;} - int GetMarginBottom() { return last_scale_trans.slack_y;} - - wxSize GetDrawingSize() { - wxSize sz(last_scale_trans.screen_width - last_scale_trans.slack_x * 2, - last_scale_trans.screen_height - last_scale_trans.slack_y * 2); - return sz; - } - // draw highlighted sel shapes virtual void DrawHighlightedShapes(wxMemoryDC &dc); - // draw unhighlighted sel shapes virtual void DrawSelectableShapes(wxMemoryDC &dc); - virtual void DrawSelectableShapes_dc(wxMemoryDC &dc, bool hl_only=false, bool revert=false); + + virtual wxString GetVariableNames() = 0; + virtual SelectableShpType GetShapeType() {return selectable_shps_type;} + virtual double GetPointRadius() { return point_radius; } + virtual void SetPointRadius(double r); + virtual int GetDisplayPrecision() { return display_precision;} + virtual void SetDisplayPrecision(int prec, bool fixed_point=false); + virtual bool GetDisplayFixedPoint() { return display_precision_fixed_point;} + + // The following 3 functions should be enought to create another + // inherited class (maybe TemplateMultiCanvas : TemplateCanvas + virtual void PlotsPerView(int plots_per_view) {} + virtual void PlotsPerViewOther() {} + virtual void PlotsPerViewAll() {} + + // helper functions + void SetScientificNotation(bool flag); + void SetCategoryDisplayPrecision(int prec, bool fixed_point=false); + const wxBitmap* GetLayer0() { return layer0_bm; } + const wxBitmap* GetLayer1() { return layer1_bm; } + const wxBitmap* GetLayer2() { return layer2_bm; } + void deleteLayerBms(); + void resizeLayerBms(int width, int height); + void invalidateBms(); + void ReDraw(); + void CreateZValArrays(int num_canvas_tms, int num_obs); + + /** generic function to create and initialized th*e selectable_shps vector + based on a passed-in Project pointer and given an initial canvas + screen size. */ + static std::vector CreateSelShpsFromProj(std::vector& selectable_shps, + Project* project); + /** Select all observations in a given category for current + canvas time step. Assumes selectable_shps.size() == num obs */ + void SelectAllInCategory(int category, bool add_to_selection); + static void AppendCustomCategories(wxMenu* menu, CatClassifManager* ccm); + void helper_PaintSelectionOutline(wxDC& dc); + + /** This function is needed to handle the Erase Background WX event. It + does nothing, since we handle the Paint event ourselves and draw the + background and foreground ourselves. */ + void OnEraseBackground(wxEraseEvent& event); + /** This function handles possible WX Mouse Capture Lost events. */ + void OnMouseCaptureLostEvent(wxMouseCaptureLostEvent& event); + void helper_DrawSelectableShapes_dc(wxDC &dc, vector& hs, bool hl_only=false, @@ -301,31 +266,50 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver bool crosshatch= false, bool is_print = false, const wxColour& fixed_pen_color = *wxWHITE); - void helper_DrawSelectableShapes_gc(wxGraphicsContext &gc, vector& hs, bool hl_only=false, bool revert=false, bool crosshatch= false, - int alpha=255); - - virtual wxString GetVariableNames() = 0; - virtual SelectableShpType GetShapeType() {return selectable_shps_type;} - virtual double GetPointRadius() { return point_radius; } - virtual void SetPointRadius(double r); - + int alpha=255); + void DrawPoints(wxGCDC& dc, CatClassifData& cat_data, vector& hs, + double radius, + int alpha = 255, + wxColour fixed_pen_color = *wxWHITE, + bool cross_hatch = false); + void DrawPolygons(wxGCDC& dc, CatClassifData& cat_data, vector& hs, + int alpha = 255, + wxColour fixed_pen_color = *wxWHITE, + bool cross_hatch = false); + void DrawCircles(wxGCDC& dc, CatClassifData& cat_data, vector& hs, + int alpha = 255, + wxColour fixed_pen_color = *wxWHITE, + bool cross_hatch = false); + void DrawLines(wxGCDC& dc, CatClassifData& cat_data, vector& hs, + int alpha = 255, + wxColour fixed_pen_color = *wxWHITE, + bool cross_hatch = false); + + // following 2 functions are deprecated void GetVizInfo(std::map >& colors); void GetVizInfo(wxString& shape_type, std::vector& clrs, std::vector& bins); - - int axis_display_precision; - + int GetMarginLeft() { return last_scale_trans.slack_x;} + int GetMarginRight() { return last_scale_trans.slack_x;} + int GetMarginTop() { return last_scale_trans.slack_y;} + int GetMarginBottom() { return last_scale_trans.slack_y;} + wxSize GetDrawingSize() { + wxSize sz(last_scale_trans.screen_width - last_scale_trans.slack_x * 2, + last_scale_trans.screen_height - last_scale_trans.slack_y * 2); + return sz; + } + protected: - - int MASK_R; - int MASK_G; - int MASK_B; - - wxDouble point_radius; + int MASK_R; + int MASK_G; + int MASK_B; + int display_precision; + bool display_precision_fixed_point; + wxDouble point_radius; bool enable_high_dpi_support; bool is_showing_brush; SelectState selectstate; @@ -335,9 +319,9 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver ScrollBarMode scrollbarmode; GdaScaleTrans last_scale_trans; bool fit_to_window_mode; + double scale_factor; - double scale_factor; - /** highlight_state is a pointer to the Observable HighlightState instance. + /** highlight_state is a pointer to the Observable HighlightState instance. A HightlightState instance is a vector of booleans that keep track of the highlight state for every observation in the currently opened SHP file. This shared state object is the means by which the different @@ -367,7 +351,6 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver // only used when draw_sel_shps_by_z_val is selected std::vector z_val_order; - wxPoint GetActualPos(const wxMouseEvent& event); wxPoint sel_poly_pts[100]; // for UpdateSelectRegion and UpdateSelection int n_sel_poly_pts; // for UpdateSelectRegion and UpdateSelection @@ -386,7 +369,6 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver int prev_scroll_pos_x; int prev_scroll_pos_y; - wxBitmap* faded_layer_bm; // layer1_bm + foreground obs wxBitmap* layer0_bm; // background items + unhighlighted obs wxBitmap* layer1_bm; // layer0_bm + highlighted obs @@ -427,11 +409,9 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver // 0 through GetNumNewlyUnsel()-1 are valid. virtual std::vector& GetNewlyUnselList(); - // helper functions bool _IsShpValid(int idx); - DECLARE_EVENT_TABLE() }; diff --git a/TemplateFrame.cpp b/TemplateFrame.cpp index 6a55eba51..009b1fe0b 100644 --- a/TemplateFrame.cpp +++ b/TemplateFrame.cpp @@ -114,6 +114,40 @@ void TemplateFrame::OnSelectWithLine(wxCommandEvent& event) UpdateOptionMenuItems(); } +void TemplateFrame::OnSelectWithCustom(wxCommandEvent& event) +{ + LOG_MSG("Called TemplateFrame::OnSelectWithCustom"); + if (!template_canvas) return; + template_canvas->SetBrushType(TemplateCanvas::custom_select); + template_canvas->SetMouseMode(TemplateCanvas::select); + UpdateOptionMenuItems(); +} + +void TemplateFrame::OnDisplayStatusBar(wxCommandEvent& event) +{ + DisplayStatusBar(!IsStatusBarVisible()); +} + +TemplateLegend* TemplateFrame::GetTemplateLegend() +{ + return template_legend; +} + +bool TemplateFrame::AllowObservationAddDelete() +{ + return false; +} + +bool TemplateFrame::IsStatusBarVisible() +{ + return is_status_bar_visible; +} + +Project* TemplateFrame::GetProject() +{ + return project; +} + void TemplateFrame::OnSelectionMode(wxCommandEvent& event) { LOG_MSG("Called TemplateFrame::OnSelectionMode"); @@ -156,19 +190,68 @@ void TemplateFrame::OnFixedAspectRatioMode(wxCommandEvent& event) UpdateOptionMenuItems(); } -void TemplateFrame::OnSetDisplayPrecision(wxCommandEvent& event) +void TemplateFrame::OnSetAxisDisplayPrecision(wxCommandEvent& event) { if (!template_canvas) return; - - AxisLabelPrecisionDlg dlg(template_canvas->axis_display_precision, this); - if (dlg.ShowModal () != wxID_OK) - return; + + int display_precision = template_canvas->axis_display_precision; + bool display_fixed_point = template_canvas->axis_display_fixed_point; + + SetDisplayPrecisionDlg dlg(display_precision, display_fixed_point, this); + if (dlg.ShowModal () != wxID_OK) return; + int def_precision = dlg.precision; - template_canvas->SetDisplayPrecision(def_precision); + bool def_fixed_point = dlg.fixed_point; + template_canvas->SetAxisDisplayPrecision(def_precision, def_fixed_point); UpdateOptionMenuItems(); } +void TemplateFrame::OnDisplayPrecision(wxCommandEvent& event) +{ + // display precision for any printed numbers on canvas (not include axes) + if (template_canvas == NULL) return; + + int disp_precision = template_canvas->GetDisplayPrecision(); + bool fixed_point = template_canvas->GetDisplayFixedPoint(); + + SetDisplayPrecisionDlg dlg(disp_precision, fixed_point, this); + if (dlg.ShowModal () != wxID_OK) return; + + disp_precision = dlg.precision; + fixed_point = dlg.fixed_point; + template_canvas->SetDisplayPrecision(disp_precision, fixed_point); + UpdateOptionMenuItems(); +} + +void TemplateFrame::OnLegendDisplayPrecision(wxCommandEvent& event) +{ + int disp_precision = template_canvas->category_disp_precision; + bool fixed_point = template_canvas->category_disp_fixed_point; + + SetDisplayPrecisionDlg dlg(disp_precision, fixed_point, this); + if (dlg.ShowModal () != wxID_OK) return; + disp_precision = dlg.precision; + fixed_point = dlg.fixed_point; + template_canvas->SetCategoryDisplayPrecision(disp_precision, fixed_point); + + if (MapCanvas* canvas = dynamic_cast(template_canvas)) { + canvas->CreateAndUpdateCategories(); + } else if (CartogramNewCanvas* canvas = dynamic_cast(template_canvas)) { + canvas->CreateAndUpdateCategories(); + } else if (CartogramNewCanvas* canvas = dynamic_cast(template_canvas)) { + canvas->CreateAndUpdateCategories(); + } else if (ConditionalMapCanvas* canvas = dynamic_cast(template_canvas)) { + canvas->CreateAndUpdateCategories(); + } else if (PCPCanvas* canvas = dynamic_cast(template_canvas)) { + canvas->CreateAndUpdateCategories(); + } else if (ScatterNewPlotCanvas* canvas = dynamic_cast(template_canvas)) { + canvas->CreateAndUpdateCategories(); + } + template_legend->Recreate(); + UpdateOptionMenuItems(); +} + void TemplateFrame::OnZoomMode(wxCommandEvent& event) { LOG_MSG("Called TemplateFrame::OnZoomMode"); @@ -217,6 +300,9 @@ void TemplateFrame::UpdateOptionMenuItems() GeneralWxUtils::CheckMenuItem(mb, XRCID("ID_SELECT_WITH_LINE"), template_canvas->GetBrushType() == TemplateCanvas::line); + GeneralWxUtils::CheckMenuItem(mb, XRCID("ID_SELECT_WITH_CUSTOM"), + template_canvas->GetBrushType() == + TemplateCanvas::custom_select); GeneralWxUtils::CheckMenuItem(mb, XRCID("ID_SELECTION_MODE"), template_canvas->GetMouseMode() == TemplateCanvas::select); @@ -245,7 +331,8 @@ void TemplateFrame::UpdateContextMenuItems(wxMenu* menu) // Update the checkmarks and enable/disable state for the // following menu items if they were specified for this particular // view in the xrc file. Items that cannot be enable/disabled, - GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_DISPLAY_STATUS_BAR"),IsStatusBarVisible()); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_DISPLAY_STATUS_BAR"), + IsStatusBarVisible()); if (template_canvas == 0) return; // or are not checkable do not appear. GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SELECT_WITH_RECT"), @@ -257,6 +344,9 @@ void TemplateFrame::UpdateContextMenuItems(wxMenu* menu) GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SELECT_WITH_LINE"), template_canvas->GetBrushType() == TemplateCanvas::line); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SELECT_WITH_CUSTOM"), + template_canvas->GetBrushType() == + TemplateCanvas::custom_select); GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SELECTION_MODE"), template_canvas->GetMouseMode() == TemplateCanvas::select); @@ -600,8 +690,7 @@ void TemplateFrame::OnCopyImageToClipboard(wxCommandEvent& event) void TemplateFrame::OnLegendUseScientificNotation(wxCommandEvent& event) { bool flag = template_canvas->useScientificNotation; - - + template_canvas->SetScientificNotation(!flag); if (MapCanvas* canvas = dynamic_cast(template_canvas)) { canvas->CreateAndUpdateCategories(); diff --git a/TemplateFrame.h b/TemplateFrame.h index c4152da24..6a123a24f 100644 --- a/TemplateFrame.h +++ b/TemplateFrame.h @@ -44,26 +44,26 @@ class TemplateFrame: public wxFrame, public FramesManagerObserver, const wxPoint& pos, const wxSize& size, const long style); virtual ~TemplateFrame(); - virtual void MapMenus(); - void RegisterAsActive(const wxString& name, - const wxString& title = "GeoDa"); - void DeregisterAsActive(); static wxString GetActiveName(); static TemplateFrame* GetActiveFrame(); - virtual void OnActivate(wxActivateEvent& event) {} - static bool GetColorFromUser(wxWindow* parent, const wxColour& cur_color, wxColour& ret_color, const wxString& title = _("Choose A Color")); void OnKeyEvent(wxKeyEvent& event); + void DeregisterAsActive(); + void RegisterAsActive(const wxString& name, + const wxString& title = "GeoDa"); + + virtual void MapMenus(); + virtual void OnActivate(wxActivateEvent& event) {} virtual void ExportImage(TemplateCanvas* canvas, const wxString& type); virtual void OnChangeMapTransparency(); virtual void OnSaveCanvasImageAs(wxCommandEvent& event); virtual void OnCopyLegendToClipboard(wxCommandEvent& event); virtual void OnCopyImageToClipboard(wxCommandEvent& event); - virtual void OnLegendUseScientificNotation(wxCommandEvent& event); + virtual void OnLegendDisplayPrecision(wxCommandEvent& event); virtual void OnLegendBackgroundColor(wxCommandEvent& event); virtual void OnCanvasBackgroundColor(wxCommandEvent& event); virtual void OnSelectableFillColor(wxCommandEvent& event); @@ -74,12 +74,14 @@ class TemplateFrame: public wxFrame, public FramesManagerObserver, virtual void OnSelectWithRect(wxCommandEvent& event); virtual void OnSelectWithCircle(wxCommandEvent& event); virtual void OnSelectWithLine(wxCommandEvent& event); + virtual void OnSelectWithCustom(wxCommandEvent& event); virtual void OnSelectionMode(wxCommandEvent& event); virtual void OnResetMap(wxCommandEvent& event); virtual void OnRefreshMap(wxCommandEvent& event); virtual void OnFitToWindowMode(wxCommandEvent& event); virtual void OnFixedAspectRatioMode(wxCommandEvent& event); - virtual void OnSetDisplayPrecision(wxCommandEvent& event); + virtual void OnSetAxisDisplayPrecision(wxCommandEvent& event); + virtual void OnDisplayPrecision(wxCommandEvent& event); virtual void OnZoomMode(wxCommandEvent& event); virtual void OnZoomOutMode(wxCommandEvent& event); virtual void OnPanMode(wxCommandEvent& event); @@ -92,10 +94,8 @@ class TemplateFrame: public wxFrame, public FramesManagerObserver, virtual void OnPlotsPerView(int plots_per_view); virtual void OnPlotsPerViewOther(); virtual void OnPlotsPerViewAll(); - virtual bool IsStatusBarVisible() { return is_status_bar_visible; } - virtual void OnDisplayStatusBar(wxCommandEvent& event) { - DisplayStatusBar(!IsStatusBarVisible()); - } + virtual bool IsStatusBarVisible(); + virtual void OnDisplayStatusBar(wxCommandEvent& event); virtual void DisplayStatusBar(bool show); /** Called by TemplateCanvas to determine if TemplateFrame will generate the Status Bar String. */ @@ -104,10 +104,9 @@ class TemplateFrame: public wxFrame, public FramesManagerObserver, virtual void SetGetStatusBarStringFromFrame(bool get_sb_string); virtual wxString GetUpdateStatusBarString(const std::vector& hover_obs, int total_hover_obs); - virtual Project* GetProject() { return project; } + virtual Project* GetProject(); /** return value can be null */ - virtual TemplateLegend* GetTemplateLegend() { return template_legend; } - + virtual TemplateLegend* GetTemplateLegend(); /** Default Implementation of FramesManagerObserver interface */ virtual void update(FramesManager* o); /** Default Implementation of TableStateObserver interface */ @@ -121,23 +120,20 @@ class TemplateFrame: public wxFrame, public FramesManagerObserver, then return value is true and depends_on_non_simple_groups is ignored. */ virtual bool AllowTimelineChanges(); virtual bool AllowGroupModify(const wxString& grp_nm); - virtual bool AllowObservationAddDelete() { return false; } - + virtual bool AllowObservationAddDelete(); /** Indicate that current view depends on group */ virtual void AddGroupDependancy(const wxString& grp_nm); /** Indicate that current view no longer depends on group */ virtual void RemoveGroupDependancy(const wxString& grp_nm); virtual void ClearAllGroupDependencies(); - virtual void SetDependsOnNonSimpleGroups(bool v); - virtual int GetCurrentCanvasTimeStep(); protected: - wxToolBar* toolbar; static TemplateFrame* activeFrame; static wxString activeFrName; - + + wxToolBar* toolbar; Project* project; TemplateCanvas* template_canvas; TemplateLegend* template_legend; // optional diff --git a/TemplateLegend.cpp b/TemplateLegend.cpp index 014b6c5aa..961a81ee7 100644 --- a/TemplateLegend.cpp +++ b/TemplateLegend.cpp @@ -27,12 +27,17 @@ #include "logger.h" #include "GdaConst.h" +#include "GeneralWxUtils.h" #include "TemplateCanvas.h" #include "TemplateFrame.h" #include "TemplateLegend.h" #include "Explore/MapNewView.h" +/////////////////////////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + PointRadiusDialog::PointRadiusDialog(const wxString & title, int r) : wxDialog(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 160)) { @@ -165,12 +170,9 @@ void GdaLegendLabel::drawMove(wxDC& dc) // // /////////////////////////////////////////////////////////////////////////////////////////////// -const int TemplateLegend::ID_CATEGORY_COLOR = XRCID("IDC_LEGEND_CATEGORY_COLOR"); - IMPLEMENT_ABSTRACT_CLASS(TemplateLegend, wxScrolledWindow) BEGIN_EVENT_TABLE(TemplateLegend, wxScrolledWindow) - EVT_MENU(TemplateLegend::ID_CATEGORY_COLOR, TemplateLegend::OnCategoryColor) EVT_MENU(XRCID("IDC_CHANGE_POINT_RADIUS"), TemplateLegend::OnChangePointRadius) EVT_MOUSE_EVENTS(TemplateLegend::OnEvent) END_EVENT_TABLE() @@ -334,15 +336,35 @@ void TemplateLegend::AddCategoryColorToMenu(wxMenu* menu, int cat_clicked) int c_ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); int num_cats = template_canvas->cat_data.GetNumCategories(c_ts); if (cat_clicked < 0 || cat_clicked >= num_cats) return; - wxString s; - s << _("Color for Category"); - wxString cat_label = template_canvas->cat_data.GetCategoryLabel(c_ts, cat_clicked); - if (!cat_label.IsEmpty()) - s << ": " << cat_label; + if ( template_canvas->GetShapeType() == TemplateCanvas::points) { menu->Prepend(XRCID("IDC_CHANGE_POINT_RADIUS"), _("Change Point Radius"), ""); } - menu->Prepend(ID_CATEGORY_COLOR, s, s); + + wxString s; + s << _("Outline Color for Category"); + wxString cat_label = template_canvas->cat_data.GetCategoryLabel(c_ts, cat_clicked); + if (!cat_label.IsEmpty()) s << ": " << cat_label; + menu->Prepend(XRCID("IDC_LEGEND_CATEGORY_OUTLINE_COLOR"), s, s); + Connect(XRCID("IDC_LEGEND_CATEGORY_OUTLINE_COLOR"), wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(TemplateLegend::OnCategoryOutlineColor)); + + if (GeneralWxUtils::isWindows()) { + s = _("Fill Opacity for Category"); + cat_label = template_canvas->cat_data.GetCategoryLabel(c_ts, cat_clicked); + if (!cat_label.IsEmpty()) s << ": " << cat_label; + menu->Prepend(XRCID("IDC_LEGEND_CATEGORY_FILL_OPACITY"), s, s); + Connect(XRCID("IDC_LEGEND_CATEGORY_FILL_OPACITY"), wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(TemplateLegend::OnCategoryFillOpacity)); + } + + s = _("Fill Color for Category"); + cat_label = template_canvas->cat_data.GetCategoryLabel(c_ts, cat_clicked); + if (!cat_label.IsEmpty()) s << ": " << cat_label; + menu->Prepend(XRCID("IDC_LEGEND_CATEGORY_FILL_COLOR"), s, s); + Connect(XRCID("IDC_LEGEND_CATEGORY_FILL_COLOR"), wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(TemplateLegend::OnCategoryFillColor)); + opt_menu_cat = cat_clicked; } @@ -358,13 +380,19 @@ void TemplateLegend::OnChangePointRadius(wxCommandEvent& event) } } -void TemplateLegend::OnCategoryColor(wxCommandEvent& event) +void TemplateLegend::OnCategoryFillOpacity(wxCommandEvent& event) +{ + // not implemented here + // see MapLegend +} + +void TemplateLegend::OnCategoryFillColor(wxCommandEvent& event) { int c_ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); int num_cats = template_canvas->cat_data.GetNumCategories(c_ts); if (opt_menu_cat < 0 || opt_menu_cat >= num_cats) return; - wxColour col = template_canvas->cat_data.GetCategoryColor(c_ts, opt_menu_cat); + wxColour col = template_canvas->cat_data.GetCategoryBrushColor(c_ts, opt_menu_cat); wxColourData data; data.SetColour(col); data.SetChooseFull(true); @@ -375,12 +403,12 @@ void TemplateLegend::OnCategoryColor(wxCommandEvent& event) } wxColourDialog dialog(this, &data); - dialog.SetTitle(_("Choose Cateogry Color")); + dialog.SetTitle(_("Choose Cateogry Fill Color")); if (dialog.ShowModal() == wxID_OK) { wxColourData retData = dialog.GetColourData(); for (int ts=0; tscat_data.GetCanvasTmSteps(); ts++) { if (num_cats == template_canvas->cat_data.GetNumCategories(ts)) { - template_canvas->cat_data.SetCategoryColor(ts, opt_menu_cat, + template_canvas->cat_data.SetCategoryBrushColor(ts, opt_menu_cat, retData.GetColour()); } } @@ -390,6 +418,38 @@ void TemplateLegend::OnCategoryColor(wxCommandEvent& event) } } +void TemplateLegend::OnCategoryOutlineColor(wxCommandEvent& event) +{ + int c_ts = template_canvas->cat_data.GetCurrentCanvasTmStep(); + int num_cats = template_canvas->cat_data.GetNumCategories(c_ts); + if (opt_menu_cat < 0 || opt_menu_cat >= num_cats) return; + + wxColour col = template_canvas->cat_data.GetCategoryPenColor(c_ts, opt_menu_cat); + wxColourData data; + data.SetColour(col); + data.SetChooseFull(true); + int ki; + for (ki = 0; ki < 16; ki++) { + wxColour colour(ki * 16, ki * 16, ki * 16); + data.SetCustomColour(ki, colour); + } + + wxColourDialog dialog(this, &data); + dialog.SetTitle(_("Choose Cateogry Outline Color")); + if (dialog.ShowModal() == wxID_OK) { + wxColourData retData = dialog.GetColourData(); + for (int ts=0; tscat_data.GetCanvasTmSteps(); ts++) { + if (num_cats == template_canvas->cat_data.GetNumCategories(ts)) { + template_canvas->cat_data.SetCategoryPenColor(ts, opt_menu_cat, + retData.GetColour()); + } + } + template_canvas->invalidateBms(); + template_canvas->Refresh(); + Refresh(); + } +} + void TemplateLegend::OnDraw(wxDC& dc) { if (!template_canvas) @@ -435,11 +495,17 @@ void TemplateLegend::OnDraw(wxDC& dc) } for (int i=0; icat_data.GetCategoryColor(time, i); - if (clr.IsOk()) - dc.SetBrush(clr); + wxColour brush_clr = template_canvas->cat_data.GetCategoryBrushColor(time, i); + wxColour pen_clr = template_canvas->cat_data.GetCategoryPenColor(time, i); + if (brush_clr.IsOk()) + dc.SetBrush(brush_clr); + else + dc.SetBrush(*wxWHITE_BRUSH); + if (pen_clr.IsOk()) + dc.SetPen(pen_clr); else - dc.SetBrush(*wxBLACK_BRUSH); + dc.SetPen(*wxBLACK_PEN); + dc.DrawRectangle(px, cur_y - 8, m_l, m_w); cur_y += d_rect; } @@ -527,14 +593,17 @@ void TemplateLegend::RenderToDC(wxDC& dc, double scale) cur_y = 2* scale + title_sz.GetHeight() + gap; } - dc.SetPen(*wxBLACK_PEN); for (int i=0; icat_data.GetCategoryColor(time, i); - if (clr.IsOk()) { - dc.SetBrush(clr); - } else { - dc.SetBrush(*wxBLACK_BRUSH); - } + wxColour brush_clr = template_canvas->cat_data.GetCategoryBrushColor(time, i); + wxColour pen_clr = template_canvas->cat_data.GetCategoryPenColor(time, i); + if (brush_clr.IsOk()) + dc.SetBrush(brush_clr); + else + dc.SetBrush(*wxWHITE_BRUSH); + if (pen_clr.IsOk()) + dc.SetPen(pen_clr); + else + dc.SetPen(*wxBLACK_PEN); int rect_x = px; int rect_y = cur_y; @@ -546,7 +615,6 @@ void TemplateLegend::RenderToDC(wxDC& dc, double scale) double lbl_x = px + rect_w + gap; double lbl_y = cur_y + 2; dc.DrawText(lbl, lbl_x, lbl_y); - cur_y += d_rect * scale; } diff --git a/TemplateLegend.h b/TemplateLegend.h index 052805266..864ee9f3b 100644 --- a/TemplateLegend.h +++ b/TemplateLegend.h @@ -104,9 +104,12 @@ class TemplateLegend: public wxScrolledWindow int GetDrawingWidth(); int GetDrawingHeight(); void RenderToDC(wxDC& dc, double scale); - void OnCategoryColor(wxCommandEvent& event); - void OnChangePointRadius(wxCommandEvent& event); + void OnChangePointRadius(wxCommandEvent& event); void OnEvent(wxMouseEvent& event); + + virtual void OnCategoryFillColor(wxCommandEvent& event); + virtual void OnCategoryFillOpacity(wxCommandEvent& event); + virtual void OnCategoryOutlineColor(wxCommandEvent& event); virtual void OnDraw(wxDC& dc); wxColour legend_background_color; @@ -127,9 +130,6 @@ class TemplateLegend: public wxScrolledWindow int d_rect; bool all_init; int opt_menu_cat; // last category added to Legend menu - - static const int ID_CATEGORY_COLOR; - bool recreate_labels; std::vector new_order; std::vector labels; diff --git a/VarCalc/WeightsManInterface.h b/VarCalc/WeightsManInterface.h index 82ac28728..a61d18dea 100644 --- a/VarCalc/WeightsManInterface.h +++ b/VarCalc/WeightsManInterface.h @@ -39,7 +39,8 @@ class ProgressDlg; class WeightsManInterface { public: - virtual void GetIds(std::vector& ids) const = 0; + virtual void GetIds(std::vector& ids, + bool allow_internal_weights = false) const = 0; virtual boost::uuids::uuid FindIdByMetaInfo(const WeightsMetaInfo& wmi) const = 0; virtual boost::uuids::uuid FindIdByFilename(const wxString& file) const = 0; virtual boost::uuids::uuid FindIdByTitle(const wxString& title) const = 0; @@ -72,6 +73,7 @@ class WeightsManInterface virtual bool IsValid(boost::uuids::uuid w_uuid) = 0; virtual bool IsBinaryWeights(boost::uuids::uuid w_uuid) = 0; virtual WeightsMetaInfo::WeightTypeEnum GetWeightsType(boost::uuids::uuid w_uuid) = 0; + virtual bool IsInternalUse(boost::uuids::uuid w_uuid) const = 0; }; #endif diff --git a/VarCalc/WeightsMetaInfo.h b/VarCalc/WeightsMetaInfo.h index 4d5c90442..39c8558a7 100644 --- a/VarCalc/WeightsMetaInfo.h +++ b/VarCalc/WeightsMetaInfo.h @@ -27,7 +27,7 @@ struct WeightsMetaInfo { enum WeightTypeEnum { WT_custom, WT_rook, WT_queen, WT_threshold, WT_inverse, WT_kernel, - WT_knn, WT_tree + WT_knn, WT_tree, WT_internal }; enum SymmetryEnum { SYM_unknown, SYM_symmetric, SYM_asymmetric @@ -44,6 +44,67 @@ struct WeightsMetaInfo }; WeightsMetaInfo(); + + wxString filename; // weights file filename if exists + wxString id_var; // if empty, then record order assumed + SymmetryEnum sym_type; + + WeightTypeEnum weights_type; + + // Used by contiguity weights + long order; + bool inc_lower_orders; + + // Used by distance weights + DistanceMetricEnum dist_metric; + DistanceUnitsEnum dist_units; + DistanceValuesEnum dist_values; + + wxString dist_units_str; + + double power; + + // kernel + wxString kernel; + long k; + double bandwidth; + bool is_adaptive_kernel; + bool use_kernel_diagnals; + + wxString dist_var1; // x-coord + wxString dist_var2; // y-coord + // optional time period for x and y. -1 indicates that variable is + // not time-variant. In this case dist_tm1(2) should not be + // written to gda file. + long dist_tm1; + long dist_tm2; + + std::vector dist_multivars; + + // Used by knn + long num_neighbors; // 1 or more. If knn_make_sym then this will be boosted + + // Used by threshold distance + double threshold_val; // any real + + // Sparsity + double sparsity_val; + + // Density + double density_val; + + int num_obs; + + int min_nbrs; + + int max_nbrs; + + double mean_nbrs; + + double median_nbrs; + + double non_zero_percent; + void SetToDefaults(); void SetToCustom(const wxString& id_var); void SetToRook(const wxString& id_var, long order=1, @@ -82,66 +143,6 @@ struct WeightsMetaInfo bool use_kernel_diagnals, wxString dist_var_1 = "", long dist_tm_1 = -1, wxString dist_var_2 = "", long dist_tm_2 = -1); - - wxString filename; // weights file filename if exists - wxString id_var; // if empty, then record order assumed - SymmetryEnum sym_type; - - WeightTypeEnum weights_type; - - // Used by contiguity weights - long order; - bool inc_lower_orders; - - // Used by distance weights - DistanceMetricEnum dist_metric; - DistanceUnitsEnum dist_units; - DistanceValuesEnum dist_values; - - wxString dist_units_str; - - double power; - - // kernel - wxString kernel; - long k; - double bandwidth; - bool is_adaptive_kernel; - bool use_kernel_diagnals; - - wxString dist_var1; // x-coord - wxString dist_var2; // y-coord - // optional time period for x and y. -1 indicates that variable is - // not time-variant. In this case dist_tm1(2) should not be - // written to gda file. - long dist_tm1; - long dist_tm2; - - std::vector dist_multivars; - - // Used by knn - long num_neighbors; // 1 or more. If knn_make_sym then this will be boosted - - // Used by threshold distance - double threshold_val; // any real - - // Sparsity - double sparsity_val; - - // Density - double density_val; - - int num_obs; - - int min_nbrs; - - int max_nbrs; - - double mean_nbrs; - - double median_nbrs; - - double non_zero_percent; wxString ToStr() const; wxString TypeToStr() const; diff --git a/Weights/DistUtils.cpp b/Weights/DistUtils.cpp index 01d36802f..3f9e12225 100644 --- a/Weights/DistUtils.cpp +++ b/Weights/DistUtils.cpp @@ -179,7 +179,7 @@ Gda::Weights DistUtils::CreateKNNWeights(int k, bool is_inverse, int power) for (size_t j=0; j(glMsg) ); diff --git a/internationalization/1_create_geoda_pot.sh b/internationalization/1_create_geoda_pot.sh new file mode 100755 index 000000000..8c2e2ae55 --- /dev/null +++ b/internationalization/1_create_geoda_pot.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# create_geoda_pot.sh +# the first part will use find() command to find _() strings from +find .. \( -name '*.cpp' -o -name '*.h' \) -not -path "../BuildTools/*" | xargs xgettext -d geoda -s --keyword=_ -p ./ -o geoda.pot diff --git a/internationalization/gen_po_from_xrc.py b/internationalization/2_gen_po_from_xrc.py similarity index 94% rename from internationalization/gen_po_from_xrc.py rename to internationalization/2_gen_po_from_xrc.py index 8b029f620..bbbaf6cbe 100644 --- a/internationalization/gen_po_from_xrc.py +++ b/internationalization/2_gen_po_from_xrc.py @@ -22,7 +22,7 @@ def process_xrc(xrcfile): def create_po(txtfiles): - pofile = 'xrc.po' + pofile = 'xrc.pot' en_strings = {} for txtfile in txtfiles: f = open(txtfile) @@ -46,7 +46,7 @@ def create_po(txtfiles): o.flush() o.close() -xrcfiles = ['../rc/menus.xrc', '../rc/dialogs.xrc', '../rc/data_viewer_dialogs.xrc', '../rc/panel.xrc', '../rc/toolbar.xrc'] +xrcfiles = ['../rc/menus.xrc', '../rc/dialogs.xrc', '../rc/data_viewer_dialogs.xrc', '../rc/toolbar.xrc'] txtfiles = [process_xrc(xrcfile) for xrcfile in xrcfiles] create_po(txtfiles) diff --git a/internationalization/3_get_diff_PO.py b/internationalization/3_get_diff_PO.py new file mode 100644 index 000000000..820ec638b --- /dev/null +++ b/internationalization/3_get_diff_PO.py @@ -0,0 +1,44 @@ +#!/usr/bin/python + +from __future__ import print_function +import re +import csv +import sys +import argparse +from po2csv import po2dict, dict2PO + +def getDiffPO(po_file, all_items): + new_items = {} + + # read from po_file + current_items = {} + po2dict(po_file, current_items) + + # use all_items as ground to find diff (than po_file) + msgid_list = all_items.keys() + for msgid in msgid_list: + if msgid not in current_items: + new_items[msgid] = all_items[msgid] + + return new_items + + +parser = argparse.ArgumentParser(description='Get new items by comparing existing PO file (e.g. zh_CN.po, specified using argument --input) with new POT files (geoda.pot and xrc.pot extracted from source code). New msgid with empty msgstr will be written into a new PO file specified by argument --output') +parser.add_argument('pot_files', type=str, nargs='+', help='paths of template POT files') +parser.add_argument('--input', required=True, dest='input_po_file', type=str, help='path of an existing to-be-updated po_file') +parser.add_argument('--output', required=True, dest='output_po_file', help='path of an output po_file') +args = parser.parse_args() + +if __name__ == "__main__": + pot_files = args.pot_files + exist_po = args.input_po_file + output_po = args.output_po_file + + # construct a dictionary from all POT file, + # so that newly added msgid will be included + all_items = {} + for pot in pot_files: + po2dict(pot, all_items) + + new_items = getDiffPO(exist_po, all_items) + dict2PO(new_items, output_po) diff --git a/internationalization/3_updatePO.py b/internationalization/3_updatePO.py new file mode 100644 index 000000000..66f23dfee --- /dev/null +++ b/internationalization/3_updatePO.py @@ -0,0 +1,44 @@ +#!/usr/bin/python + +from __future__ import print_function +import re +import csv +import sys +import argparse +from po2csv import po2dict, dict2PO + +def updatePO(po_file, all_items): + new_items = all_items.copy() + + # read from po_file + current_items = {} + po2dict(po_file, current_items) + + # use all_items as ground + msgid_list = all_items.keys() + for msgid in msgid_list: + if msgid in current_items: + new_items[msgid] = current_items[msgid] + + return new_items + + +parser = argparse.ArgumentParser(description='Update existing PO file (e.g. zh_CN.po, specified using argument --input) using POT files (geoda.pot and xrc.pot extracted from source code. New msgid with empty msgstr will be added into existing PO file and saved into a new file specified by argument --output') +parser.add_argument('pot_files', type=str, nargs='+', help='paths of template POT files') +parser.add_argument('--input', required=True, dest='input_po_file', type=str, help='path of an existing to-be-updated po_file') +parser.add_argument('--output', required=True, dest='output_po_file', help='path of an output po_file') +args = parser.parse_args() + +if __name__ == "__main__": + pot_files = args.pot_files + exist_po = args.input_po_file + output_po = args.output_po_file + + # construct a dictionary from all POT file, + # so that newly added msgid will be included + all_items = {} + for pot in pot_files: + po2dict(pot, all_items) + + all_items = updatePO(exist_po, all_items) + dict2PO(all_items, output_po) diff --git a/internationalization/create_newpo.py b/internationalization/create_newpo.py deleted file mode 100755 index 6eeacb1b2..000000000 --- a/internationalization/create_newpo.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -f = open(sys.argv[1]) -lines = f.readlines() -f.close() - -msgids = {} -for line in lines: - if line[:4] == "msgid": - msgids[line[7:-1]] = True - -o = open(sys.argv[2], 'w') -for id in msgids.keys(): - line = 'msgid "%s"\n' % id - o.write(line) - o.write('msgstr ""\n') - o.write("\n") - -o.close() - \ No newline at end of file diff --git a/internationalization/credentials.json b/internationalization/credentials.json new file mode 100644 index 000000000..6468ff31c --- /dev/null +++ b/internationalization/credentials.json @@ -0,0 +1 @@ +{"installed":{"client_id":"911148186542-n9brf1e9bh4vq07229n3d604t8kenodr.apps.googleusercontent.com","project_id":"quickstart-1557874589303","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"tSA4X8GKgSwkkgPCck5xgzof","redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]}} \ No newline at end of file diff --git a/internationalization/csv2po.py b/internationalization/csv2po.py new file mode 100644 index 000000000..7e46c2f3e --- /dev/null +++ b/internationalization/csv2po.py @@ -0,0 +1,27 @@ +#!/usr/bin/python + +from __future__ import print_function +import re +import sys + +def csv2po(csv_file, po_file): + with open(csv_file) as f, open(po_file, 'w') as o: + for i, line in enumerate(f, 1): + if (i == 0): + continue + line = line.strip() + if (len(line) == 0): + continue + msgid, msgstr, contrib = line.split('`') + line = 'msgid "' + msgid + '"\n' + o.write(line) + line = 'msgstr "' + msgstr + '"\n' + o.write(line) + +if __name__ == "__main__": + if (len(sys.argv) != 3) : + print("Usage: python csv2po.py csv_file po_file") + else: + csv_file, po_file = sys.argv[1:] + if (po_file and csv_file): + csv2po(csv_file, po_file) \ No newline at end of file diff --git a/internationalization/geoda.pot b/internationalization/geoda.pot new file mode 100644 index 000000000..8d497955e --- /dev/null +++ b/internationalization/geoda.pot @@ -0,0 +1,5164 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-05-15 10:50-0700\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../DialogTools/PCASettingsDlg.cpp:276 +msgid "" +"\n" +"\n" +"95% threshold criterion: " +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:272 +msgid "" +"\n" +"\n" +"Cumulative proportion:\n" +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:81 +#: ../ShapeOperations/OGRDatasourceProxy.cpp:343 +msgid "" +"\n" +"\n" +"Details: " +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:280 +msgid "" +"\n" +"\n" +"Eigenvalues:\n" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:275 +msgid "" +"\n" +"\n" +"Kaiser criterion: " +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:269 +msgid "" +"\n" +"\n" +"Proportion of variance:\n" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:351 +msgid "" +"\n" +"\n" +"Squared correlations:\n" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:266 +msgid "" +"\n" +"\n" +"Standard deviation:\n" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:286 +msgid "" +"\n" +"\n" +"Variable Loadings:\n" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:820 +msgid "" +"\n" +"REGRESSION\n" +"----------\n" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:856 +msgid " (isolates in weights are removed)" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:194 +msgid " = 0 at " +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:95 +msgid " BiLISA Cluster Map" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:99 +msgid " BiLISA Significance Map" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:140 +msgid " Bivariate Local Geary Cluster Map" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:149 +msgid " Bivariate LocalGeary Significance Map" +msgstr "" + +#: ../Explore/MapNewView.cpp:1668 ../Explore/ScatterNewPlotView.cpp:705 +msgid " Categories" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:96 +msgid " Differential LISA Cluster Map" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:143 +msgid " Differential Local Geary Cluster Map" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:100 ../Explore/LocalGearyMapNewView.cpp:152 +msgid " Differential Significance Map" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:94 +msgid " LISA Cluster Map" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:98 +msgid " LISA Significance Map" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:137 +msgid " Local Geary Cluster Map" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:146 +msgid " Local Geary Significance Map" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:865 +msgid " already exists. OK to overwrite?" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:115 +msgid " and " +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:109 +msgid " and two time periods: " +msgstr "" + +#: ../Explore/CorrelogramView.cpp:395 +msgid " for obs within distance band " +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:872 +msgid "" +" has duplicate values. Please choose a different ID Variable.\n" +"\n" +"Details:" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:196 +msgid " in range:" +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:312 +msgid " is not supported by GeoDa.\n" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:680 +msgid " km" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:678 +msgid " mi" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:413 +msgid " pairs in distance band " +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:851 +msgid "" +" should contains only numbers/letters as IDs. Please choose a different ID " +"Variable." +msgstr "" + +#: ../Explore/CorrelogramView.cpp:396 ../Explore/CorrelogramView.cpp:414 +msgid " to " +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:264 +#, c-format +msgid "\"%s\" is not a valid p-value. Default p-value (0.01) is used" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:337 ../DialogTools/RedcapDlg.cpp:305 +#: ../DialogTools/SkaterDlg.cpp:351 ../DialogTools/KMeansDlg.cpp:293 +#: ../DialogTools/SpectralClusteringDlg.cpp:445 +#: ../Explore/CorrelParamsDlg.cpp:346 ../Explore/LisaScatterPlotView.cpp:1078 +#: ../Explore/AbstractClusterMap.cpp:628 +#: ../Explore/LocalGearyMapNewView.cpp:846 +#, c-format +msgid "\"%s\" is not a valid seed. Seed unchanged." +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:374 +msgid "" +"\". \n" +"\n" +"Details: Attemp to write a readonly database, or " +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:114 +msgid "# Iterations:" +msgstr "" + +#: ../DialogTools/MDSDlg.cpp:72 ../DialogTools/SpectralClusteringDlg.cpp:163 +msgid "# Max Iteration:" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:120 +msgid "# Neighors:" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:227 ../Explore/CorrelogramView.cpp:772 +msgid "# Pairs" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:419 +msgid "# iterations:\t" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:789 +msgid "# observations" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:700 +#: ../Explore/SimpleScatterPlotCanvas.cpp:271 ../Explore/MapNewView.cpp:2970 +#: ../Explore/MLJCMapNewView.cpp:437 ../Explore/CartogramNewView.cpp:753 +#: ../Explore/ScatterNewPlotView.cpp:1836 ../Explore/BoxNewPlotView.cpp:945 +#: ../Explore/ConditionalMapView.cpp:951 ../Explore/AbstractClusterMap.cpp:412 +#: ../Explore/LocalGearyMapNewView.cpp:606 +#: ../Explore/ConditionalScatterPlotView.cpp:790 +#: ../Explore/GetisOrdMapNewView.cpp:463 ../Explore/GroupingMapView.cpp:430 +#: ../Explore/ConditionalClusterMapView.cpp:1233 +#: ../Explore/ConditionalClusterMapView.cpp:1661 +#: ../Explore/ConditionalClusterMapView.cpp:1877 +msgid "#hover obs " +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:620 ../Explore/SimpleHistCanvas.cpp:666 +#: ../Explore/ConnectivityHistView.cpp:381 ../Explore/HistogramView.cpp:725 +msgid "#obs" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:722 ../Explore/ConnectivityHistView.cpp:437 +#: ../Explore/HistogramView.cpp:781 +msgid "#obs:" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:692 ../Explore/MapNewView.cpp:2913 +#: ../Explore/MapNewView.cpp:2915 ../Explore/MLJCMapNewView.cpp:429 +#: ../Explore/AbstractClusterMap.cpp:404 +#: ../Explore/LocalGearyMapNewView.cpp:598 +#: ../Explore/GetisOrdMapNewView.cpp:455 ../Explore/GroupingMapView.cpp:422 +msgid "#obs=" +msgstr "" + +#: ../DataViewer/TableBase.cpp:525 +msgid "#row=" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:696 ../Explore/PCPNewView.cpp:1070 +#: ../Explore/SimpleScatterPlotCanvas.cpp:238 ../Explore/MapNewView.cpp:2926 +#: ../Explore/MapNewView.cpp:2928 ../Explore/MLJCMapNewView.cpp:433 +#: ../Explore/CartogramNewView.cpp:749 ../Explore/ScatterNewPlotView.cpp:1812 +#: ../Explore/BoxNewPlotView.cpp:911 ../Explore/ConditionalMapView.cpp:935 +#: ../Explore/AbstractClusterMap.cpp:408 +#: ../Explore/LocalGearyMapNewView.cpp:602 +#: ../Explore/ConditionalHistogramView.cpp:928 +#: ../Explore/HistogramView.cpp:1182 +#: ../Explore/ConditionalScatterPlotView.cpp:775 +#: ../Explore/GetisOrdMapNewView.cpp:459 ../Explore/GroupingMapView.cpp:426 +#: ../Explore/ConditionalNewView.cpp:741 +#: ../Explore/ConditionalClusterMapView.cpp:1218 +#: ../Explore/ConditionalClusterMapView.cpp:1431 +#: ../Explore/ConditionalClusterMapView.cpp:1647 +#: ../Explore/ConditionalClusterMapView.cpp:1859 +#: ../DataViewer/TableBase.cpp:527 +msgid "#selected=" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:822 +#, c-format +msgid "% non-zero" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:667 ../Explore/ConnectivityHistView.cpp:382 +#: ../Explore/HistogramView.cpp:726 +#, c-format +msgid "% of total" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:1245 +#, c-format +msgid "%d of %d variables to include" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:1247 +#, c-format +msgid "%d variables to include" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:208 +#, c-format +msgid "%s (Weights: %s)" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:565 +#, c-format +msgid "%s Cluster Map (%d clusters)" +msgstr "" + +#: ../DialogTools/HClusterDlg.cpp:965 +msgid "" +"(Dendrogram is too complex to draw. Please view clustering results in map.)" +msgstr "" + +#: ../DialogTools/FieldNameCorrectionDlg.cpp:140 +#: ../DialogTools/FieldNameCorrectionDlg.cpp:271 +msgid "(Duplicate field name)" +msgstr "" + +#: ../DialogTools/FieldNameCorrectionDlg.cpp:141 +#: ../DialogTools/FieldNameCorrectionDlg.cpp:272 +msgid "(Field name is not valid)" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:136 +msgid "(Gaussian) Sigma:" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:139 ../DialogTools/CsvFieldConfDlg.cpp:141 +msgid "(Optional) First record has field names? " +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:123 ../DialogTools/CsvFieldConfDlg.cpp:125 +msgid "(Optional) Longitude/X:" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:75 ../DialogTools/CsvFieldConfDlg.cpp:77 +msgid "(Optional) You can change the data type for a field:" +msgstr "" + +#: ../Explore/MapNewView.cpp:2127 ../Explore/MapLayerTree.cpp:117 +#: ../Explore/MapLayerTree.cpp:212 +msgid "(Use Sequences)" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:264 +msgid "" +"---\n" +"\n" +"PCA method: " +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:1057 +msgid "" +".\n" +"Enter a seed value to use between\n" +"0 and " +msgstr "" + +#: ../GeoDa.cpp:3218 +msgid "3D Plot" +msgstr "" + +#: ../GeoDa.cpp:3211 +msgid "3D Scatter Plot Variables" +msgstr "" + +#: ../DataViewer/MergeTableDlg.cpp:437 +msgid "A Table-only data source can't be stacked with current data source." +msgstr "" + +#: ../DialogTools/AutoUpdateDlg.cpp:320 +msgid "A newer version of GeoDa is found. Do you want to update to version " +msgstr "" + +#: ../GeoDa.cpp:1498 +msgid "" +"A project file contains extra information not directly stored in the data " +"source such as variable order and grouping." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:401 +msgid "About Precision Threshold" +msgstr "" + +#: ../Project.cpp:1075 +msgid "Add Centroids to Table" +msgstr "" + +#: ../Project.cpp:1036 +msgid "Add Mean Centers to Table" +msgstr "" + +#: ../DialogTools/AddIdVariable.h:34 +msgid "Add New ID Variable" +msgstr "" + +#: ../DataViewer/OGRTable.cpp:1317 +msgid "Add OGR column error. Field type is unknown or not supported." +msgstr "" + +#: ../DataViewer/OGRTable.cpp:183 +msgid "Add OGR column error. Field type is unknown." +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:975 +msgid "Add Time" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:1268 +msgid "" +"Add a name for your group of variables. \n" +"\n" +"You can edit the time period labels for easier interpretation of results." +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:164 +msgid "Add basemap automatically:" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:334 +msgid "Adjust Bubble Size" +msgstr "" + +#: ../DialogTools/AdjustYAxisDlg.h:36 +msgid "Adjust Values of Y Axis" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:526 +msgid "Affinity with Guassian Kernel:\tSigma=" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:116 +msgid "Affinity with K-NN:" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:529 +msgid "Affinity with K-Nearest Neighbors:\tK=" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:132 +msgid "Affinity with Kernel:" +msgstr "" + +#: ../DialogTools/AggregateDlg.cpp:71 +msgid "Aggregate - " +msgstr "" + +#: ../DialogTools/RandomizationDlg.cpp:834 ../Explore/LineChartView.cpp:339 +#: ../Explore/LineChartView.cpp:720 ../Explore/LineChartView.cpp:724 +msgid "All" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:173 +msgid "All Pairs" +msgstr "" + +#: ../GeoDa.cpp:6333 +msgid "All Rights Reserved" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:168 +msgid "Allow a single cluster:" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:153 +msgid "Alpha:" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:236 ../Explore/LowessParamDlg.cpp:47 +msgid "Apply" +msgstr "" + +#: ../GeoDa.cpp:6362 +msgid "April" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:676 +msgid "Arc Distance" +msgstr "" + +#: ../GeoDa.cpp:6370 +msgid "August" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:246 +msgid "Auto Weighting" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:194 ../Explore/CorrelogramView.cpp:224 +#: ../Explore/CorrelogramView.cpp:251 ../Explore/CorrelogramView.cpp:769 +msgid "Autocorr." +msgstr "" + +#: ../Explore/CorrelogramView.cpp:518 +msgid "Autocorr. of " +msgstr "" + +#: ../GeoDa.cpp:3229 +msgid "Average Comparison Chart" +msgstr "" + +#: ../Explore/LineChartView.h:106 +msgid "Averages Chart" +msgstr "" + +#: ../Explore/LowessParamDlg.cpp:54 +msgid "Bandwidth:" +msgstr "" + +#: ../Explore/MapNewView.cpp:3896 ../Explore/MapNewView.cpp:3909 +#: ../Explore/MapNewView.cpp:3921 ../Explore/MapNewView.cpp:3935 +#: ../Explore/MapNewView.cpp:3949 ../GeoDa.cpp:3491 ../GeoDa.cpp:3859 +#: ../GeoDa.cpp:5167 ../GeoDa.cpp:5198 ../GeoDa.cpp:5230 ../GeoDa.cpp:5261 +msgid "Base Variable" +msgstr "" + +#: ../DialogTools/BasemapConfDlg.h:40 +msgid "Basemap Configuration Dialog" +msgstr "" + +#: ../DataViewer/TableState.cpp:206 +#, c-format +msgid "" +"Before add/delete observations, please close the %d view(s) that depend on " +"it." +msgstr "" + +#: ../DataViewer/TableState.cpp:163 +#, c-format +msgid "" +"Before proceed with operation (add/remove, move, or rename), please close %d " +"views that depend on it." +msgstr "" + +#: ../DataViewer/TableState.cpp:185 +#, c-format +msgid "" +"Before you can modify the variable %s, please close the %d view(s) that " +"depend on it." +msgstr "" + +#: ../DialogTools/FieldNewCalcBinDlg.h:44 +msgid "Bivariate" +msgstr "" + +#: ../GeoDa.cpp:3433 +msgid "Bivariate Moran Variable Settings" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:172 +#, c-format +msgid "Bivariate Moran's I (%s): %s and lagged %s" +msgstr "" + +#: ../DialogTools/RandomizationDlg.cpp:77 +msgid "Bonferroni bound:" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:560 +msgid "Both are significant, Spatial Lag Model has been selected." +msgstr "" + +#: ../osm/uiRoadDownload.cpp:57 +msgid "Bottom" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:73 +msgid "Bounding Box" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:495 +msgid "Box Map (Hinge=1.5)" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:496 +msgid "Box Map (Hinge=3.0)" +msgstr "" + +#: ../Explore/BoxNewPlotView.cpp:455 ../Explore/BoxNewPlotView.h:121 +#: ../GeoDa.cpp:3190 +msgid "Box Plot" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:1122 +msgid "" +"Breaks with same values were created. Please choose a smaller categories, or " +"manually edit the break values." +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:519 +#, c-format +msgid "Bubble Chart - x: %s, y: %s, size: %s, %s" +msgstr "" + +#: ../GeoDa.cpp:3131 +msgid "Bubble Chart Variables" +msgstr "" + +#: ../GeoDa.cpp:3133 +msgid "Bubble Size" +msgstr "" + +#: ../Explore/ScatterNewPlotView.h:51 +msgid "Bubble Size Adjust Dialog" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:116 +msgid "Buffer query area:" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:334 ../DialogTools/CsvFieldConfDlg.cpp:334 +msgid "CSV Configuration Warning" +msgstr "" + +#: ../osm/CsvFieldConfDlg.h:42 +msgid "CSV File Configuration" +msgstr "" + +#: ../GeoDa.cpp:2432 +msgid "Calculator" +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:583 +#: ../DialogTools/ConnectDatasourceDlg.cpp:1167 ../GeoDa.cpp:1178 +msgid "Can't connect to datasource: " +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:391 +#, c-format +msgid "Can't create layer %s with empty field (%s) name." +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:321 +msgid "" +"Can't create output OGR driver. \n" +"\n" +"Details:" +msgstr "" + +#: ../DialogTools/CreateGridDlg.cpp:273 +msgid "" +"Can't get bounding box information from this datasource. Please try another " +"datasource." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:304 +#, c-format +msgid "" +"Can't get datasource type from: %s\n" +"\n" +"Please select datasource supported by GeoDa or add extension to file " +"datasource." +msgstr "" + +#: ../DialogTools/DatasourceDlg.cpp:240 +msgid "" +"Can't get layers from unknown datasource. Please complete the datasource " +"fields." +msgstr "" + +#: ../Explore/MapNewView.cpp:4044 +msgid "Can't save Thiessen polygons" +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:372 +msgid "Can't write/create layer \"" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:162 ../osm/uiRoadDownload.cpp:111 +#: ../DialogTools/FieldNameCorrectionDlg.cpp:646 +#: ../DialogTools/FieldNameCorrectionDlg.cpp:693 +#: ../DialogTools/CsvFieldConfDlg.cpp:164 ../DialogTools/ReportBugDlg.cpp:233 +#: ../DialogTools/AutoUpdateDlg.cpp:343 +msgid "Cancel" +msgstr "" + +#: ../Explore/CartogramNewView.cpp:1234 ../Explore/ScatterNewPlotView.cpp:2245 +#: ../TemplateFrame.cpp:552 +msgid "Canvas Layout Preview" +msgstr "" + +#: ../Explore/CartogramNewView.cpp:365 ../Explore/CartogramNewView.h:167 +#: ../GeoDa.cpp:2999 +msgid "Cartogram" +msgstr "" + +#: ../GeoDa.cpp:2990 +msgid "Cartogram Variables" +msgstr "" + +#: ../DialogTools/NumCategoriesDlg.h:37 +msgid "Categories" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:1696 +#, c-format +msgid "" +"Categories \"%s\" is currently in use by another view. Please close or " +"change all views using this custom categories before deleting." +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:1708 +msgid "Categories of " +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:909 ../DialogTools/CatClassifDlg.cpp:1604 +#: ../DialogTools/CatClassifDlg.cpp:1639 +#, c-format +msgid "" +"Categories title \"%s\" already exists. Please choose a different title." +msgstr "" + +#: ../DialogTools/CatClassifDlg.h:299 ../DialogTools/CatClassifDlg.cpp:282 +msgid "Category Editor" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:945 +msgid "Centroid (X)" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:947 +msgid "Centroid (Y)" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:216 +msgid "Change" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:1595 +msgid "Change Categories Title" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:756 +msgid "Change Fill Color" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:757 +msgid "Change Outline Color" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:534 ../Explore/MapLayerTree.cpp:776 +#: ../TemplateLegend.cpp:341 ../TemplateLegend.cpp:374 +msgid "Change Point Radius" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:157 ../DialogTools/RedcapDlg.cpp:162 +#: ../DialogTools/SkaterDlg.cpp:128 ../DialogTools/KMeansDlg.cpp:123 +#: ../DialogTools/SpectralClusteringDlg.cpp:215 +msgid "Change Seed" +msgstr "" + +#: ../ShapeOperations/OGRLayerProxy.cpp:381 +#, c-format +msgid "" +"Change field properties (%s) failed.\n" +"\n" +"Details: %s" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:1592 +#, c-format +msgid "Change title \"%s\" to" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:518 +#, c-format +msgid "" +"Change variable type for \"%s\" has failed. Please check all values are " +"valid for conversion." +msgstr "" + +#: ../DialogTools/ReportBugDlg.h:73 +msgid "Check Bug Report on Github" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:641 ../DialogTools/RegressionDlg.cpp:697 +msgid "Checking Symmetry..." +msgstr "" + +#: ../TemplateFrame.h:52 +msgid "Choose A Color" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:1559 ../GeneralWxUtils.cpp:465 +msgid "Choose Cateogry Color" +msgstr "" + +#: ../Explore/MapNewView.cpp:3018 ../TemplateLegend.cpp:406 +msgid "Choose Cateogry Fill Color" +msgstr "" + +#: ../Explore/MapNewView.cpp:3084 ../TemplateLegend.cpp:438 +msgid "Choose Cateogry Outline Color" +msgstr "" + +#: ../DialogTools/SelectWeightsDlg.h:45 ../GeoDa.h:83 +msgid "Choose Weights" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:387 +msgid "Choose Weights File" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:264 +#: ../DialogTools/CreatingWeightDlg.cpp:1428 +msgid "Choose an output weights file name." +msgstr "" + +#: ../DialogTools/SaveSelectionDlg.cpp:392 +msgid "" +"Chosen field is not a numeric type. Please select a numeric type field." +msgstr "" + +#: ../DialogTools/RangeSelectionDlg.cpp:514 +msgid "Chosen field is not a numeric type. Please select a numeric type field." +msgstr "" + +#: ../DataViewer/MergeTableDlg.cpp:584 ../DataViewer/MergeTableDlg.cpp:796 +#, c-format +msgid "" +"Chosen key field '%s' s a time variant. Please choose a non-time variant " +"field as key." +msgstr "" + +#: ../DialogTools/DissolveDlg.cpp:266 ../DialogTools/AggregateDlg.cpp:270 +msgid "Chosen key field is not valid. Please select another key field" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:1557 +msgid "Chow test for sel/unsel regression subsets: " +msgstr "" + +#: ../GeoDa.cpp:2991 +msgid "Circle Color" +msgstr "" + +#: ../GeoDa.cpp:2991 +msgid "Circle Size" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:744 +msgid "Clear Highlight Association" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:846 +msgid "Click RegressionDlg::OnSaveToTxtFileClick" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:838 +msgid "Click RegressionDlg::OnViewResultsClick" +msgstr "" + +#: ../DialogTools/MultiVarSettingsDlg.cpp:120 +#: ../DialogTools/PreferenceDlg.cpp:415 ../DialogTools/MaxpDlg.cpp:185 +#: ../DialogTools/PCASettingsDlg.cpp:103 ../DialogTools/RedcapDlg.cpp:193 +#: ../DialogTools/MDSDlg.cpp:106 ../DialogTools/SaveToTableDlg.cpp:153 +#: ../DialogTools/VariableSettingsDlg.cpp:145 ../DialogTools/SkaterDlg.cpp:159 +#: ../DialogTools/HDBScanDlg.cpp:213 ../DialogTools/KMeansDlg.cpp:177 +#: ../DialogTools/SpatialJoinDlg.cpp:435 ../DialogTools/HClusterDlg.cpp:202 +#: ../DialogTools/SpectralClusteringDlg.cpp:276 +#: ../DialogTools/RandomizationDlg.cpp:99 ../Explore/ColocationMapView.cpp:173 +#: ../Explore/MapNewView.cpp:116 ../Explore/MapLayerTree.cpp:69 +#: ../Explore/MapLayoutView.cpp:62 ../Explore/MapLayoutView.cpp:384 +#: ../Explore/GroupingMapView.cpp:73 ../TemplateLegend.cpp:64 +msgid "Close" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:684 ../DialogTools/RedcapDlg.cpp:665 +#: ../DialogTools/SkaterDlg.cpp:680 ../DialogTools/HClusterDlg.cpp:354 +msgid "Cluster Map " +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:1073 +msgid "Cluster centers:" +msgstr "" + +#: ../GeoDa.cpp:4097 +msgid "" +"Co-location Join Count only applies to co-location case. The selected " +"variables have no co-location. Please change your selection, or use " +"Univariate/Bivariate Local Join Count." +msgstr "" + +#: ../Explore/ColocationMapView.cpp:521 +msgid "Co-location Map" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:600 +msgid "Co-location Map: " +msgstr "" + +#: ../Explore/ColocationMapView.cpp:54 +msgid "Co-location Settings" +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:61 +#: ../Explore/ConditionalClusterMapView.cpp:1788 +msgid "Colocation Cluster" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:422 ../DialogTools/CsvFieldConfDlg.cpp:422 +msgid "Column Name" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:90 +msgid "Components:" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:859 +msgid "Conditional Co-location Map Variables" +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:926 ../Explore/GetisOrdMapNewView.cpp:1066 +msgid "Conditional G Cluster Map Variables" +msgstr "" + +#: ../Explore/ConditionalClusterMapView.h:137 +msgid "Conditional GetisOrd Map" +msgstr "" + +#: ../Explore/ConditionalHistogramView.h:134 ../GeoDa.cpp:2955 +msgid "Conditional Histogram" +msgstr "" + +#: ../GeoDa.cpp:2946 +msgid "Conditional Histogram Variables" +msgstr "" + +#: ../Explore/ConditionalClusterMapView.h:128 +msgid "Conditional LISA Map" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:342 +msgid "Conditional LISA Map Variables" +msgstr "" + +#: ../Explore/ConditionalClusterMapView.h:145 +msgid "Conditional Local Geary Map" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:1135 +msgid "Conditional Local Geary Map Variables" +msgstr "" + +#: ../Explore/ConditionalClusterMapView.h:153 +msgid "Conditional Local Join Count Map" +msgstr "" + +#: ../Explore/ConditionalScatterPlotView.h:120 +#: ../Explore/ConditionalMapView.cpp:290 ../Explore/ConditionalMapView.h:118 +#: ../Explore/ConditionalNewView.h:159 +#: ../Explore/ConditionalClusterMapView.cpp:153 ../GeoDa.cpp:2933 +msgid "Conditional Map" +msgstr "" + +#: ../GeoDa.cpp:2923 +msgid "Conditional Map Variables" +msgstr "" + +#: ../GeoDa.cpp:2979 +msgid "Conditional Scatter Plot" +msgstr "" + +#: ../GeoDa.cpp:2968 +msgid "Conditional Scatter Plot Variables" +msgstr "" + +#: ../Explore/MapNewView.cpp:3649 ../Explore/MapNewView.cpp:3662 +msgid "Connectivity" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:88 ../DialogTools/WeightsManDlg.cpp:342 +msgid "Connectivity Graph" +msgstr "" + +#: ../Explore/ConnectivityHistView.h:124 +msgid "Connectivity Histogram" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:85 ../DialogTools/WeightsManDlg.cpp:228 +msgid "Connectivity Map" +msgstr "" + +#: ../Explore/ConnectivityMapView.cpp:402 +msgid "Connectivity Map - " +msgstr "" + +#: ../DialogTools/Bnd2ShpDlg.h:31 ../DialogTools/Bnd2ShpDlg.h:37 +msgid "Convert Boundary to SHP" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:131 +msgid "Cooling Rate:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:589 +msgid "" +"Cooling rate for Simulated Annealing algorithm has to be a float number " +"between 0 and 1 (e.g. 0.85)." +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:429 +msgid "Cooling rate:" +msgstr "" + +#: ../GeneralWxUtils.cpp:50 +msgid "Copy" +msgstr "" + +#: ../GeoDa.cpp:6326 +#, c-format +msgid "Copyright (C) 2011-%d by Luc Anselin" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:506 ../Explore/CorrelogramView.cpp:515 +#: ../GeoDa.cpp:3260 +msgid "Correlogram" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:38 +msgid "Correlogram Parameters" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:361 +msgid "Correlogram Parameters Help" +msgstr "" + +#: ../DataViewer/DataViewerAddColDlg.cpp:372 +msgid "Could not create a new variable. Possibly a read-only data source." +msgstr "" + +#: ../DialogTools/SaveToTableDlg.cpp:236 +msgid "" +"Could not determine which Field Choice was selected. Please report this " +"error." +msgstr "" + +#: ../DialogTools/SaveToTableDlg.cpp:258 +msgid "" +"Could not determine which Time Choice was selected. Please report this error." +msgstr "" + +#: ../GeoDa.cpp:1285 ../GeoDa.cpp:1287 +msgid "Could not initialize new project." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:75 +msgid "Create" +msgstr "" + +#: ../TemplateCanvas.cpp:1777 ../DialogTools/CatClassifDlg.cpp:2513 +#: ../Explore/PCPNewView.cpp:1243 ../Explore/MapNewView.cpp:3527 +#: ../Explore/ConditionalMapView.cpp:170 ../Explore/HistogramView.cpp:251 +#: ../GeoDa.cpp:677 ../GeoDa.cpp:2168 +msgid "Create New Custom" +msgstr "" + +#: ../GeoDa.cpp:1499 +msgid "Create Project File Now?" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:2286 +msgid "Create Weights" +msgstr "" + +#: ../TemplateCanvas.cpp:1778 ../DialogTools/CatClassifDlg.cpp:2513 +#: ../Explore/PCPNewView.cpp:1243 ../Explore/MapNewView.cpp:3528 +#: ../Explore/ConditionalMapView.cpp:171 ../GeoDa.cpp:678 ../GeoDa.cpp:2168 +msgid "Create new custom categories classification." +msgstr "" + +#: ../DialogTools/CreateGridDlg.h:34 ../DialogTools/CreateGridDlg.h:40 +msgid "Creating Grid" +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:310 +msgid "Current OGR dirver " +msgstr "" + +#: ../GeneralWxUtils.cpp:560 +#, c-format +msgid "Current Opacity: %.2f" +msgstr "" + +#: ../Explore/MapNewView.cpp:108 ../Explore/MapNewView.cpp:131 +#: ../GeneralWxUtils.cpp:584 +#, c-format +msgid "Current Transparency: %.2f" +msgstr "" + +#: ../DialogTools/FieldNameCorrectionDlg.cpp:155 +msgid "Current field name:" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:204 +msgid "" +"Current layer has already been associated with selected layer. Please select " +"another layer to associate with." +msgstr "" + +#: ../Explore/CatClassification.cpp:1997 +msgid "Custom" +msgstr "" + +#: ../TemplateCanvas.cpp:1766 ../DialogTools/CatClassifDlg.cpp:2463 +#: ../DialogTools/CatClassifDlg.cpp:2499 ../Explore/PCPNewView.cpp:1232 +#: ../Explore/MapNewView.cpp:3516 ../Explore/ConditionalMapView.cpp:160 +#: ../GeoDa.cpp:2154 +msgid "Custom Breaks" +msgstr "" + +#: ../GeneralWxUtils.cpp:49 +msgid "Cut" +msgstr "" + +#: ../Explore/LineChartView.cpp:2338 +msgid "D.F." +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:98 ../DialogTools/CsvFieldConfDlg.cpp:100 +msgid "Data Preview - number of preview records:" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:423 ../DialogTools/CsvFieldConfDlg.cpp:423 +msgid "Data Type" +msgstr "" + +#: ../DataViewer/DataSource.cpp:418 +#, c-format +msgid "" +"Data source (%s) doesn't exist. Please check the project configuration file." +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:942 +msgid "Database port is empty. Please input one." +msgstr "" + +#: ../DialogTools/SaveAsDlg.cpp:114 +msgid "Datasource in project is not valid." +msgstr "" + +#: ../DialogTools/SaveAsDlg.cpp:198 +msgid "Datasource path is empty." +msgstr "" + +#: ../DialogTools/FieldNewCalcDateTimeDlg.h:44 +msgid "Date/Time" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:383 +msgid "Date/Time formats (using comma to separate formats):" +msgstr "" + +#: ../GeoDa.cpp:6378 +msgid "December" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:391 +msgid "Default displayed decimal places in Table:" +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:509 ../GeneralWxUtils.cpp:52 +msgid "Delete" +msgstr "" + +#: ../Explore/LowessParamDlg.cpp:78 +msgid "Delta Factor:" +msgstr "" + +#: ../DialogTools/HClusterDlg.cpp:217 +msgid "Dendrogram" +msgstr "" + +#: ../GeoDa.cpp:2972 +msgid "Dependent Var (y-axis)" +msgstr "" + +#: ../GeoDa.cpp:3111 +msgid "Dependent Var Y" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:977 +msgid "Diff Values" +msgstr "" + +#: ../Explore/LineChartView.cpp:138 +msgid "Difference-in-Means Test:" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:55 +msgid "Differential Moran Variable Settings" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:178 +#, c-format +msgid "Differential Moran's I (%s): %s - %s" +msgstr "" + +#: ../GeoDa.cpp:3361 ../GeoDa.cpp:3785 +msgid "" +"Differential Moran's I tests whether the change in a variable over time is " +"spatially correlated.\n" +"\n" +"Please first group variables by time period: Select Time --> Time Editor." +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:285 +msgid "Disable auto upgrade:" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:278 +msgid "Disable crash detection for bug report:" +msgstr "" + +#: ../DialogTools/DissolveDlg.cpp:70 +msgid "Dissolve - " +msgstr "" + +#: ../GeoDa.cpp:2596 +msgid "Dissolve does not work with Table only datasource." +msgstr "" + +#: ../GeoDa.cpp:2603 +msgid "Dissolve only works on polygon dataset." +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:142 ../DialogTools/RedcapDlg.cpp:147 +#: ../DialogTools/MDSDlg.cpp:89 ../DialogTools/SkaterDlg.cpp:114 +#: ../DialogTools/HDBScanDlg.cpp:177 ../DialogTools/KMeansDlg.cpp:149 +#: ../DialogTools/HClusterDlg.cpp:161 +#: ../DialogTools/SpectralClusteringDlg.cpp:246 +msgid "Distance Function:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:432 ../DialogTools/RedcapDlg.cpp:382 +#: ../DialogTools/KMeansDlg.cpp:344 ../DialogTools/HClusterDlg.cpp:460 +#: ../DialogTools/SpectralClusteringDlg.cpp:536 +msgid "Distance function:\t" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:96 +msgid "Distance:" +msgstr "" + +#: ../Explore/LineChartView.cpp:2333 ../Explore/LineChartView.cpp:2367 +msgid "Do Means Differ? (ANOVA)" +msgstr "" + +#: ../Explore/LineChartView.cpp:1557 +msgid "" +"Do you want to save the results of Diff-in-Diff test?\n" +"\n" +"Note: the results can only be saved into an external data file, due to the " +"change of cross-sectional observations in a space-time context." +msgstr "" + +#: ../GeoDa.cpp:872 +msgid "Do you want to save your data?" +msgstr "" + +#: ../Explore/VarsChooserDlg.cpp:75 +msgid "Down" +msgstr "" + +#: ../osm/uiRoadDownload.h:15 ../osm/uiRoadDownload.h:19 +msgid "Download OSM Roads" +msgstr "" + +#: ../DialogTools/AutoUpdateDlg.cpp:403 +msgid "Downloading updates..." +msgstr "" + +#: ../Project.cpp:907 +msgid "Duplicate IDs" +msgstr "" + +#: ../Project.cpp:846 +msgid "Duplicate Thiessen Polygons Found" +msgstr "" + +#: ../Explore/MapNewView.cpp:4043 +msgid "" +"Duplicate Thiessen polygons exist due to duplicate or near-duplicate map " +"points. Please try to export current dataset without duplicates." +msgstr "" + +#: ../Project.cpp:845 +msgid "" +"Duplicate Thiessen polygons exist due to duplicate or near-duplicate map " +"points. Press OK to save duplicate polygon ids to Table." +msgstr "" + +#: ../DialogTools/SaveToTableDlg.cpp:368 +msgid "Duplicate variable names specified." +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:175 +#, c-format +msgid "Emp Bayes Rate Std Moran's I (%s): %s / %s" +msgstr "" + +#: ../GeoDa.cpp:3490 +msgid "Empirical Bayes Rate Standardization Variables" +msgstr "" + +#: ../Explore/MapNewView.cpp:3920 ../GeoDa.cpp:5197 +msgid "Empirical Bayes Smoothed Variable Settings" +msgstr "" + +#: ../Explore/MapNewView.cpp:3948 ../GeoDa.cpp:5260 +msgid "Empirical Spatial Rate Smoothed Variable Settings" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:271 +msgid "Enable High DPI/Retina support (Mac only):" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:157 +msgid "Enable transparency setup of category color in map (Windows only):" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:320 ../DialogTools/RedcapDlg.cpp:288 +#: ../DialogTools/SkaterDlg.cpp:334 ../DialogTools/KMeansDlg.cpp:276 +#: ../DialogTools/SpectralClusteringDlg.cpp:428 +#: ../DialogTools/RegressionDlg.cpp:251 ../Explore/CorrelParamsDlg.cpp:329 +#: ../Explore/LisaScatterPlotView.cpp:1066 +#: ../Explore/AbstractClusterMap.cpp:617 +#: ../Explore/LocalGearyMapNewView.cpp:832 +msgid "Enter a seed value" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:313 ../DialogTools/RedcapDlg.cpp:281 +#: ../DialogTools/SkaterDlg.cpp:327 ../DialogTools/KMeansDlg.cpp:269 +#: ../DialogTools/SpectralClusteringDlg.cpp:421 +#: ../Explore/CorrelParamsDlg.cpp:322 +msgid "Enter a seed value for random number generator:" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:499 +#: ../Explore/CatClassification.cpp:1976 +msgid "Equal Intervals" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:203 ../ShapeOperations/WeightUtils.cpp:182 +#: ../ShapeOperations/WeightUtils.cpp:236 +#: ../ShapeOperations/WeightUtils.cpp:253 +#: ../ShapeOperations/WeightUtils.cpp:261 +#: ../ShapeOperations/WeightUtils.cpp:286 +#: ../ShapeOperations/WeightUtils.cpp:324 +#: ../ShapeOperations/WeightUtils.cpp:359 +#: ../ShapeOperations/WeightUtils.cpp:449 +#: ../ShapeOperations/WeightUtils.cpp:486 +#: ../ShapeOperations/WeightUtils.cpp:502 +#: ../ShapeOperations/WeightUtils.cpp:510 +#: ../ShapeOperations/WeightUtils.cpp:536 +#: ../ShapeOperations/WeightUtils.cpp:599 +#: ../ShapeOperations/WeightUtils.cpp:697 +#: ../ShapeOperations/WeightUtils.cpp:737 +#: ../ShapeOperations/WeightUtils.cpp:748 +#: ../ShapeOperations/WeightUtils.cpp:756 +#: ../ShapeOperations/WeightUtils.cpp:768 +#: ../ShapeOperations/WeightUtils.cpp:826 ../DialogTools/ExportDataDlg.cpp:242 +#: ../DialogTools/ExportDataDlg.cpp:249 ../DialogTools/ExportDataDlg.cpp:490 +#: ../DialogTools/ConnectDatasourceDlg.cpp:584 +#: ../DialogTools/ConnectDatasourceDlg.cpp:710 +#: ../DialogTools/ConnectDatasourceDlg.cpp:848 +#: ../DialogTools/ConnectDatasourceDlg.cpp:853 +#: ../DialogTools/ConnectDatasourceDlg.cpp:1168 +#: ../DialogTools/FieldNewCalcSpecialDlg.cpp:112 +#: ../DialogTools/FieldNewCalcSpecialDlg.cpp:130 +#: ../DialogTools/MultiVarSettingsDlg.cpp:228 +#: ../DialogTools/DissolveDlg.cpp:241 ../DialogTools/DissolveDlg.cpp:267 +#: ../DialogTools/DissolveDlg.cpp:355 ../DialogTools/MaxpDlg.cpp:339 +#: ../DialogTools/MaxpDlg.cpp:461 ../DialogTools/MaxpDlg.cpp:469 +#: ../DialogTools/MaxpDlg.cpp:511 ../DialogTools/MaxpDlg.cpp:520 +#: ../DialogTools/MaxpDlg.cpp:556 ../DialogTools/MaxpDlg.cpp:581 +#: ../DialogTools/MaxpDlg.cpp:590 ../DialogTools/RangeSelectionDlg.cpp:271 +#: ../DialogTools/RangeSelectionDlg.cpp:515 +#: ../DialogTools/PCASettingsDlg.cpp:244 +#: ../DialogTools/FieldNewCalcUniDlg.cpp:110 +#: ../DialogTools/FieldNewCalcUniDlg.cpp:122 +#: ../DialogTools/FieldNewCalcUniDlg.cpp:132 +#: ../DialogTools/FieldNewCalcUniDlg.cpp:250 +#: ../DialogTools/FieldNewCalcUniDlg.cpp:268 +#: ../DialogTools/FieldNewCalcUniDlg.cpp:279 ../DialogTools/RedcapDlg.cpp:307 +#: ../DialogTools/RedcapDlg.cpp:469 ../DialogTools/RedcapDlg.cpp:477 +#: ../DialogTools/RedcapDlg.cpp:486 ../DialogTools/VarGroupingEditorDlg.cpp:493 +#: ../DialogTools/VarGroupingEditorDlg.cpp:1304 +#: ../DialogTools/AddIdVariable.cpp:79 ../DialogTools/AddIdVariable.cpp:90 +#: ../DialogTools/AddIdVariable.cpp:107 ../DialogTools/SaveToTableDlg.cpp:175 +#: ../DialogTools/SaveToTableDlg.cpp:237 ../DialogTools/SaveToTableDlg.cpp:259 +#: ../DialogTools/SaveToTableDlg.cpp:351 ../DialogTools/SaveToTableDlg.cpp:369 +#: ../DialogTools/SaveSelectionDlg.cpp:296 +#: ../DialogTools/SaveSelectionDlg.cpp:394 +#: ../DialogTools/FieldNewCalcDateTimeDlg.cpp:105 +#: ../DialogTools/FieldNewCalcDateTimeDlg.cpp:117 +#: ../DialogTools/FieldNewCalcDateTimeDlg.cpp:127 +#: ../DialogTools/VariableSettingsDlg.cpp:878 +#: ../DialogTools/VariableSettingsDlg.cpp:890 +#: ../DialogTools/VariableSettingsDlg.cpp:910 +#: ../DialogTools/VariableSettingsDlg.cpp:929 +#: ../DialogTools/VariableSettingsDlg.cpp:947 +#: ../DialogTools/AbstractClusterDlg.cpp:418 +#: ../DialogTools/AbstractClusterDlg.cpp:577 +#: ../DialogTools/AbstractClusterDlg.cpp:618 +#: ../DialogTools/AbstractClusterDlg.cpp:720 +#: ../DialogTools/FieldNewCalcBinDlg.cpp:109 +#: ../DialogTools/FieldNewCalcBinDlg.cpp:127 +#: ../DialogTools/FieldNewCalcBinDlg.cpp:140 ../DialogTools/SkaterDlg.cpp:353 +#: ../DialogTools/SkaterDlg.cpp:459 ../DialogTools/SkaterDlg.cpp:467 +#: ../DialogTools/SkaterDlg.cpp:508 ../DialogTools/ExportCsvDlg.cpp:100 +#: ../DialogTools/ExportCsvDlg.cpp:118 ../DialogTools/FieldNewCalcLagDlg.cpp:99 +#: ../DialogTools/FieldNewCalcLagDlg.cpp:106 +#: ../DialogTools/FieldNewCalcLagDlg.cpp:113 +#: ../DialogTools/FieldNewCalcLagDlg.cpp:130 +#: ../DialogTools/FieldNewCalcLagDlg.cpp:165 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:114 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:123 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:130 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:137 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:155 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:164 +#: ../DialogTools/AggregateDlg.cpp:244 ../DialogTools/AggregateDlg.cpp:271 +#: ../DialogTools/AggregateDlg.cpp:346 ../DialogTools/HDBScanDlg.cpp:532 +#: ../DialogTools/WeightsManDlg.cpp:291 ../DialogTools/WeightsManDlg.cpp:396 +#: ../DialogTools/WeightsManDlg.cpp:446 ../DialogTools/WeightsManDlg.cpp:452 +#: ../DialogTools/WeightsManDlg.cpp:458 ../DialogTools/WeightsManDlg.cpp:464 +#: ../DialogTools/WeightsManDlg.cpp:469 ../DialogTools/WeightsManDlg.cpp:499 +#: ../DialogTools/WeightsManDlg.cpp:507 ../DialogTools/WeightsManDlg.cpp:558 +#: ../DialogTools/CatClassifDlg.cpp:910 ../DialogTools/CatClassifDlg.cpp:1123 +#: ../DialogTools/CatClassifDlg.cpp:1606 ../DialogTools/CatClassifDlg.cpp:1641 +#: ../DialogTools/CatClassifDlg.cpp:1698 +#: ../DialogTools/RegressionReportDlg.cpp:170 ../DialogTools/KMeansDlg.cpp:295 +#: ../DialogTools/KMeansDlg.cpp:364 ../DialogTools/KMeansDlg.cpp:486 +#: ../DialogTools/SaveAsDlg.cpp:115 ../DialogTools/SaveAsDlg.cpp:250 +#: ../DialogTools/CreatingWeightDlg.cpp:1185 +#: ../DialogTools/CreatingWeightDlg.cpp:1335 +#: ../DialogTools/CreatingWeightDlg.cpp:1377 +#: ../DialogTools/CreatingWeightDlg.cpp:1391 +#: ../DialogTools/CreatingWeightDlg.cpp:1630 +#: ../DialogTools/CreatingWeightDlg.cpp:1769 ../DialogTools/HClusterDlg.cpp:293 +#: ../DialogTools/HClusterDlg.cpp:476 +#: ../DialogTools/SpectralClusteringDlg.cpp:447 +#: ../DialogTools/SpectralClusteringDlg.cpp:560 +#: ../DialogTools/SpectralClusteringDlg.cpp:694 +#: ../DialogTools/RegressionDlg.cpp:266 ../DialogTools/RegressionDlg.cpp:313 +#: ../DialogTools/RegressionDlg.cpp:334 ../DialogTools/RegressionDlg.cpp:375 +#: ../DialogTools/RegressionDlg.cpp:533 ../DialogTools/RegressionDlg.cpp:611 +#: ../DialogTools/RegressionDlg.cpp:648 ../DialogTools/RegressionDlg.cpp:704 +#: ../DialogTools/RegressionDlg.cpp:726 ../DialogTools/RegressionDlg.cpp:778 +#: ../DialogTools/RegressionDlg.cpp:896 ../DialogTools/RegressionDlg.cpp:1150 +#: ../Explore/ColocationMapView.cpp:330 ../Explore/ColocationMapView.cpp:508 +#: ../Explore/PCPNewView.cpp:118 ../Explore/MapLayerTree.cpp:204 +#: ../Explore/MapLayerTree.cpp:630 ../Explore/MLJCMapNewView.cpp:686 +#: ../Explore/MLJCCoordinator.cpp:478 ../Explore/CorrelParamsDlg.cpp:348 +#: ../Explore/VarsChooserDlg.cpp:338 ../Explore/LisaScatterPlotView.cpp:1080 +#: ../Explore/AbstractClusterMap.cpp:630 +#: ../Explore/LocalGearyMapNewView.cpp:848 +#: ../Explore/GetisOrdMapNewView.cpp:733 ../Explore/LisaCoordinator.cpp:555 +#: ../DataViewer/DataViewerAddColDlg.cpp:299 +#: ../DataViewer/DataViewerAddColDlg.cpp:308 +#: ../DataViewer/DataViewerAddColDlg.cpp:317 +#: ../DataViewer/DataViewerAddColDlg.cpp:338 +#: ../DataViewer/DataViewerAddColDlg.cpp:373 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:434 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:519 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:535 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:552 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:586 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:601 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:612 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:638 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:664 +#: ../DataViewer/DataViewerResizeColDlg.cpp:67 +#: ../DataViewer/MergeTableDlg.cpp:287 ../DataViewer/MergeTableDlg.cpp:438 +#: ../DataViewer/MergeTableDlg.cpp:763 ../DataViewer/MergeTableDlg.cpp:877 +#: ../DataViewer/DataViewerDeleteColDlg.cpp:88 +#: ../DataViewer/DataViewerDeleteColDlg.cpp:118 +#: ../Regression/DiagnosticReport.cpp:46 ../Regression/DiagnosticReport.cpp:69 +#: ../GeoDa.cpp:1179 ../GeoDa.cpp:1194 ../GeoDa.cpp:1219 ../GeoDa.cpp:1233 +#: ../GeoDa.cpp:1278 ../GeoDa.cpp:1294 ../GeoDa.cpp:1335 ../GeoDa.cpp:1350 +#: ../GeoDa.cpp:1375 ../GeoDa.cpp:1510 ../GeoDa.cpp:1521 ../GeoDa.cpp:4097 +msgid "Error" +msgstr "" + +#: ../GeoDa.cpp:1368 +msgid "" +"Error while opening project:\n" +"\n" +msgstr "" + +#: ../Explore/CovSpView.cpp:529 +msgid "Error: " +msgstr "" + +#: ../DataViewer/DataViewerAddColDlg.cpp:306 +#, c-format +msgid "Error: \"%s\" already exists in Table, please specify a different name." +msgstr "" + +#: ../DataViewer/DataViewerAddColDlg.cpp:315 +#, c-format +msgid "" +"Error: \"%s\" is an invalid variable name. The first character must be " +"alphabetic, and the remaining characters can be either alphanumeric or " +"underscores. For DBF table, a valid variable name is between one and ten " +"characters long." +msgstr "" + +#: ../GeoDa.cpp:1330 +#, c-format +msgid "Error: \"%s\" not found." +msgstr "" + +#: ../Explore/MapNewView.cpp:2577 +msgid "" +"Error: Base values contain non-positive numbers which will result in " +"undefined values." +msgstr "" + +#: ../Explore/CatClassification.cpp:376 +msgid "Error: Chosen theme requires more cateogries than observations." +msgstr "" + +#: ../DataViewer/DataViewerAddColDlg.cpp:336 +#, c-format +msgid "" +"Error: Due to restrictions on the DBF file format, the particular " +"combination of length and decimals entered is not valid. Based on your " +"current choices, we recommend length = %d and decimals = %d" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1669 +#: ../DialogTools/CreatingWeightDlg.cpp:1708 +#, c-format +msgid "Error: Maximum number of neighbors %d exceeded." +msgstr "" + +#: ../DataViewer/DataViewerAddColDlg.cpp:298 +msgid "Error: The table variable name is empty." +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:1149 +msgid "Error: no records found in data source." +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:532 ../DialogTools/RegressionDlg.cpp:610 +#: ../DialogTools/RegressionDlg.cpp:669 ../DialogTools/RegressionDlg.cpp:725 +#: ../DialogTools/RegressionDlg.cpp:777 +msgid "Error: the inverse matrix is ill-conditioned." +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:180 +msgid "Estimated Pairs:" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:683 +msgid "Euclidean Distance" +msgstr "" + +#: ../Explore/MapNewView.cpp:3896 ../Explore/MapNewView.cpp:3909 +#: ../Explore/MapNewView.cpp:3921 ../Explore/MapNewView.cpp:3935 +#: ../Explore/MapNewView.cpp:3949 ../GeoDa.cpp:3491 ../GeoDa.cpp:3859 +#: ../GeoDa.cpp:5167 ../GeoDa.cpp:5198 ../GeoDa.cpp:5230 ../GeoDa.cpp:5261 +msgid "Event Variable" +msgstr "" + +#: ../Explore/CatClassification.cpp:1986 +msgid "Excess Risk" +msgstr "" + +#: ../Explore/MapNewView.cpp:3908 ../GeoDa.cpp:5166 +msgid "Excess Risk Map Variable Settings" +msgstr "" + +#: ../GeoDa.cpp:985 +msgid "Exit with unsaved changes?" +msgstr "" + +#: ../GeoDa.cpp:990 +msgid "Exit?" +msgstr "" + +#: ../GeoDa.cpp:547 ../GeoDa.cpp:727 +msgid "Explore" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:290 +msgid "Export or save layer to" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:48 +msgid "Extent" +msgstr "" + +#: ../DialogTools/Bnd2ShpDlg.cpp:126 +#, c-format +msgid "Fail in reading the Boundary file: at polygon-%d" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:290 +#: ../DialogTools/CreatingWeightDlg.cpp:1768 +msgid "Failed to create the weights file." +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:50 +msgid "" +"Failed to open data source. Please check the data/datasource and check if " +"the data type/format is supported by GeoDa.\n" +"\n" +"Tip: you can set up the necessary GeoDa driver by following the instructions " +"at:\n" +" http://geodacenter.github.io/formats.html" +msgstr "" + +#: ../DialogTools/RandomizationDlg.cpp:82 +msgid "False Discovery Rate:" +msgstr "" + +#: ../GeoDa.cpp:6358 +msgid "February" +msgstr "" + +#: ../ShapeOperations/OGRLayerProxy.cpp:394 +#, c-format +msgid "Field (%s) already exited." +msgstr "" + +#: ../GeoDa.cpp:482 ../GeoDa.cpp:499 ../GeoDa.cpp:500 ../GeoDa.cpp:501 +#: ../GeoDa.cpp:707 +msgid "File" +msgstr "" + +#: ../DialogTools/CreateGridDlg.cpp:179 +msgid "File doesn't exist!" +msgstr "" + +#: ../DataViewer/MergeTableDlg.cpp:753 ../DataViewer/MergeTableDlg.cpp:882 +msgid "File merged into Table successfully." +msgstr "" + +#: ../Explore/ScatterPlotMatView.cpp:247 +msgid "Fill Color" +msgstr "" + +#: ../TemplateLegend.cpp:361 +msgid "Fill Color for Category" +msgstr "" + +#: ../TemplateLegend.cpp:353 +msgid "Fill Opacity for Category" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:643 ../DialogTools/RegressionDlg.cpp:699 +msgid "Finished" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.h:113 +#: ../DialogTools/VariableSettingsDlg.h:122 +msgid "First Variable (X)" +msgstr "" + +#: ../GeoDa.cpp:2724 +msgid "First Variable (X/Longitude)" +msgstr "" + +#: ../Explore/BoxNewPlotView.cpp:186 +msgid "Fixed scale over time" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:363 +msgid "Fixed x-axis scale over time" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:369 +msgid "Fixed y-axis scale over time" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.h:116 +#: ../DialogTools/VariableSettingsDlg.h:125 +msgid "Fourth Variable" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:378 ../Explore/SimpleHistCanvas.cpp:615 +#: ../Explore/CorrelogramView.cpp:633 ../Explore/ConnectivityHistView.cpp:322 +#: ../Explore/SimpleBinsHistCanvas.cpp:192 +#: ../Explore/ConditionalHistogramView.cpp:458 ../Explore/HistogramView.cpp:579 +msgid "Frequency" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:260 +#: ../DialogTools/CreatingWeightDlg.cpp:1417 +msgid "GAL files (*.gal)|*.gal" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1424 +msgid "GWT files (*.gwt)|*.gwt" +msgstr "" + +#: ../DialogTools/ReportBugDlg.h:91 +msgid "GeoDa Bug Report Dialog" +msgstr "" + +#: ../DialogTools/CsvFieldConfDlg.h:42 +msgid "GeoDa CSV File Configuration" +msgstr "" + +#: ../DialogTools/WebViewHelpWin.h:41 +msgid "GeoDa Help" +msgstr "" + +#: ../DialogTools/PreferenceDlg.h:49 ../DialogTools/PreferenceDlg.h:57 +msgid "GeoDa Preference Setup" +msgstr "" + +#: ../GeoDa.cpp:1502 +msgid "GeoDa Project (*.gda)|*.gda" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:1295 ../GeoDa.cpp:1394 +msgid "GeoDa Project File to Open" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:450 +msgid "GeoDa Project to Save As" +msgstr "" + +#: ../DialogTools/AutoUpdateDlg.h:46 +msgid "GeoDa Update Dialog" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:248 +msgid "" +"GeoDa can not get valid spatial reference from input data source. Please try " +"another data source." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:241 +msgid "" +"GeoDa can not open the input data source. Please try another data source." +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:433 +msgid "" +"GeoDa can't change the variable type to DATE/TIME. Please select another " +"type." +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:342 +msgid "GeoDa can't create a layer." +msgstr "" + +#: ../ShapeOperations/OGRLayerProxy.cpp:158 +msgid "GeoDa can't load dataset with duplicate field names." +msgstr "" + +#: ../ShapeOperations/OGRLayerProxy.cpp:969 +msgid "" +"GeoDa can't read data from datasource. \n" +"\n" +"Details: Datasource is empty." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:394 +msgid "" +"GeoDa can't save a Table-only data source as a Geometry enabled data source. " +"Please try to add a geometry layer and then use File->Save As." +msgstr "" + +#: ../DataViewer/OGRTable.cpp:291 ../DataViewer/OGRTable.cpp:306 +msgid "" +"GeoDa can't save changes to this datasource. Please try to use File->Export." +msgstr "" + +#: ../Explore/MapNewView.cpp:803 ../Explore/MapNewView.cpp:3273 +msgid "" +"GeoDa cannot find proper projection or geographic coordinate system " +"information to add a basemap. Please update this information (e.g. in .prj " +"file)." +msgstr "" + +#: ../Explore/MapNewView.cpp:3626 ../GeoDa.cpp:1908 ../GeoDa.cpp:1938 +#: ../GeoDa.cpp:1968 ../GeoDa.cpp:3300 ../GeoDa.cpp:3352 ../GeoDa.cpp:3426 +#: ../GeoDa.cpp:3483 ../GeoDa.cpp:3558 ../GeoDa.cpp:3610 ../GeoDa.cpp:3661 +#: ../GeoDa.cpp:3716 ../GeoDa.cpp:3777 ../GeoDa.cpp:3849 ../GeoDa.cpp:3907 +#: ../GeoDa.cpp:3956 ../GeoDa.cpp:4012 ../GeoDa.cpp:4119 ../GeoDa.cpp:4178 +msgid "" +"GeoDa could not find the required weights file. \n" +"Please specify weights in Tools > Weights Manager." +msgstr "" + +#: ../Explore/MapNewView.cpp:3347 +msgid "" +"GeoDa could not load this layer. Please check if the datasource is valid and " +"not table only." +msgstr "" + +#: ../Project.cpp:569 +#, c-format +msgid "" +"GeoDa does not support creating data of %s. Please try to 'Export' to other " +"supported data source format." +msgstr "" + +#: ../ShapeOperations/OGRLayerProxy.cpp:764 ../Project.cpp:1560 +msgid "" +"GeoDa does not support datasource with line data at this time. Please " +"choose a datasource with either point or polygon data." +msgstr "" + +#: ../GeoDa.cpp:467 +msgid "GeoDa has run into a problem and will close." +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:1243 +#: ../Explore/LisaScatterPlotView.cpp:1265 +msgid "GeoDa was unable to save the file." +msgstr "" + +#: ../GeoDa.cpp:902 +msgid "" +"Geometries have been added to existing Table-only data source. Do you want " +"to save them as a new datasource?" +msgstr "" + +#: ../GeoDa.cpp:903 +msgid "Geometries not saved" +msgstr "" + +#: ../Explore/CatClassification.cpp:1992 +msgid "Getis-Ord" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:423 +msgid "Greedy" +msgstr "" + +#: ../DialogTools/CreateGridDlg.cpp:294 +msgid "Grid file was successfully created." +msgstr "" + +#: ../Explore/LineChartView.cpp:2206 +msgid "Group" +msgstr "" + +#: ../Explore/LineChartView.cpp:144 +msgid "Group 1:" +msgstr "" + +#: ../Explore/LineChartView.cpp:150 +msgid "Group 2:" +msgstr "" + +#: ../Explore/GroupingMapView.cpp:65 +msgid "Group Variable:" +msgstr "" + +#: ../Explore/LineChartView.cpp:129 +msgid "Groups:" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:608 +#, c-format +msgid "HDBScan Cluster Map (%d clusters)" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:57 +msgid "HDBScan Clustering Settings" +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:60 +#: ../Explore/ConditionalClusterMapView.cpp:1786 +msgid "Has Colocation" +msgstr "" + +#: ../Explore/MapLayoutView.cpp:36 +msgid "Height:" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:234 ../Explore/VarsChooserDlg.cpp:80 +#: ../Explore/LowessParamDlg.cpp:44 ../GeoDa.cpp:710 +msgid "Help" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:359 +msgid "Hide system table in Postgresql connection:" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:367 +msgid "Hide system table in SQLITE connection:" +msgstr "" + +#: ../GeoDa.cpp:2618 +msgid "Hierachical Map does not work with Table only datasource." +msgstr "" + +#: ../Explore/GroupingMapView.cpp:212 +msgid "Hierachical Map: " +msgstr "" + +#: ../DialogTools/HClusterDlg.cpp:64 +msgid "Hierarchical Clustering Settings" +msgstr "" + +#: ../Explore/GetisOrdMapNewView.cpp:72 +#: ../Explore/ConditionalClusterMapView.cpp:1357 +msgid "High" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:71 ../Explore/LocalGearyMapNewView.cpp:72 +#: ../Explore/ConditionalClusterMapView.cpp:1570 ../GdaConst.cpp:383 +msgid "High-High" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:72 ../GdaConst.cpp:386 +msgid "High-Low" +msgstr "" + +#: ../Explore/CatClassification.cpp:1980 +msgid "Hinge=1.5" +msgstr "" + +#: ../Explore/CatClassification.cpp:1982 +msgid "Hinge=3.0" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:82 ../Explore/HistogramView.h:165 +#: ../GeoDa.cpp:3096 +msgid "Histogram" +msgstr "" + +#: ../Explore/HistogramView.cpp:259 +msgid "Histogram Classification" +msgstr "" + +#: ../GeoDa.cpp:2949 +msgid "Histogram Variable" +msgstr "" + +#: ../Explore/HistogramView.cpp:481 +msgid "Histogram: " +msgstr "" + +#: ../Explore/ColocationMapView.cpp:860 ../Explore/MLJCMapNewView.cpp:927 +#: ../Explore/LisaMapNewView.cpp:343 ../Explore/LocalGearyMapNewView.cpp:1136 +#: ../Explore/GetisOrdMapNewView.cpp:1067 ../GeoDa.cpp:2924 ../GeoDa.cpp:2947 +#: ../GeoDa.cpp:2969 +msgid "Horizontal Cells" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:375 +msgid "Http connection timeout (seconds) for e.g. WFS, Geojson etc.:" +msgstr "" + +#: ../DialogTools/Bnd2ShpDlg.cpp:261 +msgid "ID is not specified!" +msgstr "" + +#: ../Explore/MapLayoutView.cpp:413 ../TemplateFrame.cpp:562 +msgid "Image Dimension Settings" +msgstr "" + +#: ../Explore/VarsChooserDlg.cpp:53 +msgid "Include" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:989 +msgid "Incomplete Group Variable" +msgstr "" + +#: ../GeoDa.cpp:2971 +msgid "Independent Var (x-axis)" +msgstr "" + +#: ../GeoDa.cpp:3110 +msgid "Independent Var X" +msgstr "" + +#: ../DialogTools/RandomizationDlg.h:42 ../Explore/MLJCMapNewView.cpp:727 +#: ../Explore/LocalGearyMapNewView.cpp:897 +#: ../Explore/GetisOrdMapNewView.cpp:783 +msgid "Inference Settings" +msgstr "" + +#: ../Explore/AbstractClusterMap.cpp:669 +#, c-format +msgid "Inference Settings (%d perm)" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:357 ../DialogTools/ConnectDatasourceDlg.cpp:752 +#: ../DialogTools/DatasourceDlg.cpp:266 +#: ../DialogTools/MultiVarSettingsDlg.cpp:212 +#: ../DialogTools/PreferenceDlg.cpp:846 +#: ../DialogTools/AbstractClusterDlg.cpp:697 ../DialogTools/SaveAsDlg.cpp:240 +#: ../DialogTools/SaveAsDlg.cpp:245 ../DataViewer/DataViewerDeleteColDlg.cpp:95 +#: ../GeoDa.cpp:1518 ../GeoDa.cpp:2573 ../GeoDa.cpp:2580 ../GeoDa.cpp:2597 +#: ../GeoDa.cpp:2619 ../GeoDa.cpp:2646 +msgid "Info" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:551 ../Explore/MapNewView.cpp:1807 +#: ../Explore/MapNewView.cpp:2825 +msgid "Information" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:100 +msgid "Initial Groups:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:416 +msgid "Initial groups:\t" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:95 ../DialogTools/SpectralClusteringDlg.cpp:193 +msgid "Initialization Method:" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:112 +#: ../DialogTools/SpectralClusteringDlg.cpp:205 +msgid "Initialization Re-runs:" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:332 +#: ../DialogTools/SpectralClusteringDlg.cpp:538 +msgid "Initialization method:\t" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:333 +#: ../DialogTools/SpectralClusteringDlg.cpp:539 +msgid "Initialization re-runs:\t" +msgstr "" + +#: ../DialogTools/Bnd2ShpDlg.cpp:209 ../DialogTools/CreateGridDlg.cpp:161 +msgid "Input ASCII file" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:104 +msgid "Input data source" +msgstr "" + +#: ../DialogTools/FieldNameCorrectionDlg.cpp:552 +msgid "Input is duplicated." +msgstr "" + +#: ../DialogTools/FieldNameCorrectionDlg.cpp:553 +msgid "Input is not valid." +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:285 ../DialogTools/ReportBugDlg.cpp:293 +msgid "Input is required" +msgstr "" + +#: ../DialogTools/RandomizationDlg.cpp:87 +msgid "Input significance:" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:226 +#: ../DialogTools/AbstractClusterDlg.cpp:272 +msgid "Input:" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:819 +msgid "Insufficient Random Sampling" +msgstr "" + +#: ../ShapeOperations/OGRLayerProxy.cpp:402 +#, c-format +msgid "" +"Internal Error: Add new field (%s) failed.\n" +"\n" +"Details:%s" +msgstr "" + +#: ../ShapeOperations/OGRLayerProxy.cpp:425 +msgid "" +"Internal Error: Delete field failed.\n" +"\n" +"Details:" +msgstr "" + +#: ../DataViewer/OGRTableOperation.cpp:383 +msgid "Internal Error: can't update an in-memory cell." +msgstr "" + +#: ../DialogTools/HistIntervalDlg.h:36 +msgid "Intervals in the Histogram" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:966 +msgid "Invalid Variable" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:493 ../DialogTools/RedcapDlg.cpp:504 +#: ../DialogTools/SkaterDlg.cpp:489 ../DialogTools/HClusterDlg.cpp:602 +#: ../GeoDa.cpp:3314 ../GeoDa.cpp:3386 ../GeoDa.cpp:3445 ../GeoDa.cpp:3499 +#: ../GeoDa.cpp:3571 ../GeoDa.cpp:3624 ../GeoDa.cpp:3674 ../GeoDa.cpp:3970 +#: ../GeoDa.cpp:4026 +msgid "" +"Invalid Weights Information:\n" +"\n" +" The selected weights file is not valid.\n" +" Please choose another weights file, or use Tools > Weights > Weights " +"Manager\n" +" to define a valid weights file." +msgstr "" + +#: ../Explore/MapNewView.cpp:3635 ../GeoDa.cpp:3730 ../GeoDa.cpp:3812 +#: ../GeoDa.cpp:3866 ../GeoDa.cpp:3922 ../GeoDa.cpp:4133 ../GeoDa.cpp:4192 +msgid "" +"Invalid Weights Information:\n" +"\n" +" The selected weights file is not valid.\n" +" Please choose another weights file, or use Tools > Weights > Weights " +"Manager to define a valid weights file." +msgstr "" + +#: ../Explore/MapLayerTree.cpp:630 +msgid "" +"Invalid layer association has been detected, which will cause infinite " +"highlighting loop. Please try to reset highlight association between layers." +msgstr "" + +#: ../GeoDa.cpp:280 +msgid "" +"It looks like GeoDa has been terminated abnormally. \n" +"Do you want to send a crash report to GeoDa team? \n" +"\n" +"(Optional) Please leave your email address,\n" +"so we can send a follow-up email once we have a fix." +msgstr "" + +#: ../Explore/LowessParamDlg.cpp:65 +msgid "Iterations:" +msgstr "" + +#: ../GeoDa.cpp:6356 +msgid "January" +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:419 +msgid "Join Operation:" +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:413 +msgid "Join Variable:" +msgstr "" + +#: ../GeoDa.cpp:6368 +msgid "July" +msgstr "" + +#: ../GeoDa.cpp:6366 +msgid "June" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:575 +msgid "KMeans Clustering Settings" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:624 +msgid "KMedians Clustering Settings" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:718 +msgid "KMedoids Clustering Settings" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1421 +msgid "KWT files (*.kwt)|*.kwt" +msgstr "" + +#: ../Explore/CatClassification.cpp:1989 +msgid "LISA" +msgstr "" + +#: ../Explore/LowessParamDlg.cpp:151 +msgid "LOWESS Smoother Help" +msgstr "" + +#: ../Explore/LowessParamDlg.cpp:33 +msgid "LOWESS Smoother Parameters" +msgstr "" + +#: ../wxTranslationHelper.cpp:162 +msgid "Language" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:242 +msgid "Language:" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:124 ../DialogTools/CsvFieldConfDlg.cpp:126 +msgid "Latitude/Y:" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:250 ../DialogTools/DatasourceDlg.cpp:256 +msgid "Layer names" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:53 +msgid "Left" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:333 ../DialogTools/CsvFieldConfDlg.cpp:333 +msgid "" +"Limited date/time type recognition can be done for Date (YYYY-MM-DD), Time " +"(HH:MM:SS+nn) and DateTime (YYYY-MM-DD HH:MM:SS+nn) in configuration.\n" +"\n" +"Please try to load customized date/time type as string and covert it using " +"Table->Edit Variable Property" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:1259 +msgid "" +"List of existing ungrouped variables. To group variables by time, move them " +"to the list on the right.\n" +"\n" +"For example, to group Pop80 and Pop90, select them on the left and move them " +"to the right." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:77 +msgid "Load" +msgstr "" + +#: ../Explore/MapNewView.cpp:3347 +msgid "Load Layer Failed." +msgstr "" + +#: ../Project.cpp:1572 +msgid "Loading data..." +msgstr "" + +#: ../Explore/CatClassification.cpp:1995 +msgid "Local Geary" +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:124 +msgid "Local Join Count " +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:120 +msgid "Local Search:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:423 ../DialogTools/MaxpDlg.cpp:425 +#: ../DialogTools/MaxpDlg.cpp:428 +msgid "Local search:" +msgstr "" + +#: ../DialogTools/LocaleSetupDlg.cpp:108 +msgid "" +"Locale for numbers has been setup successfully. Please re-open current " +"project to enable this locale." +msgstr "" + +#: ../Explore/GetisOrdMapNewView.cpp:73 +#: ../Explore/ConditionalClusterMapView.cpp:1359 +msgid "Low" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:74 ../GdaConst.cpp:385 +msgid "Low-High" +msgstr "" + +#: ../Explore/LisaMapNewView.cpp:73 ../Explore/LocalGearyMapNewView.cpp:73 +#: ../Explore/ConditionalClusterMapView.cpp:1572 ../GdaConst.cpp:384 +msgid "Low-Low" +msgstr "" + +#: ../Explore/CatClassification.cpp:226 ../Explore/CatClassification.cpp:623 +#: ../GdaConst.cpp:396 +msgid "Lower outlier" +msgstr "" + +#: ../Explore/ScatterNewPlotView.h:382 +msgid "MDS Plot" +msgstr "" + +#: ../DialogTools/MDSDlg.cpp:320 +msgid "MDS Plot - " +msgstr "" + +#: ../DialogTools/MDSDlg.cpp:42 +msgid "MDS Settings" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:2496 ../Explore/MapNewView.cpp:1623 +#: ../Explore/MapNewView.cpp:3119 ../Explore/MapNewView.cpp:3194 +#: ../GeoDa.cpp:648 +msgid "Map" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:807 +msgid "Map Layer Settings" +msgstr "" + +#: ../TemplateFrame.cpp:550 +msgid "Map Layout Preview" +msgstr "" + +#: ../GeoDa.cpp:2926 +msgid "Map Theme" +msgstr "" + +#: ../DialogTools/GetisOrdChoiceDlg.h:31 +msgid "Maps To Open" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:118 +msgid "Maps:" +msgstr "" + +#: ../GeoDa.cpp:6360 +msgid "March" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:226 ../Explore/CorrelogramView.cpp:771 +msgid "Max" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:141 +msgid "Max Distance:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:57 +msgid "Max-p Settings" +msgstr "" + +#: ../DialogTools/RedcapDlg.cpp:141 +msgid "Maximum # of regions:" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:137 +#: ../DialogTools/SpectralClusteringDlg.cpp:229 +msgid "Maximum Iterations:" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:334 +#: ../DialogTools/SpectralClusteringDlg.cpp:540 +msgid "Maximum iterations:\t" +msgstr "" + +#: ../GeoDa.cpp:6364 +msgid "May" +msgstr "" + +#: ../Explore/LineChartView.cpp:2212 +msgid "Mean" +msgstr "" + +#: ../DataViewer/MergeTableDlg.cpp:79 +msgid "Merge - " +msgstr "" + +#: ../DataViewer/MergeTableDlg.cpp:665 +msgid "" +"Merge error: Geometric type of selected datasource has to be the same with " +"current datasource." +msgstr "" + +#: ../DataViewer/TableFrame.cpp:282 +msgid "Meta-data" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:159 +msgid "Method of selecting clusters:" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:292 ../DialogTools/PCASettingsDlg.cpp:75 +#: ../DialogTools/RedcapDlg.cpp:129 ../DialogTools/HClusterDlg.cpp:152 +msgid "Method:" +msgstr "" + +#: ../DialogTools/RedcapDlg.cpp:370 ../DialogTools/KMeansDlg.cpp:330 +#: ../DialogTools/HClusterDlg.cpp:458 +msgid "Method:\t" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:225 ../Explore/CorrelogramView.cpp:770 +msgid "Min" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:94 +msgid "Min # per Region:" +msgstr "" + +#: ../DialogTools/SkaterDlg.cpp:108 +msgid "Min Region Size:" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:133 +msgid "Min cluster size:" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:147 +msgid "Min samples:" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:487 +msgid "Minimum Bound:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:410 ../DialogTools/RedcapDlg.cpp:375 +#: ../DialogTools/KMeansDlg.cpp:339 +msgid "Minimum bound:\t" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:428 +msgid "Minimum cluster size should be greater than one." +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:412 ../DialogTools/RedcapDlg.cpp:378 +msgid "Minimum region size:\t" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:440 +msgid "Minimum samples should be greater than zero." +msgstr "" + +#: ../GeoDa.cpp:3322 ../GeoDa.cpp:3394 ../GeoDa.cpp:3453 ../GeoDa.cpp:3507 +msgid "" +"Moran scatter plot is not supported when isolates are present in weights. Do " +"you want to continue by removing the isolates when compute Moran's I?" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:181 +#, c-format +msgid "Moran's I (%s): %s" +msgstr "" + +#: ../DialogTools/MultiVarSettingsDlg.cpp:55 +msgid "Multi-Variable Settings" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:164 +#: ../DialogTools/VarGroupingEditorDlg.cpp:177 +msgid "Name" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:498 +#: ../Explore/CatClassification.cpp:1974 +msgid "Natural Breaks" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:75 +#: ../Explore/ConditionalClusterMapView.cpp:1576 ../GdaConst.cpp:388 +msgid "Negative" +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:63 ../Explore/AbstractClusterMap.cpp:67 +#: ../Explore/LocalGearyMapNewView.cpp:78 ../Explore/GetisOrdMapNewView.cpp:75 +#: ../Explore/ConditionalClusterMapView.cpp:1378 +#: ../Explore/ConditionalClusterMapView.cpp:1593 +#: ../Explore/ConditionalClusterMapView.cpp:1805 ../GdaConst.cpp:382 +msgid "Neighborless" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:900 ../DialogTools/CatClassifDlg.cpp:1629 +msgid "New Categories Title" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:893 ../DialogTools/CatClassifDlg.cpp:1625 +msgid "New Custom Categories Title:" +msgstr "" + +#: ../GeoDa.cpp:2723 +msgid "New Map Coordinates" +msgstr "" + +#: ../GeoDa.cpp:1503 +msgid "New Project Filename" +msgstr "" + +#: ../DataViewer/TableFrame.cpp:650 +msgid "New space-time variable name" +msgstr "" + +#: ../DataViewer/TableFrame.cpp:653 +msgid "New variable name" +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:59 +#: ../Explore/ConditionalClusterMapView.cpp:1784 +msgid "No Colocation" +msgstr "" + +#: ../Explore/MapNewView.cpp:3626 ../GeoDa.cpp:1908 ../GeoDa.cpp:1938 +#: ../GeoDa.cpp:1968 ../GeoDa.cpp:3300 ../GeoDa.cpp:3352 ../GeoDa.cpp:3426 +#: ../GeoDa.cpp:3483 ../GeoDa.cpp:3558 ../GeoDa.cpp:3610 ../GeoDa.cpp:3661 +#: ../GeoDa.cpp:3716 ../GeoDa.cpp:3777 ../GeoDa.cpp:3850 ../GeoDa.cpp:3908 +#: ../GeoDa.cpp:3956 ../GeoDa.cpp:4012 +msgid "No Weights Found" +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:550 +msgid "No clusters can be found using current parameters." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:877 +msgid "No field chosen for first and second variable." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:889 +msgid "No field chosen for first variable." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:946 +msgid "No field chosen for fourth variable." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:909 +msgid "No field chosen for second variable." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:928 +msgid "No field chosen for third variable." +msgstr "" + +#: ../DialogTools/DatasourceDlg.cpp:270 +msgid "No layer has been selected. Please select a layer." +msgstr "" + +#: ../DialogTools/DatasourceDlg.cpp:266 +msgid "No layer was found in the selected data source." +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:288 +msgid "No layer was found in this datasource." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:79 +#: ../DialogTools/RegressionDlg.cpp:138 +msgid "No numeric variables found in table." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:483 +msgid "No numeric variables found." +msgstr "" + +#: ../Explore/MapNewView.cpp:2824 +msgid "No rates currently calculated to save." +msgstr "" + +#: ../GeoDa.cpp:6292 +msgid "No update required" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1629 +msgid "" +"No weights file was created due to all observations being isolates for the " +"specified threshold value. Increase the threshold to create a non-empty " +"weights file." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1557 +msgid "" +"None of your observations have neighbors. This could be related to " +"digitizing problems, which can be fixed by adjusting the precision threshold." +msgstr "" + +#: ../DialogTools/SkaterDlg.cpp:686 ../DialogTools/HDBScanDlg.cpp:611 +msgid "Not Clustered" +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:58 ../Explore/AbstractClusterMap.cpp:65 +#: ../Explore/LocalGearyMapNewView.cpp:71 ../Explore/GetisOrdMapNewView.cpp:71 +#: ../Explore/ConditionalClusterMapView.cpp:1134 +#: ../Explore/ConditionalClusterMapView.cpp:1353 +#: ../Explore/ConditionalClusterMapView.cpp:1355 +#: ../Explore/ConditionalClusterMapView.cpp:1563 +#: ../Explore/ConditionalClusterMapView.cpp:1777 ../GdaConst.cpp:380 +msgid "Not Significant" +msgstr "" + +#: ../Regression/DiagnosticReport.cpp:68 +msgid "Not enough memory!" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:547 +msgid "Notice" +msgstr "" + +#: ../GeoDa.cpp:6376 +msgid "November" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1453 +msgid "" +"Null geometry was detected in dataset. GeoDa can't create weights with NULL " +"geometry. Please try to save as records with valid geometries and try again." +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:121 +msgid "Number Bins:" +msgstr "" + +#: ../Explore/BoxNewPlotView.cpp:220 +msgid "Number of Box Plots" +msgstr "" + +#: ../DialogTools/NumCategoriesDlg.h:36 +msgid "Number of Categories" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:470 ../DialogTools/SkaterDlg.cpp:92 +msgid "Number of Clusters:" +msgstr "" + +#: ../Explore/ConnectivityHistView.cpp:354 +msgid "Number of Neighbors" +msgstr "" + +#: ../DialogTools/KMeansDlg.cpp:331 ../DialogTools/HClusterDlg.cpp:454 +#: ../DialogTools/SpectralClusteringDlg.cpp:523 +msgid "Number of clusters:\t" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:930 +msgid "Number of not clustered observations: " +msgstr "" + +#: ../ShapeOperations/OGRDatasourceProxy.cpp:420 +msgid "" +"OGR failed to create field.\n" +"\n" +"Details:" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:166 ../DialogTools/FieldNameCorrectionDlg.cpp:645 +#: ../DialogTools/FieldNameCorrectionDlg.cpp:692 +#: ../DialogTools/MultiVarSettingsDlg.cpp:118 +#: ../DialogTools/CsvFieldConfDlg.cpp:168 ../DialogTools/SaveToTableDlg.cpp:150 +#: ../DialogTools/VariableSettingsDlg.cpp:143 +#: ../DialogTools/ProjectInfoDlg.cpp:162 ../DialogTools/SpatialJoinDlg.cpp:433 +#: ../DialogTools/RandomizationDlg.cpp:97 ../Explore/ColocationMapView.cpp:172 +#: ../Explore/MapLayerTree.cpp:68 ../Explore/GroupingMapView.cpp:71 +#: ../GeneralWxUtils.cpp:569 +msgid "OK" +msgstr "" + +#: ../GeoDa.cpp:991 +msgid "OK to Exit?" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:585 +msgid "OLS Model has been selected." +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:581 +msgid "OLS Model with White test has been selected." +msgstr "" + +#: ../Explore/LineChartView.cpp:2209 +msgid "Obs." +msgstr "" + +#: ../GeoDa.cpp:6374 +msgid "October" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:110 ../Explore/MapLayoutView.cpp:60 +#: ../TemplateLegend.cpp:62 ../GeneralWxUtils.cpp:108 +msgid "Ok" +msgstr "" + +#: ../ShapeOperations/WeightUtils.cpp:595 +#, c-format +msgid "" +"On line %d of weights file, observation id %d encountered which does not " +"exist in field \"%s\" of the Table." +msgstr "" + +#: ../ShapeOperations/WeightUtils.cpp:592 +#, c-format +msgid "" +"On line %d of weights file, observation id %d encountered which is out of " +"allowed observation range of 1 through %d." +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:1277 +msgid "" +"Once you have grouped variables, you can save a new space-time table and " +"weights: To add a spatial ID to your space-time table and create space-time " +"weights, you need to have an active weights file (Tools-Weights Manager)." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:395 +msgid "Only 'gal', 'gwt', 'kwt', 'mat' and 'swm' weights files supported." +msgstr "" + +#: ../Explore/MapLayerTree.cpp:782 +msgid "Only Map Boundary" +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:313 +msgid "" +"Oops. GeoDa was unable to submit a bug report. Please try again or create it " +"here instead: https://github.com/GeoDaCenter/geoda/issues Thanks!" +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:838 +msgid "Open Datasource:" +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:839 +msgid "Open Layer:" +msgstr "" + +#: ../Project.cpp:1571 +msgid "Open data source progress dialog" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:157 ../osm/uiRoadDownload.cpp:169 +msgid "Open file" +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:759 +msgid "Open project file:" +msgstr "" + +#: ../DialogTools/FieldNewCalcDateTimeDlg.cpp:116 +msgid "Operation requires a valid field name or constant." +msgstr "" + +#: ../Explore/ColocationMapView.cpp:800 ../Explore/ColocationMapView.cpp:808 +#: ../Explore/PCPNewView.cpp:1206 ../Explore/PCPNewView.cpp:1285 +#: ../Explore/ConnectivityMapView.cpp:616 +#: ../Explore/ConnectivityMapView.cpp:624 ../Explore/3DPlotView.cpp:1133 +#: ../Explore/3DPlotView.cpp:1141 ../Explore/MapNewView.cpp:3490 +#: ../Explore/MapNewView.cpp:3553 ../Explore/MLJCMapNewView.cpp:583 +#: ../Explore/MLJCMapNewView.cpp:591 ../Explore/CartogramNewView.cpp:1106 +#: ../Explore/CartogramNewView.cpp:1114 ../Explore/ScatterNewPlotView.cpp:2008 +#: ../Explore/ScatterNewPlotView.cpp:2022 ../Explore/BoxNewPlotView.cpp:1014 +#: ../Explore/BoxNewPlotView.cpp:1022 ../Explore/CorrelogramView.cpp:276 +#: ../Explore/CorrelogramView.cpp:284 ../Explore/ConditionalMapView.cpp:1058 +#: ../Explore/ConditionalMapView.cpp:1066 ../Explore/ScatterPlotMatView.cpp:151 +#: ../Explore/ScatterPlotMatView.cpp:158 +#: ../Explore/ConnectivityHistView.cpp:764 +#: ../Explore/ConnectivityHistView.cpp:772 +#: ../Explore/LisaScatterPlotView.cpp:1102 +#: ../Explore/LisaScatterPlotView.cpp:1110 ../Explore/LineChartView.cpp:772 +#: ../Explore/LineChartView.cpp:780 ../Explore/AbstractClusterMap.cpp:529 +#: ../Explore/AbstractClusterMap.cpp:537 +#: ../Explore/LocalGearyMapNewView.cpp:733 +#: ../Explore/LocalGearyMapNewView.cpp:741 +#: ../Explore/ConditionalHistogramView.cpp:1040 +#: ../Explore/ConditionalHistogramView.cpp:1048 +#: ../Explore/HistogramView.cpp:1290 ../Explore/HistogramView.cpp:1298 +#: ../Explore/ConditionalScatterPlotView.cpp:872 +#: ../Explore/ConditionalScatterPlotView.cpp:880 +#: ../Explore/GetisOrdMapNewView.cpp:628 ../Explore/GetisOrdMapNewView.cpp:636 +#: ../Explore/CovSpView.cpp:152 ../Explore/CovSpView.cpp:160 +#: ../Explore/GroupingMapView.cpp:535 ../Explore/GroupingMapView.cpp:543 +#: ../Explore/ConditionalNewView.cpp:808 +#: ../Explore/ConditionalClusterMapView.cpp:929 +#: ../Explore/ConditionalClusterMapView.cpp:937 +#: ../DataViewer/TableFrame.cpp:222 ../GeoDa.cpp:660 +msgid "Options" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:896 +msgid "Options > Change Parameters" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:86 +msgid "Options:" +msgstr "" + +#: ../Explore/ConditionalClusterMapView.cpp:1574 ../GdaConst.cpp:387 +msgid "Other Pos" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:74 +msgid "Other Positive" +msgstr "" + +#: ../Explore/ScatterPlotMatView.cpp:236 +msgid "Outline Color" +msgstr "" + +#: ../TemplateLegend.cpp:345 +msgid "Outline Color for Category" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:758 +msgid "Outline Visible" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:177 ../DialogTools/PCASettingsDlg.cpp:93 +#: ../DialogTools/RedcapDlg.cpp:183 ../DialogTools/SkaterDlg.cpp:149 +#: ../DialogTools/HDBScanDlg.cpp:207 ../DialogTools/KMeansDlg.cpp:170 +#: ../DialogTools/HClusterDlg.cpp:196 +#: ../DialogTools/SpectralClusteringDlg.cpp:268 +msgid "Output:" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:866 +msgid "Overwrite?" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:49 +msgid "PCA Settings" +msgstr "" + +#: ../DialogTools/PCPDlg.h:37 +msgid "Parallel Coordinate Plot" +msgstr "" + +#: ../Explore/PCPNewView.cpp:272 +msgid "Parallel Coordinate Plot: " +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:170 ../DialogTools/PCASettingsDlg.cpp:86 +#: ../DialogTools/RedcapDlg.cpp:175 ../DialogTools/MDSDlg.cpp:100 +#: ../DialogTools/SkaterDlg.cpp:142 ../DialogTools/HDBScanDlg.cpp:186 +#: ../DialogTools/KMeansDlg.cpp:162 ../DialogTools/HClusterDlg.cpp:185 +#: ../DialogTools/SpectralClusteringDlg.cpp:257 +msgid "Parameters:" +msgstr "" + +#: ../GeneralWxUtils.cpp:51 +msgid "Paste" +msgstr "" + +#: ../Explore/CatClassification.cpp:1978 +msgid "Percentile" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:494 +msgid "Percentile Map" +msgstr "" + +#: ../Explore/LineChartView.cpp:2236 ../Explore/LineChartView.cpp:2257 +#: ../Explore/LineChartView.cpp:2268 +msgid "Period 1" +msgstr "" + +#: ../Explore/LineChartView.cpp:147 +msgid "Period 1:" +msgstr "" + +#: ../Explore/LineChartView.cpp:2287 ../Explore/LineChartView.cpp:2306 +#: ../Explore/LineChartView.cpp:2317 +msgid "Period 2" +msgstr "" + +#: ../Explore/LineChartView.cpp:153 +msgid "Period 2:" +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:284 +msgid "Please briefly describe what went wrong." +msgstr "" + +#: ../osm/uiRoadDownload.cpp:198 +msgid "Please check input values are valid" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:374 +msgid "Please check the selected variables are all valid." +msgstr "" + +#: ../DialogTools/AutoUpdateDlg.cpp:496 +msgid "Please check your network connection, or contact GeoDa support team." +msgstr "" + +#: ../Explore/LineChartView.cpp:1414 ../Explore/LineChartView.cpp:1482 +msgid "Please choose Period 1 first." +msgstr "" + +#: ../Explore/LineChartView.cpp:1001 ../Explore/LineChartView.cpp:1047 +msgid "Please choose Period 1." +msgstr "" + +#: ../Explore/LineChartView.cpp:1423 ../Explore/LineChartView.cpp:1491 +msgid "Please choose Period 2 first." +msgstr "" + +#: ../Explore/LineChartView.cpp:1010 ../Explore/LineChartView.cpp:1056 +msgid "Please choose Period 2." +msgstr "" + +#: ../Explore/LineChartView.cpp:966 ../Explore/LineChartView.cpp:1332 +msgid "Please choose Periods first." +msgstr "" + +#: ../DialogTools/FieldNewCalcDateTimeDlg.cpp:104 +msgid "Please choose a Result field." +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:292 +msgid "Please describe steps you took before something went wrong." +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:468 ../DialogTools/RedcapDlg.cpp:485 +#: ../DialogTools/SkaterDlg.cpp:466 ../DialogTools/HDBScanDlg.cpp:531 +#: ../DialogTools/KMeansDlg.cpp:485 ../DialogTools/HClusterDlg.cpp:292 +#: ../DialogTools/SpectralClusteringDlg.cpp:693 +msgid "Please enter a field name for saving clustering results." +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:559 +msgid "Please enter a valid number of cluster." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:417 ../DialogTools/KMeansDlg.cpp:363 +#: ../DialogTools/HClusterDlg.cpp:475 +msgid "Please enter a valid number of clusters." +msgstr "" + +#: ../DialogTools/HistIntervalDlg.cpp:75 +msgid "Please enter a valid positive integer" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:460 +msgid "Please enter iteration number" +msgstr "" + +#: ../DialogTools/RedcapDlg.cpp:468 +msgid "Please enter maximum number of regions." +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:510 ../DialogTools/RedcapDlg.cpp:476 +#: ../DialogTools/SkaterDlg.cpp:507 +msgid "Please enter minimum bound value" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:519 +msgid "" +"Please enter minimum number of observations per regions, or use minimum " +"bound instead." +msgstr "" + +#: ../DialogTools/SkaterDlg.cpp:458 +msgid "Please enter number of regions" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:195 +msgid "Please enter values of bounding box." +msgstr "" + +#: ../Explore/LineChartView.cpp:1316 +msgid "Please first select observations in one of the other data or map views." +msgstr "" + +#: ../DialogTools/CreateGridDlg.cpp:291 +msgid "Please fix the grid bounding box." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:727 +#: ../DialogTools/ConnectDatasourceDlg.cpp:1009 +msgid "Please input Carto App Key." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:723 +#: ../DialogTools/ConnectDatasourceDlg.cpp:1005 +msgid "Please input Carto User Name." +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:976 +msgid "Please input a valid url address." +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:980 +msgid "Please input a valid url." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:707 +#: ../DialogTools/ConnectDatasourceDlg.cpp:946 +msgid "Please input database host." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:708 +#: ../DialogTools/ConnectDatasourceDlg.cpp:947 +msgid "Please input database name." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:709 +#: ../DialogTools/ConnectDatasourceDlg.cpp:948 +msgid "Please input database port." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:617 +msgid "Please input minimum bound value." +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:950 +msgid "Please input password." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:711 +msgid "Please input table name." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:710 +#: ../DialogTools/ConnectDatasourceDlg.cpp:949 +msgid "Please input user name." +msgstr "" + +#: ../GeoDa.cpp:2579 +msgid "Please load another layer using map window to apply Spatial Join." +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:751 +msgid "Please open a data file rather than a project file (*.gda)." +msgstr "" + +#: ../DialogTools/SaveAsDlg.cpp:203 +msgid "Please provide paths for both Project file and Datasource." +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:845 +msgid "Please restart GeoDa to apply the language setup." +msgstr "" + +#: ../DialogTools/AutoUpdateDlg.cpp:488 +msgid "Please restart GeoDa to finish installing updates." +msgstr "" + +#: ../Explore/CorrelogramView.cpp:895 +msgid "Please right-click or use
" +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:615 +msgid "Please select Join Operation with Join Variable." +msgstr "" + +#: ../GeoDa.cpp:3934 +msgid "Please select a binary variable for Local Join Count." +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:400 +#, c-format +msgid "Please select a map layer to apply spatial join to current map (%s):" +msgstr "" + +#: ../DialogTools/FieldNewCalcLagDlg.cpp:98 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:113 +msgid "Please select a results field." +msgstr "" + +#: ../Explore/LineChartView.cpp:613 +msgid "" +"Please select a time variable first, and make sure more than one time steps " +"have been defined." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1390 +msgid "Please select a weights type." +msgstr "" + +#: ../DialogTools/FieldNewCalcRateDlg.cpp:136 +msgid "Please select an Base field." +msgstr "" + +#: ../DialogTools/FieldNewCalcRateDlg.cpp:129 +msgid "Please select an Event field." +msgstr "" + +#: ../DialogTools/FieldNewCalcLagDlg.cpp:112 +msgid "Please select an Variable field." +msgstr "" + +#: ../Explore/CorrelogramView.cpp:1022 +msgid "" +"Please select another variable with values more suitable for computing a " +"correlogram." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:695 +#, c-format +msgid "Please select at least %d variables." +msgstr "" + +#: ../DialogTools/MultiVarSettingsDlg.cpp:211 +msgid "Please select at least 2 variables." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1166 +msgid "Please select at least one variable." +msgstr "" + +#: ../GeoDa.cpp:4040 +msgid "Please select binary variables for Co-location Join Count." +msgstr "" + +#: ../GeoDa.cpp:2645 +msgid "Please select features first." +msgstr "" + +#: ../osm/uiRoadDownload.cpp:251 ../DialogTools/DatasourceDlg.cpp:256 +msgid "Please select the layer name to connect:" +msgstr "" + +#: ../GeoDa.cpp:3981 ../GeoDa.cpp:3990 +msgid "Please select two binary variables for Bivariate Local Join Count." +msgstr "" + +#: ../Explore/ColocationMapView.cpp:507 +msgid "Please setup co-locations first." +msgstr "" + +#: ../DialogTools/FieldNewCalcLagDlg.cpp:105 +msgid "Please specify a Weights matrix." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:332 +msgid "Please specify a valid data source name." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1174 +msgid "Please specify distance metric." +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:245 +msgid "" +"Please specify the p-value to be used in tests; \n" +"default: p-value = 0.01" +msgstr "" + +#: ../Explore/CovSpView.cpp:524 +msgid "" +"Please use
Options > Change Variable
to specify a variable." +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:198 +msgid "Plots:" +msgstr "" + +#: ../TemplateLegend.cpp:51 +msgid "Point Radius:" +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:76 ../GdaConst.cpp:389 +msgid "Positive" +msgstr "" + +#: ../DialogTools/ProgressDlg.h:31 +msgid "Progress" +msgstr "" + +#: ../DialogTools/ProjectInfoDlg.cpp:30 +msgid "Project Information" +msgstr "" + +#: ../DialogTools/SaveAsDlg.cpp:190 +msgid "Project file path is empty." +msgstr "" + +#: ../Project.cpp:657 +msgid "Project filename not specified." +msgstr "" + +#: ../DialogTools/SelectWeightsDlg.cpp:345 ../DialogTools/WeightsManDlg.cpp:878 +msgid "Property" +msgstr "" + +#: ../DialogTools/PublishDlg.h:77 +msgid "Publish Maps and Plots to GeoDa-Web" +msgstr "" + +#: ../Explore/CatClassification.cpp:1970 +msgid "Quantile" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:493 +msgid "Quantile Map" +msgstr "" + +#: ../DialogTools/RedcapDlg.cpp:63 +msgid "REDCAP Settings" +msgstr "" + +#: ../DialogTools/FieldNewCalcSpecialDlg.cpp:313 +#, c-format +msgid "Random Gaussian dist with mean=%s, sd=%s" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:191 +msgid "Random Sample" +msgstr "" + +#: ../DialogTools/FieldNewCalcSpecialDlg.cpp:318 +msgid "Random uniform dist on unit interval" +msgstr "" + +#: ../DialogTools/RandomizationDlg.h:163 ../DialogTools/RandomizationDlg.h:177 +msgid "Randomization" +msgstr "" + +#: ../DialogTools/FieldNewCalcRateDlg.cpp:282 +msgid "Rate calculation successful." +msgstr "" + +#: ../DialogTools/FieldNewCalcRateDlg.h:43 +msgid "Rates" +msgstr "" + +#: ../GeoDa.cpp:3858 +msgid "Rates Variable Settings" +msgstr "" + +#: ../Explore/MapNewView.cpp:3895 +msgid "Raw Rate Smoothed Variable Settings" +msgstr "" + +#: ../ShapeOperations/WeightUtils.cpp:484 +#, c-format +msgid "" +"Record order specified, but found minimum and maximum observation values of " +"%d and %d which is incompatible with number of observations specified in " +"first line of weights file: %d ." +msgstr "" + +#: ../GeneralWxUtils.cpp:47 +msgid "Redo" +msgstr "" + +#: ../DialogTools/RegressionDlg.h:51 ../DialogTools/RegressionDlg.h:53 +#: ../DialogTools/RegressionDlg.h:60 +msgid "Regression" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:851 +msgid "Regression Output Text File" +msgstr "" + +#: ../DialogTools/RegressionReportDlg.h:33 +#: ../DialogTools/RegressionReportDlg.h:40 +msgid "Regression Report" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:79 ../Explore/MapLayerTree.cpp:793 +msgid "Remove" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:976 +msgid "Remove Time" +msgstr "" + +#: ../DataViewer/TableFrame.cpp:649 +msgid "Rename Space-Time Variable" +msgstr "" + +#: ../DataViewer/TableFrame.cpp:256 ../DataViewer/TableFrame.cpp:652 +msgid "Rename Variable" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:414 ../Explore/ScatterNewPlotView.cpp:82 +#: ../Explore/LowessParamDlg.cpp:52 +msgid "Reset" +msgstr "" + +#: ../DialogTools/LocaleSetupDlg.cpp:88 +msgid "Reset to system locale information" +msgstr "" + +#: ../DialogTools/LocaleSetupDlg.cpp:86 +msgid "" +"Reset to system locale successfully. Please re-open current project with " +"system locale." +msgstr "" + +#: ../Explore/MapLayoutView.cpp:37 +msgid "Resolution(dpi):" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:55 +msgid "Right" +msgstr "" + +#: ../Explore/GroupingMapView.cpp:58 +msgid "Root Variable:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:183 ../DialogTools/PCASettingsDlg.cpp:99 +#: ../DialogTools/RedcapDlg.cpp:189 ../DialogTools/MDSDlg.cpp:104 +#: ../DialogTools/SkaterDlg.cpp:155 ../DialogTools/HDBScanDlg.cpp:211 +#: ../DialogTools/KMeansDlg.cpp:176 ../DialogTools/HClusterDlg.cpp:200 +#: ../DialogTools/SpectralClusteringDlg.cpp:274 +#: ../DialogTools/RandomizationDlg.cpp:815 +#: ../DialogTools/RandomizationDlg.cpp:830 +msgid "Run" +msgstr "" + +#: ../Explore/LineChartView.cpp:169 +msgid "Run Diff-in-Diff Test" +msgstr "" + +#: ../Explore/LineChartView.cpp:2215 +msgid "S.D" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:226 +msgid "" +"SVD will be automatically used for PCA since the number of rows is less than " +"the number of columns." +msgstr "" + +#: ../Explore/CovSpView.cpp:404 +msgid "Sample Autocorrelation" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:194 +msgid "Sample Size:" +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:101 ../DialogTools/HDBScanDlg.cpp:212 +#: ../Explore/MapLayoutView.cpp:382 ../GeneralWxUtils.cpp:44 +msgid "Save" +msgstr "" + +#: ../Explore/MapNewView.cpp:1670 ../Explore/ScatterNewPlotView.cpp:707 +msgid "Save " +msgstr "" + +#: ../DialogTools/SaveAsDlg.cpp:151 +msgid "Save As Datasource" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:434 +msgid "Save As has been cancelled." +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:1707 +msgid "Save Categories to Table" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:174 ../DialogTools/RedcapDlg.cpp:180 +#: ../DialogTools/SkaterDlg.cpp:146 ../DialogTools/HDBScanDlg.cpp:202 +#: ../DialogTools/KMeansDlg.cpp:167 ../DialogTools/HClusterDlg.cpp:191 +#: ../DialogTools/SpectralClusteringDlg.cpp:263 +msgid "Save Cluster in Field:" +msgstr "" + +#: ../GeneralWxUtils.cpp:107 +msgid "Save Details" +msgstr "" + +#: ../Explore/LineChartView.cpp:1557 +msgid "Save Diff-in-Diff Test Results" +msgstr "" + +#: ../Explore/LineChartView.cpp:168 +msgid "Save Dummy" +msgstr "" + +#: ../Project.cpp:911 +msgid "Save Duplicate Thiessen Polygon Ids" +msgstr "" + +#: ../Explore/ScatterPlotMatView.cpp:172 +msgid "Save Image As" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:1204 ../Explore/MapLayoutView.cpp:427 +#: ../TemplateFrame.cpp:572 ../GeneralWxUtils.cpp:511 +msgid "Save Image to File" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:331 +msgid "Save OSM roads file" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:356 +msgid "Save OSM roads to file successfully." +msgstr "" + +#: ../DialogTools/SaveAsDlg.h:41 +msgid "Save Project File As..." +msgstr "" + +#: ../Explore/MapNewView.cpp:2861 +#, c-format +msgid "Save Rates - %s over %s" +msgstr "" + +#: ../DialogTools/RegressionReportDlg.cpp:98 +#: ../DialogTools/RegressionDlg.cpp:1091 +msgid "Save Regression Results" +msgstr "" + +#: ../DialogTools/SaveToTableDlg.h:55 +msgid "Save Results" +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:653 +msgid "Save Results to Table: " +msgstr "" + +#: ../DialogTools/HDBScanDlg.cpp:302 +msgid "Save Results: HDBScan (Core Distances/Probabilities/Outliers)" +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:765 +msgid "Save Results: Local Join Count stats, " +msgstr "" + +#: ../Explore/LocalGearyMapNewView.cpp:992 +msgid "Save Results: LocalGeary" +msgstr "" + +#: ../DialogTools/MDSDlg.cpp:294 +msgid "Save Results: MDS" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:936 +msgid "Save Results: Moran's I" +msgstr "" + +#: ../DialogTools/SaveSelectionDlg.h:38 +msgid "Save Selection" +msgstr "" + +#: ../DialogTools/RedcapDlg.cpp:191 ../DialogTools/SkaterDlg.cpp:157 +msgid "Save Spanning Tree" +msgstr "" + +#: ../DialogTools/RedcapDlg.cpp:390 ../DialogTools/SkaterDlg.cpp:228 +msgid "Save Spanning Tree to a Weights File" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:208 +msgid "Save Statistics file" +msgstr "" + +#: ../Explore/LineChartView.cpp:174 +msgid "Save Test Results" +msgstr "" + +#: ../Project.cpp:631 +#, c-format +msgid "" +"Save as data source (%s) failed.\n" +"\n" +"Details:" +msgstr "" + +#: ../Project.cpp:607 ../DialogTools/ExportDataDlg.cpp:616 +msgid "Save data source progress dialog" +msgstr "" + +#: ../DialogTools/SaveAsDlg.cpp:132 +#, c-format +msgid "" +"Save is not supported on current data source type: %s. Please try to use " +"\"File->Save As\" other data source. However, the project file can still be " +"saved as other project file." +msgstr "" + +#: ../DialogTools/HClusterDlg.cpp:201 +msgid "Save/Show Map" +msgstr "" + +#: ../DialogTools/SaveAsDlg.cpp:244 ../GeoDa.cpp:1517 +msgid "Saved successfully." +msgstr "" + +#: ../Project.cpp:618 +msgid "Saving data source cancelled." +msgstr "" + +#: ../Project.cpp:608 ../DialogTools/ExportDataDlg.cpp:617 +msgid "Saving data..." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:522 +msgid "Saving failed: GeoDa can't save as empty datasource." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:633 +#, c-format +msgid "" +"Saving to data source (%s) failed.\n" +"\n" +"Details: %s" +msgstr "" + +#: ../Explore/MapLayoutView.cpp:372 +msgid "Scale Basemap" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:375 ../Explore/BoxNewPlotView.cpp:221 +msgid "Scale Options" +msgstr "" + +#: ../Explore/ScatterNewPlotView.h:278 +msgid "Scatter Plot" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:522 +#, c-format +msgid "Scatter Plot - x: %s, y: %s" +msgstr "" + +#: ../Explore/CorrelogramView.h:63 ../Explore/ScatterPlotMatView.h:84 +#: ../GeoDa.cpp:3153 +msgid "Scatter Plot Matrix" +msgstr "" + +#: ../Explore/ScatterPlotMatView.cpp:367 +msgid "Scatter Plot Matrix Help" +msgstr "" + +#: ../Explore/ScatterPlotMatView.cpp:364 +msgid "Scatter Plot Matrix Variables Add/Remove" +msgstr "" + +#: ../GeoDa.cpp:3109 +msgid "Scatter Plot Variables" +msgstr "" + +#: ../Explore/SimpleScatterPlotCanvas.cpp:209 +#, c-format +msgid "Scatter Plot- x: %s, y: %s" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.h:114 +#: ../DialogTools/VariableSettingsDlg.h:123 +msgid "Second Variable (Y)" +msgstr "" + +#: ../GeoDa.cpp:2725 +msgid "Second Variable (Y/Latitude)" +msgstr "" + +#: ../GeneralWxUtils.cpp:54 +msgid "Select All" +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:406 +msgid "Select ID Variable (Optional)" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:217 +#: ../DialogTools/AbstractClusterDlg.cpp:236 +msgid "Select Variables" +msgstr "" + +#: ../DialogTools/MultiVarSettingsDlg.cpp:101 +msgid "Select Variables (Multi-Selection)" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:78 +msgid "Select a file:" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:280 +msgid "Select an existing *.gdb directory, or create an New Folder named *.gdb" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:160 +msgid "Select color scheme:" +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:591 +msgid "" +"Select field is not integer type. Default record order will be used instead." +msgstr "" + +#: ../Explore/MapLayerTree.cpp:56 +msgid "Select layer" +msgstr "" + +#: ../wxTranslationHelper.cpp:162 +msgid "Select the language" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:102 +msgid "Select variable " +msgstr "" + +#: ../DialogTools/3DControlPan.cpp:130 +msgid "Select, hold CMD for brushing" +msgstr "" + +#: ../DialogTools/RandomizationDlg.cpp:838 ../Explore/LineChartView.cpp:708 +#: ../Explore/LineChartView.cpp:714 ../Explore/LineChartView.cpp:2231 +#: ../Explore/LineChartView.cpp:2255 ../Explore/LineChartView.cpp:2304 +msgid "Selected" +msgstr "" + +#: ../Explore/LineChartView.cpp:338 +msgid "Selected vs. Unselected" +msgstr "" + +#: ../DialogTools/RangeSelectionDlg.h:48 +msgid "Selection Tool" +msgstr "" + +#: ../GeoDa.cpp:281 +msgid "Send Crash Report" +msgstr "" + +#: ../GeoDa.cpp:6372 +msgid "September" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:585 +msgid "Set Association Dialog" +msgstr "" + +#: ../DialogTools/AdjustYAxisDlg.h:65 +msgid "Set Display Precision" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:738 +msgid "Set Highlight Association" +msgstr "" + +#: ../osm/CsvFieldConfDlg.cpp:158 ../DialogTools/CsvFieldConfDlg.cpp:160 +msgid "Set Number Separators" +msgstr "" + +#: ../DialogTools/PermutationCounterDlg.h:33 +#: ../DialogTools/PermutationCounterDlg.h:39 +msgid "Set Number of Permutation" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:311 +msgid "Set number of CPU cores manually:" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:303 +msgid "Set seed for randomization:" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:400 +msgid "" +"Set the threshold to bridge the gap between disconnected polygons (often " +"caused by digitizing errors). The value depends on your measurement unit (e." +"g. 1 foot or 0.0000001 degrees). Use the weights histogram to detect " +"neighborless observations." +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:131 ../DialogTools/PreferenceDlg.cpp:202 +msgid "Set transparency of highlighted objects in selection:" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:144 ../DialogTools/PreferenceDlg.cpp:221 +msgid "Set transparency of unhighlighted objects in selection:" +msgstr "" + +#: ../ShapeOperations/OGRLayerProxy.cpp:290 +#: ../ShapeOperations/OGRLayerProxy.cpp:300 +#: ../ShapeOperations/OGRLayerProxy.cpp:310 +#: ../ShapeOperations/OGRLayerProxy.cpp:320 +#: ../ShapeOperations/OGRLayerProxy.cpp:330 +msgid "Set value to cell failed." +msgstr "" + +#: ../DialogTools/LocaleSetupDlg.h:40 +msgid "Setup Locale of GeoDa Table" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:168 +msgid "Setup co-locations:" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:264 +msgid "Show CSV Configuration in Merge Data Dialog:" +msgstr "" + +#: ../Explore/MapLayoutView.cpp:364 +msgid "Show Legend" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:257 +msgid "Show Recent/Sample Data panel in Connect Datasource Dialog:" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:40 +msgid "Show connect line" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:428 +msgid "Simulated Annealing" +msgstr "" + +#: ../DialogTools/SkaterDlg.cpp:61 +msgid "Skater Settings" +msgstr "" + +#: ../DialogTools/FieldNewCalcRateDlg.cpp:277 +msgid "" +"Some calculated values were undefined and this is most likely due to " +"neighborless observations in the weight matrix. Rate calculation successful " +"for observations with neighbors." +msgstr "" + +#: ../DataViewer/VarOrderPtree.cpp:147 +#, c-format +msgid "Space-time variables with duplicate name \"%s\" found." +msgstr "" + +#: ../DialogTools/HClusterDlg.cpp:170 +msgid "Spatial Constraint:" +msgstr "" + +#: ../Explore/CovSpView.h:97 ../Explore/CovSpView.cpp:187 +msgid "Spatial Correlogram" +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:567 +msgid "" +"Spatial Join can not be applied on two points layers. Please select another " +"layer." +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:643 +msgid "" +"Spatial Join can not be applied on unknonwn layers. Please select another " +"layer." +msgstr "" + +#: ../GeoDa.cpp:2572 +msgid "Spatial Join does not work with Table only datasource." +msgstr "" + +#: ../DialogTools/FieldNewCalcLagDlg.h:42 +#: ../Explore/LisaScatterPlotView.cpp:970 +msgid "Spatial Lag" +msgstr "" + +#: ../Explore/MapNewView.cpp:3934 ../GeoDa.cpp:5229 +msgid "Spatial Rate Smoothed Variable Settings" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:647 ../DialogTools/RegressionDlg.cpp:703 +msgid "" +"Spatial lag and error regressions require symmetric weights (not KNN). You " +"can still use KNN weights to obtain spatial diagnostics for classic " +"regressions." +msgstr "" + +#: ../DialogTools/FieldNewCalcSpecialDlg.h:45 +msgid "Special" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:462 +#, c-format +msgid "Specified id field (%s) not found in currently loaded Table." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:450 +#, c-format +msgid "Specified key (%d) not found in currently loaded Table." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:456 +#, c-format +msgid "Specified key (%s) not found in currently loaded Table." +msgstr "" + +#: ../ShapeOperations/WeightUtils.cpp:284 +#: ../ShapeOperations/WeightUtils.cpp:534 +#: ../ShapeOperations/WeightUtils.cpp:766 +#, c-format +msgid "" +"Specified key value field \"%s\" in weights file contains duplicate values " +"in the currently loaded Table." +msgstr "" + +#: ../ShapeOperations/WeightUtils.cpp:259 +#: ../ShapeOperations/WeightUtils.cpp:508 +#: ../ShapeOperations/WeightUtils.cpp:754 +#, c-format +msgid "" +"Specified key value field \"%s\" on first line of weights file is not an " +"integer type in the currently loaded Table." +msgstr "" + +#: ../ShapeOperations/WeightUtils.cpp:251 +#: ../ShapeOperations/WeightUtils.cpp:500 +#: ../ShapeOperations/WeightUtils.cpp:746 +#, c-format +msgid "" +"Specified key value field \"%s\" on first line of weights file not found in " +"currently loaded Table." +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:757 +#, c-format +msgid "Spectral Clustering Map (%d clusters)" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:59 +msgid "Spectral Clustering Settings" +msgstr "" + +#: ../Explore/CatClassification.cpp:1984 +msgid "Standard Deviation" +msgstr "" + +#: ../GeoDa.cpp:3133 +msgid "Standard Deviation Color" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:497 +msgid "Standard Deviation Map" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:964 +msgid "Standardized Data" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:324 +msgid "Stopping criterion for power iteration:" +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:314 +msgid "Submit Bug Error" +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:236 +msgid "Submit Bug Report" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:494 ../DialogTools/DissolveDlg.cpp:348 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:283 +#: ../DialogTools/AggregateDlg.cpp:339 ../DialogTools/WeightsManDlg.cpp:297 +#: ../DialogTools/CreatingWeightDlg.cpp:1775 +#: ../DataViewer/MergeTableDlg.cpp:754 ../DataViewer/MergeTableDlg.cpp:883 +msgid "Success" +msgstr "" + +#: ../DialogTools/FieldNewCalcRateDlg.cpp:278 +msgid "Success / Warning" +msgstr "" + +#: ../DialogTools/DissolveDlg.cpp:347 ../DialogTools/AggregateDlg.cpp:339 +msgid "Successful aggregation." +msgstr "" + +#: ../DialogTools/FieldNameCorrectionDlg.cpp:162 +msgid "Suggested field name:" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:882 ../DialogTools/HDBScanDlg.cpp:230 +#: ../DialogTools/HClusterDlg.cpp:219 ../Explore/CorrelogramView.cpp:250 +msgid "Summary" +msgstr "" + +#: ../Explore/MapNewView.cpp:1286 ../Explore/ScatterNewPlotView.cpp:354 +#: ../Explore/BoxNewPlotView.cpp:178 ../Explore/LisaScatterPlotView.cpp:139 +#, c-format +msgid "Synchronize %s with Time Control" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:115 +msgid "System" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:237 +msgid "System:" +msgstr "" + +#: ../GdaConst.cpp:458 ../GeoDa.cpp:594 ../GeoDa.cpp:709 ../GeoDa.cpp:1417 +msgid "Table" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:126 +msgid "Tabu Length:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:425 +msgid "Tabu Search" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:580 +msgid "" +"Tabu length for Tabu Search algorithm has to be an integer number larger " +"than 1 (e.g. 85)." +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:426 +msgid "Tabu length:" +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:124 +msgid "" +"Thank you for helping us improve GeoDa with your bug report! \n" +"\n" +"You can track our response and add screenshots or details here (or email us " +"at spatial@uchicago.edu):" +msgstr "" + +#: ../DataViewer/DataSource.cpp:364 +#, c-format +msgid "" +"The GeoDa project file cannot find one or more associated data sources.\n" +"\n" +"Details: GeoDa is looking for: %s\n" +"\n" +"Tip: You can open the .gda project file in a text editor to modify the " +"path(s) of the data source associated with your project." +msgstr "" + +#: ../GeoDa.cpp:842 +msgid "" +"The Table should always be open, although somtimes it is hidden while the " +"project is open. This condition has been violated. Please report this to " +"the program developers." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:960 +msgid "The between-cluster sum of squares:\t" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:381 +msgid "" +"The categories of the selected variables do not overlap in space. Please " +"select other variables." +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:500 ../DialogTools/RedcapDlg.cpp:511 +#: ../DialogTools/SkaterDlg.cpp:496 ../DialogTools/HClusterDlg.cpp:609 +msgid "" +"The connectivity of selected spatial weights is incomplete, please adjust " +"the spatial weights." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1326 +msgid "" +"The currently entered threshold value is not a valid number. Please move " +"the slider, or enter a valid number." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1182 +msgid "" +"The currently entered threshold value is not a valid number. Please move the " +"slider, or enter a valid number." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1192 +#: ../DialogTools/CreatingWeightDlg.cpp:1327 +#, c-format +msgid "" +"The currently entered threshold value of %f is less than %f which is the " +"minimum value for which there will be no neighborless observations " +"(isolates). \n" +"\n" +"Press Yes to proceed anyhow, press No to abort." +msgstr "" + +#: ../Project.cpp:717 +msgid "The data source is read only. Please try to save as other data source." +msgstr "" + +#: ../DialogTools/Bnd2ShpDlg.cpp:247 +msgid "The first line should have comma separated number of rows and ID name!" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:401 +msgid "" +"The geometries will not be saved when exporting to a Table-only data " +"source.\n" +"\n" +"Do you want to continue?" +msgstr "" + +#: ../Explore/LisaScatterPlotView.cpp:1054 +msgid "" +"The last seed used by the pseudo random\n" +"number generator was " +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:585 +#, c-format +msgid "" +"The length of a string field must be at least %d and at most %d. Keeping " +"original value." +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:600 +#, c-format +msgid "" +"The length of an integral numeric field must be at least %d and at most %d. " +"Keeping original value." +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:611 +#, c-format +msgid "" +"The length of an non-integral numeric field must be at least %d and at most " +"%d. Keeping original value." +msgstr "" + +#: ../DataViewer/OGRTable.cpp:1621 +#, c-format +msgid "" +"The length of field name should be between 1 and %d.\n" +"Current field length (%d) is not valid" +msgstr "" + +#: ../Explore/MapNewView.cpp:1806 +msgid "" +"The new theme chosen will no longer include rates smoothing. Please use the " +"Rates submenu to choose a theme with rates again." +msgstr "" + +#: ../Regression/DiagnosticReport.cpp:45 +msgid "" +"The number of covariates should be more than the number of observations." +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:637 +#, c-format +msgid "" +"The number of decimal places for a non-integral numeric field must be at " +"least %d and at most %d. Keeping original value." +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:663 +#, c-format +msgid "" +"The number of displayed decimal places for a non-integral numeric field must " +"be at least %d and at most %d. Keeping original value." +msgstr "" + +#: ../DialogTools/RedcapDlg.cpp:578 ../DialogTools/SkaterDlg.cpp:600 +msgid "The number of identified clusters is less than " +msgstr "" + +#: ../ShapeOperations/WeightUtils.cpp:447 +#, c-format +msgid "" +"The number of observations specified in chosen weights file is %d, but the " +"number in the current Table is %d, which is incompatible." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:445 +msgid "" +"The number of observations specified in chosen weights file is incompatible " +"with current Table." +msgstr "" + +#: ../DataViewer/MergeTableDlg.cpp:858 +#, c-format +msgid "" +"The number of records in current table is larger than the number of records " +"in import table. Please choose import table >= %d records" +msgstr "" + +#: ../DialogTools/SaveAsDlg.cpp:143 +#, c-format +msgid "" +"The original datasource %s is not a valid file. GeoDa \"Save\" only works on " +"file datasource." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:961 +msgid "The ratio of between to total sum of squares:\t" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:818 +msgid "" +"The sample size for random sampling is too small.\n" +"Please increase the number of iterations." +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:702 +#: ../DialogTools/ConnectDatasourceDlg.cpp:920 +msgid "" +"The selected database driver is not supported on this platform. Please check " +"GeoDa website for more information about database support and connection." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:270 +#, c-format +msgid "" +"The selected group variable should contains %d items. Please modify the " +"group variable in Time Editor, or select another variable." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:988 +#, c-format +msgid "" +"The selected group variable should contains %d items. Please modify the " +"group variable in Time->Time Editor, or select another variable." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:965 +#, c-format +msgid "" +"The selected variable %s is not valid. If it's a grouped variable, please " +"modify it in Time->Time Editor. Or please select another variable." +msgstr "" + +#: ../GeoDa.cpp:3374 ../GeoDa.cpp:3796 +msgid "The selected variable is not numeric. Please select another variable." +msgstr "" + +#: ../DataViewer/MergeTableDlg.cpp:851 +msgid "" +"The set of values in the import key fields has no match in current table. " +"Please choose keys with matching sets of values." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:957 +msgid "The total sum of squares:\t" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:959 +msgid "The total within-cluster sum of squares:\t" +msgstr "" + +#: ../Explore/PCPNewView.cpp:292 ../Explore/CartogramNewView.cpp:352 +#: ../Explore/CatClassification.cpp:1968 ../Explore/ScatterNewPlotView.cpp:542 +#: ../Explore/ConditionalMapView.cpp:279 ../Explore/ConditionalNewView.cpp:340 +msgid "Themeless" +msgstr "" + +#: ../DialogTools/SpatialJoinDlg.cpp:656 +msgid "" +"There are spatial objects being counted more than once. Please check the " +"results." +msgstr "" + +#: ../GeoDa.cpp:874 ../GeoDa.cpp:987 +msgid "There are unsaved data source or weights/time definition changes." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:553 +msgid "" +"There is a view could not be closed. Please manually close and try again." +msgstr "" + +#: ../DialogTools/PCASettingsDlg.cpp:243 +msgid "" +"There is an error during PCA calculation. Please check if the data is valid." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1289 +msgid "" +"There is at least one neighborless observation. Check the islands in weights " +"histogram and linked map." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1583 +msgid "" +"There is at least one neighborless observation. Check the weights histogram " +"and linked map to see if the islands are real or not. If not, adjust the " +"distance threshold (points) or the precision threshold (polygons)." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:555 +msgid "" +"There is at least one view could not be closed. Please manually close and " +"try again." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:544 +msgid "" +"There is at least one view open that depends on this matrix. Ok to close " +"these views and remove?" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:542 +msgid "" +"There is one other view open that depends on this matrix. Ok to close this " +"view and remove?" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:506 +msgid "There was a problem associating the weights file." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1502 +#: ../DialogTools/CreatingWeightDlg.cpp:1521 +msgid "" +"There was a problem generating voronoi contiguity neighbors. Please report " +"this." +msgstr "" + +#: ../Project.cpp:1597 +msgid "There was a problem reading the layer" +msgstr "" + +#: ../Project.cpp:1623 +msgid "There was a problem reading the table" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:498 +msgid "There was a problem requesting the weights file." +msgstr "" + +#: ../Explore/MapNewView.cpp:1953 +msgid "These are the row numbers of the records without location information." +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.h:115 +#: ../DialogTools/VariableSettingsDlg.h:124 +msgid "Third Variable (Z)" +msgstr "" + +#: ../DataViewer/OGRTable.cpp:1613 +msgid "" +"This datasource is not supported. Please export to other datasource that " +"GeoDa supports first." +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:646 ../DialogTools/RedcapDlg.cpp:620 +#: ../DialogTools/SkaterDlg.cpp:642 ../DialogTools/HDBScanDlg.cpp:571 +#: ../DialogTools/KMeansDlg.cpp:528 ../DialogTools/HClusterDlg.cpp:311 +#: ../DialogTools/SpectralClusteringDlg.cpp:719 +msgid "" +"This field name already exists (non-integer type). Please input a unique " +"name." +msgstr "" + +#: ../DialogTools/Bnd2ShpDlg.cpp:102 ../DialogTools/Bnd2ShpDlg.cpp:111 +#: ../DialogTools/Bnd2ShpDlg.cpp:151 +msgid "This format is not supported." +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:1286 +msgid "" +"This is the list of existing grouped variables. As new groups are created, " +"they will appear on this list. You can open an existing .gda file and edit " +"it here." +msgstr "" + +#: ../Explore/CovSpView.cpp:519 +#, c-format +msgid "" +"This view currently supports data with at most 1000 observations. The " +"Spatial Correlogram Scatterplot plots distances between all pairs of " +"observations. The current data set has %d observations and %d unordered " +"pairs of observations." +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:162 +msgid "Time" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.h:50 +msgid "Time Editor" +msgstr "" + +#: ../Explore/MapNewView.cpp:1294 ../Explore/MapNewView.cpp:1295 +#: ../Explore/CartogramNewView.cpp:277 ../Explore/CartogramNewView.cpp:278 +#: ../Explore/ScatterNewPlotView.cpp:377 ../Explore/ScatterNewPlotView.cpp:378 +#: ../Explore/BoxNewPlotView.cpp:225 ../Explore/BoxNewPlotView.cpp:226 +#: ../Explore/LisaScatterPlotView.cpp:148 +#: ../Explore/LisaScatterPlotView.cpp:149 ../Explore/HistogramView.cpp:235 +#: ../Explore/HistogramView.cpp:236 +msgid "Time Variable Options" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:60 +msgid "Time:" +msgstr "" + +#: ../GeoDa.cpp:527 ../GeoDa.cpp:528 ../GeoDa.cpp:529 ../GeoDa.cpp:530 +#: ../GeoDa.cpp:531 ../GeoDa.cpp:532 ../GeoDa.cpp:533 ../GeoDa.cpp:708 +msgid "Tools" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:51 +msgid "Top" +msgstr "" + +#: ../DialogTools/RedcapDlg.cpp:380 ../DialogTools/AbstractClusterDlg.cpp:454 +msgid "Transformation:" +msgstr "" + +#: ../DialogTools/MaxpDlg.cpp:434 ../DialogTools/KMeansDlg.cpp:342 +#: ../DialogTools/HClusterDlg.cpp:456 +#: ../DialogTools/SpectralClusteringDlg.cpp:534 +msgid "Transformation:\t" +msgstr "" + +#: ../osm/uiTravelDistances.h:15 ../osm/uiTravelDistances.h:18 +msgid "Travel Distances Tool" +msgstr "" + +#: ../DialogTools/VarGroupingEditorDlg.cpp:179 +msgid "Type" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:895 +msgid "Unable to overwrite " +msgstr "" + +#: ../Explore/MLJCMapNewView.cpp:62 ../Explore/AbstractClusterMap.cpp:66 +#: ../Explore/LocalGearyMapNewView.cpp:77 ../Explore/GetisOrdMapNewView.cpp:74 +#: ../Explore/ConditionalClusterMapView.cpp:1374 +#: ../Explore/ConditionalClusterMapView.cpp:1589 +#: ../Explore/ConditionalClusterMapView.cpp:1801 ../GdaConst.cpp:381 +msgid "Undefined" +msgstr "" + +#: ../GeneralWxUtils.cpp:46 +msgid "Undo" +msgstr "" + +#: ../Explore/CatClassification.cpp:1972 +msgid "Unique Values" +msgstr "" + +#: ../DialogTools/FieldNewCalcUniDlg.h:44 +msgid "Univariate" +msgstr "" + +#: ../DialogTools/ConnectDatasourceDlg.cpp:852 +msgid "Unknow exception. Please contact GeoDa support." +msgstr "" + +#: ../DialogTools/RandomizationDlg.cpp:842 ../Explore/LineChartView.cpp:709 +#: ../Explore/LineChartView.cpp:715 ../Explore/LineChartView.cpp:2266 +#: ../Explore/LineChartView.cpp:2282 ../Explore/LineChartView.cpp:2315 +msgid "Unselected" +msgstr "" + +#: ../Explore/VarsChooserDlg.cpp:72 +msgid "Up" +msgstr "" + +#: ../DialogTools/AutoUpdateDlg.cpp:489 +msgid "Update GeoDa completed" +msgstr "" + +#: ../DialogTools/AutoUpdateDlg.cpp:497 +msgid "Update GeoDa failed" +msgstr "" + +#: ../Project.cpp:279 +msgid "" +"Update project information failed. \n" +"\n" +"Details: The layer information defined in project file does no match opened " +"datasource." +msgstr "" + +#: ../Explore/CatClassification.cpp:231 ../Explore/CatClassification.cpp:628 +#: ../GdaConst.cpp:401 +msgid "Upper outlier" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:332 +msgid "Use GPU to Accelerate computation:" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:532 +msgid "Use Power Iteration method:\tMax iterations=" +msgstr "" + +#: ../DialogTools/MDSDlg.cpp:69 ../DialogTools/SpectralClusteringDlg.cpp:159 +msgid "Use Power Iteration:" +msgstr "" + +#: ../Explore/MapLayoutView.cpp:367 +msgid "Use Transparent Legend Background" +msgstr "" + +#: ../DialogTools/SpectralClusteringDlg.cpp:146 +msgid "Use Weights:" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:88 +msgid "Use bounding box of input datasource" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:121 +msgid "Use classic yellow cross-hatching to highlight selection in maps:" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:245 +msgid "Use geometric centroids" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:942 +msgid "Use geometric centroids (weighting): \n" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:93 +msgid "Use outline + motorway(~bbox) of input datasource" +msgstr "" + +#: ../osm/uiRoadDownload.cpp:91 +msgid "Use outline of input datasource" +msgstr "" + +#: ../DialogTools/RandomizationDlg.cpp:106 +msgid "Use selected as specified alpha level" +msgstr "" + +#: ../DialogTools/PreferenceDlg.cpp:296 ../DialogTools/MaxpDlg.cpp:153 +#: ../DialogTools/RedcapDlg.cpp:158 ../DialogTools/SkaterDlg.cpp:124 +#: ../DialogTools/KMeansDlg.cpp:119 +#: ../DialogTools/SpectralClusteringDlg.cpp:211 +#: ../Explore/CorrelParamsDlg.cpp:212 +msgid "Use specified seed:" +msgstr "" + +#: ../DialogTools/SelectWeightsDlg.cpp:346 ../DialogTools/WeightsManDlg.cpp:879 +msgid "Value" +msgstr "" + +#: ../DialogTools/RangeSelectionDlg.cpp:530 +#: ../DialogTools/SaveSelectionDlg.cpp:399 +msgid "Values assigned to target field successfully." +msgstr "" + +#: ../DialogTools/FieldNewCalcSheetDlg.h:48 +#: ../DialogTools/FieldNewCalcSheetDlg.h:55 +msgid "Var Calc Container" +msgstr "" + +#: ../Explore/CovSpView.cpp:259 ../GeoDa.cpp:3240 +msgid "Variable" +msgstr "" + +#: ../Explore/CovSpView.cpp:641 +#, c-format +msgid "Variable %s at time %d could not be standardized." +msgstr "" + +#: ../Explore/CovSpView.cpp:599 +#, c-format +msgid "Variable %s at time %d is a placeholer" +msgstr "" + +#: ../Explore/CovSpView.cpp:597 ../Explore/CovSpView.cpp:639 +#, c-format +msgid "Variable %s is a placeholer" +msgstr "" + +#: ../DataViewer/DataViewerDeleteColDlg.cpp:94 +#, c-format +msgid "" +"Variable %s is a time-grouped variable. Please ungroup this variable to " +"delete." +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:312 +#, c-format +msgid "" +"Variable %s is no longer in the Table. Please close and reopen the " +"Regression Dialog to synchronize with Table data." +msgstr "" + +#: ../DialogTools/MultiVarSettingsDlg.cpp:227 ../DialogTools/MaxpDlg.cpp:555 +#: ../DialogTools/AbstractClusterDlg.cpp:576 +#: ../DialogTools/AbstractClusterDlg.cpp:719 +#: ../Explore/ColocationMapView.cpp:329 +#: ../DataViewer/DataViewerDeleteColDlg.cpp:87 +#, c-format +msgid "" +"Variable %s is no longer in the Table. Please close and reopen this dialog " +"to synchronize with Table data." +msgstr "" + +#: ../Explore/PCPNewView.cpp:117 ../Explore/VarsChooserDlg.cpp:337 +#, c-format +msgid "Variable %s is not valid. Please select another variable." +msgstr "" + +#: ../Explore/CovSpView.cpp:526 +#, c-format +msgid "Variable %s is specified. " +msgstr "" + +#: ../Explore/CovSpView.cpp:259 ../GeoDa.cpp:3240 +msgid "Variable Choice" +msgstr "" + +#: ../DialogTools/SaveToTableDlg.cpp:98 +msgid "Variable Name" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:53 +msgid "Variable Properties" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:84 +msgid "Variable Properties - " +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.h:112 +#: ../DialogTools/VariableSettingsDlg.h:121 ../Explore/MapNewView.cpp:3835 +#: ../GeoDa.cpp:3089 ../GeoDa.cpp:4752 +msgid "Variable Settings" +msgstr "" + +#: ../GeoDa.cpp:3374 ../GeoDa.cpp:3797 +msgid "Variable Type Error" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:1023 +msgid "Variable Value Error" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:551 +#, c-format +msgid "" +"Variable name \"%s\" is either a duplicate or is invalid. Please enter an " +"alternative, non-duplicate variable name." +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:534 +#, c-format +msgid "" +"Variable name \"%s\" is either a duplicate or is invalid. Please enter an " +"alternative, non-duplicate variable name. The first character must be a " +"letter, and the remaining characters can be either letters, numbers or " +"underscores. For DBF table, a valid variable name is between one and ten " +"characters long." +msgstr "" + +#: ../DialogTools/SaveToTableDlg.cpp:350 +#: ../DialogTools/SaveSelectionDlg.cpp:295 +msgid "Variable name can't be empty." +msgstr "" + +#: ../DataViewer/TableFrame.cpp:660 +msgid "" +"Variable name is either a duplicate or is invalid. Please\n" +"enter an alternative, non-duplicate variable name.\n" +"\n" +msgstr "" + +#: ../Explore/CorrelParamsDlg.cpp:53 ../Explore/LineChartView.cpp:126 +msgid "Variable:" +msgstr "" + +#: ../Explore/VarsChooserDlg.cpp:52 +msgid "Variables" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:860 ../Explore/MLJCMapNewView.cpp:928 +#: ../Explore/LisaMapNewView.cpp:343 ../Explore/LocalGearyMapNewView.cpp:1137 +#: ../Explore/GetisOrdMapNewView.cpp:1068 ../GeoDa.cpp:2925 ../GeoDa.cpp:2948 +#: ../GeoDa.cpp:2970 +msgid "Vertical Cells" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1503 +#: ../DialogTools/CreatingWeightDlg.cpp:1522 +msgid "Voronoi Contiguity Error" +msgstr "" + +#: ../Project.cpp:1326 ../DialogTools/ExportDataDlg.cpp:305 +#: ../DialogTools/ExportDataDlg.cpp:333 ../DialogTools/MaxpDlg.cpp:493 +#: ../DialogTools/MaxpDlg.cpp:501 ../DialogTools/MaxpDlg.cpp:647 +#: ../DialogTools/RedcapDlg.cpp:504 ../DialogTools/RedcapDlg.cpp:512 +#: ../DialogTools/RedcapDlg.cpp:580 ../DialogTools/RedcapDlg.cpp:621 +#: ../DialogTools/VarGroupingEditorDlg.cpp:513 +#: ../DialogTools/VarGroupingEditorDlg.cpp:1089 +#: ../DialogTools/VariableSettingsDlg.cpp:223 +#: ../DialogTools/VariableSettingsDlg.cpp:234 +#: ../DialogTools/VariableSettingsDlg.cpp:484 +#: ../DialogTools/VariableSettingsDlg.cpp:1266 +#: ../DialogTools/AbstractClusterDlg.cpp:80 ../DialogTools/SkaterDlg.cpp:489 +#: ../DialogTools/SkaterDlg.cpp:497 ../DialogTools/SkaterDlg.cpp:602 +#: ../DialogTools/SkaterDlg.cpp:643 ../DialogTools/HDBScanDlg.cpp:429 +#: ../DialogTools/HDBScanDlg.cpp:441 ../DialogTools/HDBScanDlg.cpp:572 +#: ../DialogTools/KMeansDlg.cpp:529 ../DialogTools/SaveAsDlg.cpp:134 +#: ../DialogTools/SaveAsDlg.cpp:145 ../DialogTools/CreatingWeightDlg.cpp:886 +#: ../DialogTools/CreatingWeightDlg.cpp:1167 +#: ../DialogTools/CreatingWeightDlg.cpp:1175 +#: ../DialogTools/CreatingWeightDlg.cpp:1208 +#: ../DialogTools/CreatingWeightDlg.cpp:1350 +#: ../DialogTools/SpatialJoinDlg.cpp:570 ../DialogTools/SpatialJoinDlg.cpp:594 +#: ../DialogTools/SpatialJoinDlg.cpp:616 ../DialogTools/SpatialJoinDlg.cpp:646 +#: ../DialogTools/SpatialJoinDlg.cpp:657 ../DialogTools/HClusterDlg.cpp:312 +#: ../DialogTools/HClusterDlg.cpp:602 ../DialogTools/HClusterDlg.cpp:610 +#: ../DialogTools/TimeEditorDlg.cpp:99 ../DialogTools/TimeEditorDlg.cpp:127 +#: ../DialogTools/TimeEditorDlg.cpp:143 ../DialogTools/TimeEditorDlg.cpp:159 +#: ../DialogTools/TimeEditorDlg.cpp:202 +#: ../DialogTools/SpectralClusteringDlg.cpp:720 +#: ../DialogTools/RegressionDlg.cpp:139 ../Explore/ColocationMapView.cpp:382 +#: ../Explore/MapNewView.cpp:1959 ../Explore/MapNewView.cpp:3636 +#: ../DataViewer/MergeTableDlg.cpp:379 ../DataViewer/TableFrame.cpp:552 +#: ../DataViewer/TableFrame.cpp:604 ../GeoDa.cpp:843 ../GeoDa.cpp:2604 +#: ../GeoDa.cpp:3314 ../GeoDa.cpp:3322 ../GeoDa.cpp:3361 ../GeoDa.cpp:3386 +#: ../GeoDa.cpp:3394 ../GeoDa.cpp:3445 ../GeoDa.cpp:3453 ../GeoDa.cpp:3499 +#: ../GeoDa.cpp:3507 ../GeoDa.cpp:3571 ../GeoDa.cpp:3624 ../GeoDa.cpp:3674 +#: ../GeoDa.cpp:3731 ../GeoDa.cpp:3785 ../GeoDa.cpp:3813 ../GeoDa.cpp:3867 +#: ../GeoDa.cpp:3923 ../GeoDa.cpp:3935 ../GeoDa.cpp:3970 ../GeoDa.cpp:3982 +#: ../GeoDa.cpp:3991 ../GeoDa.cpp:4026 ../GeoDa.cpp:4041 ../GeoDa.cpp:4134 +#: ../GeoDa.cpp:4193 +msgid "Warning" +msgstr "" + +#: ../Explore/ConnectivityHistView.cpp:362 +#, c-format +msgid "Warning: %d observations are neighborless." +msgstr "" + +#: ../Explore/ConnectivityHistView.cpp:364 +#, c-format +msgid "Warning: %d observations is neighborless." +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1454 +msgid "Warning: NULL geometry" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:402 +msgid "Warning: loss data" +msgstr "" + +#: ../DialogTools/FieldNewCalcLagDlg.cpp:164 +#: ../DialogTools/FieldNewCalcRateDlg.cpp:163 +msgid "Was not able to load weights matrix." +msgstr "" + +#: ../DialogTools/FieldNewCalcRateDlg.cpp:121 +msgid "Weight matrix required for chosen spatial rate method." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:254 +msgid "Weighting:" +msgstr "" + +#: ../DialogTools/VariableSettingsDlg.cpp:129 +msgid "Weights" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.h:57 ../DialogTools/CreatingWeightDlg.h:64 +msgid "Weights File Creation" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:91 +msgid "Weights Intersection" +msgstr "" + +#: ../DialogTools/WeightsManDlg.h:54 +msgid "Weights Manager" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:115 +msgid "Weights Name" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:639 ../DialogTools/RegressionDlg.cpp:695 +msgid "Weights Symmetry Check" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:94 +msgid "Weights Union" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:296 +#: ../DialogTools/CreatingWeightDlg.cpp:1774 +#, c-format +msgid "Weights file \"%s\" created successfully." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:468 +msgid "Weights file/format is not valid." +msgstr "" + +#: ../DialogTools/MultiVarSettingsDlg.cpp:109 ../DialogTools/MaxpDlg.cpp:85 +#: ../DialogTools/MaxpDlg.cpp:405 ../DialogTools/RedcapDlg.cpp:122 +#: ../DialogTools/RedcapDlg.cpp:368 ../DialogTools/SkaterDlg.cpp:99 +msgid "Weights:" +msgstr "" + +#: ../DialogTools/ReportBugDlg.h:51 +msgid "Welcome to GeoDa" +msgstr "" + +#: ../DialogTools/LisaWhat2OpenDlg.h:30 ../DialogTools/LisaWhat2OpenDlg.h:57 +#: ../DialogTools/LisaWhat2OpenDlg.h:86 +msgid "What windows to open?" +msgstr "" + +#: ../DialogTools/FieldNewCalcRateDlg.cpp:154 +msgid "" +"When \"all times\" selected for either variable, result field must also be " +"\"all times.\"" +msgstr "" + +#: ../DialogTools/FieldNewCalcDateTimeDlg.cpp:125 +#: ../DialogTools/FieldNewCalcLagDlg.cpp:128 +msgid "" +"When \"all times\" selected for variable, result field must also be \"all " +"times.\"" +msgstr "" + +#: ../Explore/MapLayoutView.cpp:35 +msgid "Width:" +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:1125 +msgid "Within cluster S.S." +msgstr "" + +#: ../DialogTools/AbstractClusterDlg.cpp:1118 +msgid "Within-cluster sum of squares:\n" +msgstr "" + +#: ../DialogTools/Bnd2ShpDlg.cpp:256 +msgid "Wrong number of rows!" +msgstr "" + +#: ../GeoDa.cpp:1525 +msgid "Wrote GeoDa Project File: " +msgstr "" + +#: ../GeoDa.cpp:3132 +msgid "X-Axis" +msgstr "" + +#: ../Project.cpp:1026 ../Project.cpp:1065 +msgid "X-Coordinates" +msgstr "" + +#: ../GeoDa.cpp:3132 +msgid "Y-Axis" +msgstr "" + +#: ../Project.cpp:1032 ../Project.cpp:1071 +msgid "Y-Coordinates" +msgstr "" + +#: ../SpatialIndAlgs.cpp:695 +msgid "" +"You can try to proceed but the current threshold distance value might be too " +"large to compute. If it fails, please input a smaller distance band (which " +"might leave some observations neighborless) or use other weights (e.g. KNN)." +msgstr "" + +#: ../GeoDa.cpp:1321 ../GeoDa.cpp:1348 +#, c-format +msgid "" +"You have requested to create a new file project %s while another project is " +"open. Please close project %s and try again." +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:223 +msgid "Your Email address (Optional):" +msgstr "" + +#: ../GeoDa.cpp:6291 +msgid "Your GeoDa is already up-to-date." +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:215 +msgid "Your Github account (Optional):" +msgstr "" + +#: ../DialogTools/DissolveDlg.cpp:240 ../DialogTools/AggregateDlg.cpp:242 +#, c-format +msgid "" +"Your table cannot be aggregated because the key field \"%s\" is unique. " +"Please use another key." +msgstr "" + +#: ../DataViewer/MergeTableDlg.cpp:365 +#, c-format +msgid "" +"Your table cannot be merged because the key field \"%s\" is not unique. \n" +"It contains undefined or duplicate values.\n" +"\n" +"Details:" +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:203 +msgid "[Please briefly describe what went wrong]" +msgstr "" + +#: ../DialogTools/ReportBugDlg.cpp:204 +msgid "[Steps you took before something went wrong]" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:716 +msgid "adaptive kernel" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:58 +msgid "and field" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:394 +msgid "autocorrelation is " +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:706 +msgid "bandwidth" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:277 +msgid "calculating..." +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:1565 +msgid "can't compute" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:982 +msgid "choice:" +msgstr "" + +#: ../DialogTools/RangeSelectionDlg.cpp:683 +#: ../DialogTools/RangeSelectionDlg.cpp:684 +msgid "choose a variable" +msgstr "" + +#: ../DialogTools/ExportCsvDlg.cpp:106 +msgid "csv file:" +msgstr "" + +#: ../DataViewer/DataSource.cpp:234 ../DataViewer/DataSource.cpp:347 +#: ../DataViewer/DataSource.cpp:459 ../DataViewer/DataSource.cpp:621 +#, c-format +msgid "datasource.type %s unknown.." +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:105 +msgid "" +"decimal\n" +"places" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:106 +msgid "" +"displayed\n" +"decimal places" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:766 +msgid "distance metric" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:773 +msgid "distance unit" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:769 +msgid "distance vars" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:813 +msgid "done" +msgstr "" + +#: ../DialogTools/ExportDataDlg.cpp:330 +msgid "ds:" +msgstr "" + +#: ../DialogTools/FieldNewCalcSpecialDlg.cpp:320 +msgid "enumerate as 1, 2, 3, ..." +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:717 ../DialogTools/WeightsManDlg.cpp:723 +#: ../DialogTools/WeightsManDlg.cpp:761 +msgid "false" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:924 +msgid "field name:" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:739 +msgid "file" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:664 ../Explore/ConnectivityHistView.cpp:379 +#: ../Explore/HistogramView.cpp:723 +msgid "from" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:747 +msgid "id variable" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:62 +msgid "in current layer." +msgstr "" + +#: ../Explore/MapLayoutView.cpp:43 +msgid "inches" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:757 +msgid "include lower orders" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:727 +msgid "inverse distance" +msgstr "" + +#: ../Explore/MapLayerTree.cpp:60 +msgid "is associated to" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:699 +msgid "kernel method" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:722 +msgid "kernel to diagonal" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:78 +msgid "large" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:104 +msgid "length" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:251 +msgid "max dist" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:801 +msgid "max neighbors" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:190 ../Explore/SimpleHistCanvas.cpp:718 +#: ../Explore/ConnectivityHistView.cpp:433 ../Explore/HistogramView.cpp:777 +msgid "max:" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:110 +msgid "" +"maximum\n" +"possible" +msgstr "" + +#: ../Explore/PCPNewView.cpp:586 +msgid "mean" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:807 +msgid "mean neighbors" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:720 ../Explore/ConnectivityHistView.cpp:435 +#: ../Explore/HistogramView.cpp:779 +msgid "mean:" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:813 +msgid "median neighbors" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:719 ../Explore/ConnectivityHistView.cpp:434 +#: ../Explore/HistogramView.cpp:778 +msgid "median:" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:251 +msgid "min dist" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:795 +msgid "min neighbors" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:189 ../Explore/SimpleHistCanvas.cpp:717 +#: ../Explore/ConnectivityHistView.cpp:432 ../Explore/HistogramView.cpp:776 +msgid "min:" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:109 +msgid "" +"minimum\n" +"possible" +msgstr "" + +#: ../Explore/MapLayoutView.cpp:43 +msgid "mm" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:1594 +msgid "need two valid regressions" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:778 +msgid "neighbors" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:741 +msgid "not saved" +msgstr "" + +#: ../Explore/ColocationMapView.cpp:704 ../Explore/ColocationMapView.cpp:708 +#: ../Explore/PCPNewView.cpp:1096 ../Explore/ConnectivityMapView.cpp:518 +#: ../Explore/SimpleScatterPlotCanvas.cpp:277 +#: ../Explore/SimpleScatterPlotCanvas.cpp:283 ../Explore/MapNewView.cpp:2949 +#: ../Explore/MapNewView.cpp:2974 ../Explore/MapNewView.cpp:2978 +#: ../Explore/MLJCMapNewView.cpp:441 ../Explore/MLJCMapNewView.cpp:445 +#: ../Explore/CartogramNewView.cpp:759 ../Explore/CartogramNewView.cpp:765 +#: ../Explore/ScatterNewPlotView.cpp:1846 +#: ../Explore/ScatterNewPlotView.cpp:1856 ../Explore/BoxNewPlotView.cpp:949 +#: ../Explore/BoxNewPlotView.cpp:953 ../Explore/ConditionalMapView.cpp:956 +#: ../Explore/ConditionalMapView.cpp:961 ../Explore/AbstractClusterMap.cpp:416 +#: ../Explore/AbstractClusterMap.cpp:420 +#: ../Explore/LocalGearyMapNewView.cpp:610 +#: ../Explore/LocalGearyMapNewView.cpp:614 +#: ../Explore/ConditionalScatterPlotView.cpp:796 +#: ../Explore/ConditionalScatterPlotView.cpp:802 +#: ../Explore/GetisOrdMapNewView.cpp:467 ../Explore/GetisOrdMapNewView.cpp:471 +#: ../Explore/GroupingMapView.cpp:434 ../Explore/GroupingMapView.cpp:438 +#: ../Explore/ConditionalClusterMapView.cpp:1238 +#: ../Explore/ConditionalClusterMapView.cpp:1243 +#: ../Explore/ConditionalClusterMapView.cpp:1666 +#: ../Explore/ConditionalClusterMapView.cpp:1671 +#: ../Explore/ConditionalClusterMapView.cpp:1882 +#: ../Explore/ConditionalClusterMapView.cpp:1887 +msgid "obs " +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:752 +msgid "order" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:107 +msgid "parent group" +msgstr "" + +#: ../Explore/MapLayoutView.cpp:43 +msgid "pixels" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:729 +msgid "power" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:251 +msgid "range, est. distance" +msgstr "" + +#: ../Explore/MapNewView.cpp:1954 +msgid "row:\n" +msgstr "" + +#: ../Explore/PCPNewView.cpp:588 +msgid "s.d." +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:721 ../Explore/ConnectivityHistView.cpp:436 +#: ../Explore/HistogramView.cpp:780 +msgid "s.d.:" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:668 ../Explore/ConnectivityHistView.cpp:383 +#: ../Explore/HistogramView.cpp:727 +msgid "sd from mean" +msgstr "" + +#: ../DialogTools/CreatingWeightDlg.cpp:1030 +#: ../DialogTools/CreatingWeightDlg.cpp:1146 +msgid "selected:" +msgstr "" + +#: ../Explore/ScatterNewPlotView.cpp:75 +msgid "small" +msgstr "" + +#: ../DataViewer/VarOrderPtree.cpp:143 +msgid "space-time variable found with no name" +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:923 +msgid "suggested title:" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:736 +msgid "symmetry" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:783 +msgid "threshold value" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:108 +msgid "time" +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:665 ../Explore/ConnectivityHistView.cpp:380 +#: ../Explore/HistogramView.cpp:724 +msgid "to" +msgstr "" + +#: ../Explore/CorrelogramView.cpp:897 +msgid "to specify variable and distance parameters." +msgstr "" + +#: ../Explore/SimpleHistCanvas.cpp:192 ../Explore/CorrelogramView.cpp:251 +msgid "total # pairs" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:717 ../DialogTools/WeightsManDlg.cpp:723 +#: ../DialogTools/WeightsManDlg.cpp:728 ../DialogTools/WeightsManDlg.cpp:759 +msgid "true" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:695 +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:103 +msgid "type" +msgstr "" + +#: ../Explore/PCPNewView.cpp:1079 ../Explore/ScatterNewPlotView.cpp:1821 +#: ../Explore/BoxNewPlotView.cpp:922 ../Explore/BoxNewPlotView.cpp:938 +#: ../Explore/ConditionalMapView.cpp:946 +#: ../Explore/ConditionalHistogramView.cpp:937 +#: ../Explore/HistogramView.cpp:1191 +#: ../Explore/ConditionalScatterPlotView.cpp:784 +#: ../Explore/ConditionalClusterMapView.cpp:1227 +#: ../Explore/ConditionalClusterMapView.cpp:1440 +#: ../Explore/ConditionalClusterMapView.cpp:1656 +#: ../Explore/ConditionalClusterMapView.cpp:1868 +msgid "undefined: " +msgstr "" + +#: ../DialogTools/CatClassifDlg.cpp:629 +msgid "uniform distribution" +msgstr "" + +#: ../DialogTools/WeightsManDlg.cpp:701 ../DialogTools/WeightsManDlg.cpp:793 +#: ../DialogTools/WeightsManDlg.cpp:799 ../DialogTools/WeightsManDlg.cpp:805 +#: ../DialogTools/WeightsManDlg.cpp:811 ../DialogTools/WeightsManDlg.cpp:817 +#: ../DialogTools/WeightsManDlg.cpp:819 +msgid "unknown" +msgstr "" + +#: ../Explore/LineChartView.cpp:608 +msgid "var name:" +msgstr "" + +#: ../DataViewer/DataViewerEditFieldPropertiesDlg.cpp:102 +msgid "variable name" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:749 +msgid "wrong model number" +msgstr "" + +#: ../DialogTools/RegressionDlg.cpp:281 +msgid "y:" +msgstr "" diff --git a/internationalization/google_sheets_tool.py b/internationalization/google_sheets_tool.py new file mode 100644 index 000000000..f24abcefb --- /dev/null +++ b/internationalization/google_sheets_tool.py @@ -0,0 +1,116 @@ +from __future__ import print_function +import pickle +import os.path +import argparse +from googleapiclient.discovery import build +from google_auth_oauthlib.flow import InstalledAppFlow +from google.auth.transport.requests import Request +from po2csv import po2dict, dict2PO + +# If modifying these scopes, delete the file token.pickle. +SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly'] + +# The ID and range of a sample spreadsheet. +SAMPLE_SPREADSHEET_ID = '1iZa4wCIyTDlIRYoW7229YoZWKZ0lmIiOFsCJG3ZVw-s' + +def google_get_creds(): + creds = None + # The file token.pickle stores the user's access and refresh tokens, and is + # created automatically when the authorization flow completes for the first + # time. + if os.path.exists('token.pickle'): + with open('token.pickle', 'rb') as token: + creds = pickle.load(token) + # If there are no (valid) credentials available, let the user log in. + if not creds or not creds.valid: + if creds and creds.expired and creds.refresh_token: + creds.refresh(Request()) + else: + flow = InstalledAppFlow.from_client_secrets_file( + 'credentials.json', SCOPES) + creds = flow.run_local_server() + # Save the credentials for the next run + with open('token.pickle', 'wb') as token: + pickle.dump(creds, token) + + return creds + +def google_get_po_items(locale_code): + SAMPLE_RANGE_NAME = locale_code + '!A:C' + creds = google_get_creds() + service = build('sheets', 'v4', credentials=creds) + + # Call the Sheets API + sheet = service.spreadsheets() + result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID, + range=SAMPLE_RANGE_NAME).execute() + values = result.get('values', []) + + po_items = {} + if not values: + print('No data found.') + else: + i = 2 + for row in values[1:]: + # Print columns A and E, which correspond to indices 0 and 4. + #print('%s, %s, %s' % (row[0], row[1], row[2])) + #print(row) + msgid = row[0][1:-1] + msgstr = '' + contrib = '' + if (len(row)>1): + msgstr = row[1][1:-1] + if (len(row)>2): + contrib = row[2] + po_items[msgid] = [msgstr, contrib] + i = i + 1 + return po_items + +def google_remove_po_items(locale_code, po_items): + creds = google_get_creds() + service = build('sheets', 'v4', credentials=creds) + + # Call the Sheets API + sheet = service.spreadsheets() + + remove_rows = [] + for msgid, val in po_items.items(): + remove_rows.append(locale_code + '!A' + str(val[0])) + remove_rows.append(locale_code + '!B' + str(val[0])) + remove_rows.append(locale_code + '!C' + str(val[0])) + + if (len(remove_rows) > 0): + batch_clear_values_request_body = { 'ranges': remove_rows } + result = sheet.values().batchClear(spreadsheetId=SAMPLE_SPREADSHEET_ID, + body=batch_clear_values_request_body).execute() + +def google_append_po_items(locale_code, po_items): + creds = google_get_creds() + service = build('sheets', 'v4', credentials=creds) + + # Call the Sheets API + sheet = service.spreadsheets() + value_input_option = 'RAW' + insert_data_option = 'INSERT_ROWS' + value_range_body = {} + + for msgid, val in po_items.items(): + result = sheet.values().append(spreadsheetId=SAMPLE_SPREADSHEET_ID, + range=range_, valueInputOption=value_input_option, + insertDataOption=insert_data_option, + body=value_range_body).execute() + + +parser = argparse.ArgumentParser(description='Google Sheets Utils') +parser.add_argument('--output',required=True, dest='output_po_file', help='path of an output po_file that is created from Google Sheet') +parser.add_argument('locale_code', type=str, help='local code: e.g. es, zh_CN, de') +args = parser.parse_args() + +if __name__ == "__main__": + locale_code = args.locale_code + output_po = args.output_po_file + + google_items = google_get_po_items(locale_code) + dict2PO(google_items, output_po) + + diff --git a/internationalization/lang/es/GeoDa.mo b/internationalization/lang/es/GeoDa.mo index 413519f40..e2fa4297d 100644 Binary files a/internationalization/lang/es/GeoDa.mo and b/internationalization/lang/es/GeoDa.mo differ diff --git a/internationalization/lang/zh_CN/GeoDa.mo b/internationalization/lang/zh_CN/GeoDa.mo index 47988a6d4..d1f5ca797 100644 Binary files a/internationalization/lang/zh_CN/GeoDa.mo and b/internationalization/lang/zh_CN/GeoDa.mo differ diff --git a/internationalization/new_es.po b/internationalization/new_es.po new file mode 100644 index 000000000..4b4a96743 --- /dev/null +++ b/internationalization/new_es.po @@ -0,0 +1,6284 @@ +#contributors: +msgid "" +msgstr "Plural-Forms: nplurals=2; plural=(n != 1);\nProject-Id-Version: \nPOT-Creation-Date: \nPO-Revision-Date: \nLast-Translator: \nLanguage-Team: \nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nLanguage: es\nX-Generator: Poedit 2.1.1\nX-Poedit-SourceCharset: UTF-8\n" + +#contributors: +msgid " (isolates in weights are removed)" +msgstr "" + +#contributors: +msgid " = 0 at " +msgstr "" + +#contributors: +msgid " BiLISA Cluster Map" +msgstr "BiLISA Mapa de Clústers" + +#contributors: +msgid " BiLISA Significance Map" +msgstr "Mapa de Significación BiLISA" + +#contributors: +msgid " Bivariate Local Geary Cluster Map" +msgstr "Mapa de Clústers Geary Local Bivariante" + +#contributors: +msgid " Bivariate LocalGeary Significance Map" +msgstr "Mapa de Significación Local de Geary Bivariante" + +#contributors: +msgid " Categories" +msgstr "Categorías" + +#contributors: +msgid " Differential LISA Cluster Map" +msgstr "Mapa de Clústers LISA Diferencial" + +#contributors: +msgid " Differential Local Geary Cluster Map" +msgstr "Mapa de Clúster de Geary Local Diferencial" + +#contributors: +msgid " Differential Significance Map" +msgstr "Mapa de Significación Diferencial" + +#contributors: +msgid " Distance metric: " +msgstr "" + +#contributors: +msgid " LISA Cluster Map" +msgstr "Mapa de Clusters LISA" + +#contributors: +msgid " LISA Significance Map" +msgstr "Mapa de Significación LISA" + +#contributors: +msgid " Local Geary Cluster Map" +msgstr "Mapa de Clúster Geary Local" + +#contributors: +msgid " Local Geary Significance Map" +msgstr "Mapa de Significación Geary Local" + +#contributors: +msgid " already exists. OK to overwrite?" +msgstr "ya existe. ¿Aceptar sobrescribir?" + +#contributors: +msgid " and " +msgstr " y " + +#contributors: +msgid " and two time periods: " +msgstr " y 2 períodos de tiempo: " + +#contributors: +msgid " for obs within distance band " +msgstr "" + +#contributors: +msgid " has duplicate values. Please choose a different ID Variable.\n\nDetails:" +msgstr "" + +#contributors: +msgid " in range:" +msgstr "" + +#contributors: +msgid " is not supported by GeoDa.\n" +msgstr "" + +#contributors: +msgid " km" +msgstr "" + +#contributors: +msgid " mi" +msgstr "" + +#contributors: +msgid " pairs in distance band " +msgstr "" + +#contributors: +msgid " should contains only numbers/letters as IDs. Please choose a different ID Variable." +msgstr " debería contener sólo IDs con números/letras. Seleccionar una Variable ID diferente." + +#contributors: +msgid " to " +msgstr "" + +#contributors: +msgid "# Iterations:" +msgstr "Nº Iteraciones:" + +#contributors: +msgid "# Max Iteration:" +msgstr "Nº Máx. Iteraciones:" + +#contributors: +msgid "# Neighors:" +msgstr "Nº Vecinos" + +#contributors: +msgid "# Pairs" +msgstr "" + +#contributors: +msgid "# iterations:\t" +msgstr "" + +#contributors: +msgid "# observations" +msgstr "" + +#contributors: +msgid "#hover obs " +msgstr "" + +#contributors: +msgid "#obs" +msgstr "nº obs." + +#contributors: +msgid "#obs:" +msgstr "" + +#contributors: +msgid "#obs=" +msgstr "" + +#contributors: +msgid "#row=" +msgstr "" + +#contributors: +msgid "#selected=" +msgstr "" + +#contributors: +msgid "% non-zero" +msgstr "" + +#contributors: +msgid "% of total" +msgstr "" + +#contributors: +msgid "%d of %d variables to include" +msgstr "" + +#contributors: +msgid "%d variables to include" +msgstr "" + +#contributors: +msgid "%s (Weights: %s)" +msgstr "%s (Pesos: %s)" + +#contributors: +msgid "%s Cluster Map (%d clusters)" +msgstr "" + +#contributors: +msgid "&Add ID Variable..." +msgstr "Añadir Variable ID" + +#contributors: +msgid "&Cancel" +msgstr "Cancelar" + +#contributors: +msgid "&Close" +msgstr "Cerrar" + +#contributors: +msgid "&Edit" +msgstr "Editar" + +#contributors: +msgid "&File" +msgstr "Archivo" + +#contributors: +msgid "&Help" +msgstr "Ayuda" + +#contributors: +msgid "&Map" +msgstr "Mapa" + +#contributors: +msgid "&Merge" +msgstr "Combinar" + +#contributors: +msgid "&New" +msgstr "Nuevo" + +#contributors: +msgid "&Open Project" +msgstr "Abrir Proyecto" + +#contributors: +msgid "&Regression" +msgstr "" + +#contributors: +msgid "&Run" +msgstr "&Ejecutar" + +#contributors: +msgid "&Save to Table" +msgstr "Guardar en Tabla" + +#contributors: +msgid "&Space" +msgstr "Espacio" + +#contributors: +msgid "&Tools" +msgstr "Herramientas" + +#contributors: +msgid "(Dendrogram is too complex to draw. Please view clustering results in map.)" +msgstr "(Dendograma muy complicado de representar. Ver resultados de clústers en un mapa.)" + +#contributors: +msgid "(Duplicate field name)" +msgstr "(Nombre de campo duplicado)" + +#contributors: +msgid "(Field name is not valid)" +msgstr "(Nombre de campo no válido)" + +#contributors: +msgid "(Gaussian) Sigma:" +msgstr "Sigma (Gaussiano):" + +#contributors: +msgid "(Leave empty for undefined values)" +msgstr "Dejar en blanco los valores no seleccionados" + +#contributors: +msgid "(Optional) First record has field names? " +msgstr "(Opcional) ¿El primer dato tiene nombre de campo?" + +#contributors: +msgid "(Optional) Longitude/X:" +msgstr "" + +#contributors: +msgid "(Optional) You can change the data type for a field:" +msgstr "(Opcional) Vd. puede cambiar el tipo de datos del campo:" + +#contributors: +msgid "(Use Sequences)" +msgstr "" + +#contributors: +msgid "---\n\nPCA method: " +msgstr "" + +#contributors: +msgid ".\nEnter a seed value to use between\n0 and " +msgstr "" + +#contributors: +msgid "0x03 (dBASE III+)" +msgstr "0x03 (dBASE III+)" + +#contributors: +msgid "1 Iteration" +msgstr "Iteración 1" + +#contributors: +msgid "199 Permutations" +msgstr "199 Permutaciones" + +#contributors: +msgid "1st Variable (X)" +msgstr "1ª Variable (X)" + +#contributors: +msgid "2 Iteration" +msgstr "Iteración 2" + +#contributors: +msgid "2nd Variable (Y)" +msgstr "2ª Variable (Y)" + +#contributors: +msgid "3 Iteration" +msgstr "Iteración 3" + +#contributors: +msgid "3D Plot" +msgstr "Gráfico 3D" + +#contributors: +msgid "3D Scatter Plot" +msgstr "Diagrama de Dispersión 3D" + +#contributors: +msgid "3D Scatter Plot Variables" +msgstr "Variables Diagrama Dispersión 3D" + +#contributors: +msgid "3rd Variable (Z)" +msgstr "3ª Variable (Z)" + +#contributors: +msgid "4 Iteration" +msgstr "Iteración 4" + +#contributors: +msgid "499 Permutations" +msgstr "499 Permutaciones" + +#contributors: +msgid "4th Variable" +msgstr "4ª Variable" + +#contributors: +msgid "5 Iteration" +msgstr "Iteración 5" + +#contributors: +msgid "5 of 5 variables needed" +msgstr "5 de 5 variables necesitadas" + +#contributors: +msgid "6 Iteration" +msgstr "Iteración 6" + +#contributors: +msgid "99 Permutations" +msgstr "99 Permutaciones" + +#contributors: +msgid "999 Permutations" +msgstr "999 Permutaciones" + +#contributors: +msgid "<" +msgstr "<" + +#contributors: +msgid "<<" +msgstr "" + +#contributors: +msgid "<=" +msgstr "<=" + +#contributors: +msgid "=" +msgstr "=" + +#contributors: +msgid ">" +msgstr ">" + +#contributors: +msgid ">>" +msgstr ">>" + +#contributors: +msgid "A Table-only data source can't be stacked with current data source." +msgstr "" + +#contributors: +msgid "A newer version of GeoDa is found. Do you want to update to version " +msgstr "Existe una nueva versión de GeoDa. ¿Desea actualizar a la versión ?" + +#contributors: +msgid "A project file contains extra information not directly stored in the data source such as variable order and grouping." +msgstr "" + +#contributors: +msgid "About DBF Viewer" +msgstr "Sobre DBF Viewer" + +#contributors: +msgid "About GeoDa" +msgstr "Acerca de GeoDa" + +#contributors: +msgid "About Precision Threshold" +msgstr "Acerca del Umbral de Precisión" + +#contributors: +msgid "Adaptive bandwidth" +msgstr "Ancho de Banda Adaptativo" + +#contributors: +msgid "Adaptive kernel" +msgstr "Kernel adaptativo" + +#contributors: +msgid "Add" +msgstr "Añadir" + +#contributors: +msgid "Add Centroids to Table" +msgstr "Añadir Centroides a Tabla" + +#contributors: +msgid "Add Map Layer" +msgstr "Add Map Layer" + +#contributors: +msgid "Add Mean Centers to Table" +msgstr "Añadir Centros Medios a Tabla" + +#contributors: +msgid "Add Neighbors To Selection" +msgstr "Añadir Vecinos a Selección" + +#contributors: +msgid "Add New ID Variable" +msgstr "Añadir Nueva Variable ID" + +#contributors: +msgid "Add OGR column error. Field type is unknown or not supported." +msgstr "Añadir error de columna OGR. Tipo de campo desconocido o no admitido." + +#contributors: +msgid "Add OGR column error. Field type is unknown." +msgstr "Añadir columna de error OGR. Tipo de campo desconocido" + +#contributors: +msgid "Add Time" +msgstr "Añadir Tiempo" + +#contributors: +msgid "Add Variable" +msgstr "Añadir Variable" + +#contributors: +msgid "Add a name for your group of variables. \n\nYou can edit the time period labels for easier interpretation of results." +msgstr "" + +#contributors: +msgid "Add basemap automatically:" +msgstr "Añadir mapa base automáticamente:" + +#contributors: +msgid "Add new column to table" +msgstr "Añadir nueva columna a la tabla" + +#contributors: +msgid "Add/Remove Variables" +msgstr "Añadir/Eliminar Variables" + +#contributors: +msgid "Adjust Bubble Size" +msgstr "" + +#contributors: +msgid "Adjust Value Range of Y Axis" +msgstr "Ajustar Rango de Valores al Eje Y" + +#contributors: +msgid "Adjust Value Range of Y-Axis" +msgstr "Ajustar Rango de Valores al Eje Y" + +#contributors: +msgid "Adjust Values of Y Axis" +msgstr "Ajustar Valores del Eje Y" + +#contributors: +msgid "Affinity with Guassian Kernel:\tSigma=" +msgstr "" + +#contributors: +msgid "Affinity with K-NN:" +msgstr "Afinidad con K-NN:" + +#contributors: +msgid "Affinity with K-Nearest Neighbors:\tK=" +msgstr "" + +#contributors: +msgid "Affinity with Kernel:" +msgstr "Afinidad con Kernel:" + +#contributors: +msgid "Aggregate" +msgstr "Agregar" + +#contributors: +msgid "Aggregate - " +msgstr "Agregar - " + +#contributors: +msgid "All" +msgstr "Todo" + +#contributors: +msgid "All Pairs" +msgstr "" + +#contributors: +msgid "All Rights Reserved" +msgstr "Todos los Derechos Reservados" + +#contributors: +msgid "Allow a single cluster:" +msgstr "" + +#contributors: +msgid "Alpha:" +msgstr "" + +#contributors: +msgid "Always using fixed-point notation" +msgstr "" + +#contributors: +msgid "Animation" +msgstr "Animación" + +#contributors: +msgid "App Key" +msgstr "Clave App" + +#contributors: +msgid "Append To Current Selection" +msgstr "Anexar a Selección Actual" + +#contributors: +msgid "Append to current selection" +msgstr "Agregar a selección actual" + +#contributors: +msgid "Appl&y" +msgstr "Aplicar" + +#contributors: +msgid "Apply" +msgstr "Aplicar" + +#contributors: +msgid "Apply kernel to diagonal weights" +msgstr "Aplicar kernel a pesos diagonal" + +#contributors: +msgid "April" +msgstr "" + +#contributors: +msgid "Arabic (Windows-1256)" +msgstr "Ãrabe (Windows-1256)" + +#contributors: +msgid "Arc Distance" +msgstr "" + +#contributors: +msgid "Ascending order" +msgstr "Orden ascendente" + +#contributors: +msgid "Assign To Target" +msgstr "" + +#contributors: +msgid "Assign Values to Currently Selected / Unselected" +msgstr "Asignar Valores a Actual Selección / No Selección" + +#contributors: +msgid "Assoc. Var." +msgstr "Var. Asoc." + +#contributors: +msgid "Attributes (Optional)" +msgstr "" + +#contributors: +msgid "August" +msgstr "" + +#contributors: +msgid "Auto Weighting" +msgstr "Auto-Ponderación" + +#contributors: +msgid "Autocorr." +msgstr "" + +#contributors: +msgid "Autocorr. of " +msgstr "" + +#contributors: +msgid "Automatic Labels" +msgstr "Etiquetas Automáticas" + +#contributors: +msgid "Average" +msgstr "Promedio" + +#contributors: +msgid "Average Comparison Chart" +msgstr "Gráfico Comparación de Medias" + +#contributors: +msgid "Averages Chart" +msgstr "Gráfico de Medias" + +#contributors: +msgid "Axes Through Origin" +msgstr "Ejes Sobre el Origen" + +#contributors: +msgid "Axis Option" +msgstr "Opción de Eje" + +#contributors: +msgid "Axis Selection" +msgstr "Selección de Eje" + +#contributors: +msgid "Background" +msgstr "Fondo" + +#contributors: +msgid "Background Color" +msgstr "Color de Fondo" + +#contributors: +msgid "Bandwidth:" +msgstr "Ancho de banda:" + +#contributors: +msgid "Base Map " +msgstr "Mapa Base" + +#contributors: +msgid "Base Variable" +msgstr "Variable Base" + +#contributors: +msgid "Basemap" +msgstr "Mapa Base" + +#contributors: +msgid "Basemap Configuration" +msgstr "Configuración de Mapa Base" + +#contributors: +msgid "Basemap Configuration Dialog" +msgstr "Cuadro de Configuración de Mapa Base" + +#contributors: +msgid "Basemap Parameters:" +msgstr "Basemap Parameters:" + +#contributors: +msgid "Basemap Sources: (Format: group&name.basemap&name,basemap&url)" +msgstr "" + +#contributors: +msgid "Before add/delete observations, please close the %d view(s) that depend on it." +msgstr "Antes de añadir/borrar observaciones, cerrar la(s) vista(s) %d que depende(n) de ellas." + +#contributors: +msgid "Before proceed with operation (add/remove, move, or rename), please close %d views that depend on it." +msgstr "Antes de proceder con la operación (añadir/eliminar, mover o renombrar), cerrar las %d vistas que dependen de ella." + +#contributors: +msgid "Before you can modify the variable %s, please close the %d view(s) that depend on it." +msgstr "Antes de modificar la variable %s, cerrar la(s) %d vista(s) que dependen de ella" + +#contributors: +msgid "Bivariate" +msgstr "Bivariante" + +#contributors: +msgid "Bivariate Local Join Count" +msgstr "Join Count Local Bivariante" + +#contributors: +msgid "Bivariate Local Moran's I" +msgstr "I de Moran Local Bivariante" + +#contributors: +msgid "Bivariate Moran Variable Settings" +msgstr "Configuración Variable de Moran Bivariante" + +#contributors: +msgid "Bivariate Moran's I" +msgstr "I de Morán Bivariante" + +#contributors: +msgid "Bivariate Moran's I (%s): %s and lagged %s" +msgstr "I de Moran Bivariante (%s): %s y %s retardado" + +#contributors: +msgid "Bonferroni bound:" +msgstr "Límite de Bonferroni" + +#contributors: +msgid "Both are significant, Spatial Lag Model has been selected." +msgstr "Ambos son significativos, se selecciona el Modelo del Retardo Espacial" + +#contributors: +msgid "Bottom" +msgstr "" + +#contributors: +msgid "Bounding Box" +msgstr "" + +#contributors: +msgid "Box Map (Hinge=1.5)" +msgstr "Mapa de Caja (Bisagra=1.5)" + +#contributors: +msgid "Box Map (Hinge=3.0)" +msgstr "Mapa de Caja (Bisagra=3.0)" + +#contributors: +msgid "Box Plot" +msgstr "Diagrama de Caja" + +#contributors: +msgid "Boxplot Theme" +msgstr "Tema del diagrama de Caja" + +#contributors: +msgid "Breaks" +msgstr "Cortes" + +#contributors: +msgid "Breaks with same values were created. Please choose a smaller categories, or manually edit the break values." +msgstr "" + +#contributors: +msgid "Bubble Chart" +msgstr "Gráfico de Burbujas" + +#contributors: +msgid "Bubble Chart - x: %s, y: %s, size: %s, %s" +msgstr "Gráfico de Burbujas - x: %s, y: %s, tamaño: %s, %s" + +#contributors: +msgid "Bubble Chart Variables" +msgstr "Variables de Gráfico de Burbujas" + +#contributors: +msgid "Bubble Size" +msgstr "Tamaño de Burbuja" + +#contributors: +msgid "Bubble Size Adjust Dialog" +msgstr "" + +#contributors: +msgid "Buffer query area:" +msgstr "" + +#contributors: +msgid "Bug Report" +msgstr "Informe de Errores" + +#contributors: +msgid "C&reate" +msgstr "Crear" + +#contributors: +msgid "CRS (proj4 format)" +msgstr "" + +#contributors: +msgid "CSV Configuration Warning" +msgstr "Aviso de Configuración CSV" + +#contributors: +msgid "CSV Contains Variable Names?" +msgstr "¿CSV Contiene Nombres de Variables?" + +#contributors: +msgid "CSV File Configuration" +msgstr "" + +#contributors: +msgid "Calculator" +msgstr "Calculadora" + +#contributors: +msgid "Can't connect to datasource: " +msgstr "No se puede conectar con fuente de datos:" + +#contributors: +msgid "Can't create layer %s with empty field (%s) name." +msgstr "" + +#contributors: +msgid "Can't create output OGR driver. \n\nDetails:" +msgstr "" + +#contributors: +msgid "Can't get bounding box information from this datasource. Please try another datasource." +msgstr "No se puede obtener información del cuadro delimitador de la fuente de datos. Intentarlo con otra fuente de datos." + +#contributors: +msgid "Can't get datasource type from: %s\n\nPlease select datasource supported by GeoDa or add extension to file datasource." +msgstr "" + +#contributors: +msgid "Can't get layers from unknown datasource. Please complete the datasource fields." +msgstr "Imposible obtener capas de fuente de datos desconocida. Completar los campos de la misma." + +#contributors: +msgid "Can't save Thiessen polygons" +msgstr "" + +#contributors: +msgid "Can't write/create layer \"" +msgstr "" + +#contributors: +msgid "Cancel" +msgstr "Cancelar" + +#contributors: +msgid "Canvas Layout Preview" +msgstr "" + +#contributors: +msgid "Carto" +msgstr "Carto" + +#contributors: +msgid "Cartogram" +msgstr "Cartograma" + +#contributors: +msgid "Cartogram Variables" +msgstr "Variables del Cartograma" + +#contributors: +msgid "Categories" +msgstr "Categorías" + +#contributors: +msgid "Categories \"%s\" is currently in use by another view. Please close or change all views using this custom categories before deleting." +msgstr "Categorías \"%s\" está actualmente en uso por otra vista. Cerrar/cambiar las vistas utilizando estas categorías personalizadas antes de borrar." + +#contributors: +msgid "Categories of " +msgstr "Categoría de " + +#contributors: +msgid "Categories title \"%s\" already exists. Please choose a different title." +msgstr "Título de categorías \"%s\" existente. Seleccionar un título diferente." + +#contributors: +msgid "Category" +msgstr "Categoría" + +#contributors: +msgid "Category Editor" +msgstr "Editor de Categorías" + +#contributors: +msgid "Central European (CP852)" +msgstr "Centroeuropeo (CP852)" + +#contributors: +msgid "Central European (Windows-1250)" +msgstr "Centroeuropeo (Windows-1250)" + +#contributors: +msgid "Central European Latin-2 (ISO-8859-2)" +msgstr "Centroeuropeo Latín-2 (ISO-8859-2)" + +#contributors: +msgid "Centroid (X)" +msgstr "" + +#contributors: +msgid "Centroid (Y)" +msgstr "" + +#contributors: +msgid "Change" +msgstr "Cambio" + +#contributors: +msgid "Change Categories Title" +msgstr "Cambiar Título de Categorías" + +#contributors: +msgid "Change Color of Root" +msgstr "" + +#contributors: +msgid "Change Current Map Type" +msgstr "Cambiar Tipo Actual de Mapa" + +#contributors: +msgid "Change Edge Color" +msgstr "Cambiar Color del Borde" + +#contributors: +msgid "Change Edge Thickness" +msgstr "Cambiar Grosor del Borde" + +#contributors: +msgid "Change Fill Color" +msgstr "Change Fill Color" + +#contributors: +msgid "Change Fill Color of Neighbors" +msgstr "Cambiar Color de Relleno de Vecinos" + +#contributors: +msgid "Change Font" +msgstr "Cambiar Fuente" + +#contributors: +msgid "Change Map Transparency" +msgstr "Cambiar Transparencia del Mapa" + +#contributors: +msgid "Change Outline Color" +msgstr "Change Outline Color" + +#contributors: +msgid "Change Outline Color of Selected" +msgstr "" + +#contributors: +msgid "Change Parameters" +msgstr "Cambiar Parámetros" + +#contributors: +msgid "Change Point Radius" +msgstr "Change Point Radius" + +#contributors: +msgid "Change Seed" +msgstr "Cambiar semilla" + +#contributors: +msgid "Change Size of Root" +msgstr "" + +#contributors: +msgid "Change field properties (%s) failed.\n\nDetails: %s" +msgstr "" + +#contributors: +msgid "Change title \"%s\" to" +msgstr "Cambiar título\"%s\" a" + +#contributors: +msgid "Change variable type for \"%s\" has failed. Please check all values are valid for conversion." +msgstr "Error en el cambio de tipo de variable por \"%s\". Comprobar la validez de todos los valores en la conversión." + +#contributors: +msgid "Check Bug Report on Github" +msgstr "Consulte el Informe de Errores en Github" + +#contributors: +msgid "Check Updates" +msgstr "Comprobar Actualizaciones" + +#contributors: +msgid "Checking Symmetry..." +msgstr "Comprobando Simetría..." + +#contributors: +msgid "Chinese Simplified (GB2312)" +msgstr "Chino Simplificado (GB2312)" + +#contributors: +msgid "Chinese Traditional (Big5)" +msgstr "Chino Tradicional (Big5)" + +#contributors: +msgid "Choose A Color" +msgstr "Seleccionar un Color" + +#contributors: +msgid "Choose Cateogry Color" +msgstr "Seleccionar Color de Categoría" + +#contributors: +msgid "Choose Cateogry Fill Color" +msgstr "" + +#contributors: +msgid "Choose Cateogry Outline Color" +msgstr "" + +#contributors: +msgid "Choose Intervals" +msgstr "Elegir Intervalos" + +#contributors: +msgid "Choose Weights" +msgstr "Seleccionar Pesos" + +#contributors: +msgid "Choose Weights File" +msgstr "Elegir Archivo de Pesos" + +#contributors: +msgid "Choose an output weights file name." +msgstr "Escribir nombre de fichero de resultado de pesos" + +#contributors: +msgid "Chosen field is not a numeric type. Please select a numeric type field." +msgstr "El campo escogido no es numérico. Seleccionar un campo de tipo numérico." + +#contributors: +msgid "Chosen field is not a numeric type. Please select a numeric type field." +msgstr "El campo elegido no es numérico. Seleccionar un campo numérico." + +#contributors: +msgid "Chosen key field '%s' s a time variant. Please choose a non-time variant field as key." +msgstr "Campo clave seleccionado %s' varía en el tiempo. Seleccionar campo clave no variable en el tiempo." + +#contributors: +msgid "Chosen key field is not valid. Please select another key field" +msgstr "" + +#contributors: +msgid "Chow test for sel/unsel regression subsets: " +msgstr "Test de Chow para regresiones de subgrupos de sel/no sel." + +#contributors: +msgid "Circle" +msgstr "Círculo" + +#contributors: +msgid "Circle Color" +msgstr "Color del Círculo" + +#contributors: +msgid "Circle Size" +msgstr "Tamaño del Círculo" + +#contributors: +msgid "Classic " +msgstr "Básico" + +#contributors: +msgid "Classification Themes" +msgstr "Temas de Clasificación" + +#contributors: +msgid "Clean Basemap Cache" +msgstr "Borrar Mapa Base de Caché" + +#contributors: +msgid "Clear Highlight Association" +msgstr "Clear Highlight Association" + +#contributors: +msgid "Clear Selection" +msgstr "Borrar Selección" + +#contributors: +msgid "Click RegressionDlg::OnSaveToTxtFileClick" +msgstr "Teclear RegressionDlg::OnSaveToTxtFileClick" + +#contributors: +msgid "Click RegressionDlg::OnViewResultsClick" +msgstr "Teclear RegressionDlg::OnViewResultsClick" + +#contributors: +msgid "Close" +msgstr "Cerrar" + +#contributors: +msgid "Cluster Map " +msgstr "Mapa de Clústers" + +#contributors: +msgid "Cluster Maps" +msgstr "Mapas de Clústers" + +#contributors: +msgid "Cluster centers:" +msgstr "" + +#contributors: +msgid "Clusters" +msgstr "Clúster" + +#contributors: +msgid "Co-location Join Count" +msgstr "Co-location Join Count" + +#contributors: +msgid "Co-location Join Count only applies to co-location case. The selected variables have no co-location. Please change your selection, or use Univariate/Bivariate Local Join Count." +msgstr "" + +#contributors: +msgid "Co-location Map" +msgstr "Mapa de Co-localización" + +#contributors: +msgid "Co-location Map: " +msgstr "" + +#contributors: +msgid "Co-location Settings" +msgstr "Configuración de Co-localización" + +#contributors: +msgid "Coeff. Var. Mat." +msgstr "Mat. Var. Coef." + +#contributors: +msgid "Colocation Cluster" +msgstr "Clúster de Colocaciones" + +#contributors: +msgid "Color" +msgstr "Color" + +#contributors: +msgid "Color Scheme" +msgstr "Paleta de Colores" + +#contributors: +msgid "Column Name" +msgstr "Nombre de Columna" + +#contributors: +msgid "Column Number (from 0)" +msgstr "Número de Columna (desde 0)" + +#contributors: +msgid "Comma Separated Value (*.csv)|*.csv" +msgstr "Valor Separado por Comas (*.csv)|*.csv" + +#contributors: +msgid "Components:" +msgstr "Componentes:" + +#contributors: +msgid "Conditional Co-location Map Variables" +msgstr "Variables de Mapa de Co-localización Condicional" + +#contributors: +msgid "Conditional G Cluster Map Variables" +msgstr "Variables de Mapa de Clúster G Condicional" + +#contributors: +msgid "Conditional GetisOrd Map" +msgstr "Mapa Condicional de GetisOrd" + +#contributors: +msgid "Conditional Histogram" +msgstr "Histograma Condicional" + +#contributors: +msgid "Conditional Histogram Variables" +msgstr "Variables de Histograma Condicional" + +#contributors: +msgid "Conditional LISA Map" +msgstr "Mapa LISA Condicional" + +#contributors: +msgid "Conditional LISA Map Variables" +msgstr "Variables del Mapa LISA Condicional" + +#contributors: +msgid "Conditional Local Geary Map" +msgstr "Mapa Condicional Geary Local" + +#contributors: +msgid "Conditional Local Geary Map Variables" +msgstr "Variables del Mapa de Geary Local Condicional" + +#contributors: +msgid "Conditional Local Join Count Map" +msgstr "Mapa Joint Count Local Condicional" + +#contributors: +msgid "Conditional Map" +msgstr "Mapa Condicional" + +#contributors: +msgid "Conditional Map Variables" +msgstr "Variables Mapa Condicional" + +#contributors: +msgid "Conditional Plot" +msgstr "Gráfico Condicional" + +#contributors: +msgid "Conditional Scatter Plot" +msgstr "Diagrama de Dispersión Condicional" + +#contributors: +msgid "Conditional Scatter Plot Variables" +msgstr "Variables Gráfico de Dispersión Condicional" + +#contributors: +msgid "Connect" +msgstr "Conectar" + +#contributors: +msgid "Connect to Data Source" +msgstr "Conectarse a la fuente de datos" + +#contributors: +msgid "Connectivity" +msgstr "Conectividad" + +#contributors: +msgid "Connectivity Graph" +msgstr "Gráfico de Conectividad" + +#contributors: +msgid "Connectivity Histogram" +msgstr "Histograma de Conectividades" + +#contributors: +msgid "Connectivity Map" +msgstr "Mapa de conectividad" + +#contributors: +msgid "Connectivity Map - " +msgstr "" + +#contributors: +msgid "Contiguity Weight" +msgstr "Pesos de Contigüidad" + +#contributors: +msgid "Continue" +msgstr "Continuar" + +#contributors: +msgid "Convert ASCII to SHP" +msgstr "Convertir ASCII a SHP" + +#contributors: +msgid "Convert Boundary to SHP" +msgstr "Convertir Boundary a SHP" + +#contributors: +msgid "Convert Boundary to Shape Datasource" +msgstr "Convertir Boundary a Fuente de Datos Shape" + +#contributors: +msgid "Cooling Rate:" +msgstr "Tasa de Enfriamiento" + +#contributors: +msgid "Cooling rate for Simulated Annealing algorithm has to be a float number between 0 and 1 (e.g. 0.85)." +msgstr "La tasa de enfriamiento para algoritmo de Recocido Simulado ha de ser un nº flotante entre 0 y 1 (ej. 0.85)." + +#contributors: +msgid "Cooling rate:" +msgstr "" + +#contributors: +msgid "Copy" +msgstr "Copiar" + +#contributors: +msgid "Copy Image To Clipboard" +msgstr "Copiar Imagen al Portapapeles " + +#contributors: +msgid "Copy Legend To Clipboard" +msgstr "Copiar Leyenda al Portapapeles" + +#contributors: +msgid "Copyright (C) 1998-2011\nGeoDa Center for Geospatial Analysis and Computation\nand Arizona Board of Regents\nAll Rights Reserved" +msgstr "Copyright (C) 1998-2011\nGeoDa Center for Geospatial Analysis and Computation\ny Arizona Board of Regents\nTodos los Derechos Reservados" + +#contributors: +msgid "Copyright (C) 2011-%d by Luc Anselin" +msgstr "" + +#contributors: +msgid "Copyright (C) year-year by Luc Anselin" +msgstr "Copyright (C) año-año por Luc Anselin" + +#contributors: +msgid "Cores" +msgstr "Centros" + +#contributors: +msgid "Cores and Neighbors" +msgstr "Centros y Vecinos" + +#contributors: +msgid "Correlogram" +msgstr "Correlograma" + +#contributors: +msgid "Correlogram Parameters" +msgstr "" + +#contributors: +msgid "Correlogram Parameters Help" +msgstr "" + +#contributors: +msgid "Could not create a new variable. Possibly a read-only data source." +msgstr "Imposible crear una nueva variable. Posible fuente de datos de sólo lectura." + +#contributors: +msgid "Could not determine which Field Choice was selected. Please report this error." +msgstr "" + +#contributors: +msgid "Could not determine which Time Choice was selected. Please report this error." +msgstr "" + +#contributors: +msgid "Could not initialize new project." +msgstr "" + +#contributors: +msgid "Count" +msgstr "Cuenta" + +#contributors: +msgid "Covariates" +msgstr "Explicativas" + +#contributors: +msgid "Create" +msgstr "Crear" + +#contributors: +msgid "Create Custom Breaks" +msgstr "Crear Cortes Personalizados" + +#contributors: +msgid "Create Grid" +msgstr "Crear Rejilla" + +#contributors: +msgid "Create New Custom" +msgstr "Crear Nuevo Personalizado" + +#contributors: +msgid "Create Project File Now?" +msgstr "¿Crear Ahora Archivo de Proyecto?" + +#contributors: +msgid "Create Weights" +msgstr "Crear Pesos" + +#contributors: +msgid "Create a project file?" +msgstr "¿Crear un archivo de proyecto?" + +#contributors: +msgid "Create new custom categories classification." +msgstr "" + +#contributors: +msgid "Creating Grid" +msgstr "Crear Rejilla" + +#contributors: +msgid "Cumulative" +msgstr "Acumulado" + +#contributors: +msgid "Current OGR dirver " +msgstr "" + +#contributors: +msgid "Current Opacity: %.2f" +msgstr "" + +#contributors: +msgid "Current Transparency: %.2f" +msgstr "Transparencia actual: %.2f" + +#contributors: +msgid "Current field name:" +msgstr "Nombre de campo actual" + +#contributors: +msgid "Current layer has already been associated with selected layer. Please select another layer to associate with." +msgstr "" + +#contributors: +msgid "Current time:" +msgstr "Tiempo Actual:" + +#contributors: +msgid "Curve Color" +msgstr "Color de la Curva" + +#contributors: +msgid "Custom" +msgstr "" + +#contributors: +msgid "Custom Breaks" +msgstr "Cortes Personalizados" + +#contributors: +msgid "Custom Inference" +msgstr "Inferencia Personalizada" + +#contributors: +msgid "Cut" +msgstr "Cortar" + +#contributors: +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirílico (ISO-8859-5)" + +#contributors: +msgid "Cyrillic (KOI8-R)" +msgstr "Cirílico (KOI8-R)" + +#contributors: +msgid "Cyrillic (Windows-1251)" +msgstr "Cirílico (Windows-1251)" + +#contributors: +msgid "Cyrillic/Russian (CP866)" +msgstr "Cirílico/Ruso (CP866)" + +#contributors: +msgid "D.F." +msgstr "" + +#contributors: +msgid "DBF File Information" +msgstr "Información Archivo DBF" + +#contributors: +msgid "DBF Viewer 0.8 (July 29, 2011)" +msgstr "DBF Viewer 0.8 (Julio 29, 2011)" + +#contributors: +msgid "Data" +msgstr "Datos" + +#contributors: +msgid "Data Point" +msgstr "Punto de Datos" + +#contributors: +msgid "Data Preview - number of preview records:" +msgstr "Vista Previa de Datos - nº de datos en vista previa:" + +#contributors: +msgid "Data Source Overview/Help: " +msgstr "Revisión Fuente de Datos/Ayuda" + +#contributors: +msgid "Data Type" +msgstr "Tipo de Datos" + +#contributors: +msgid "Data source (%s) doesn't exist. Please check the project configuration file." +msgstr "La fuente de datos (%s) no existe. Comprobar el fichero de configuración del proyecto." + +#contributors: +msgid "Database" +msgstr "Base de Datos" + +#contributors: +msgid "Database Host" +msgstr "Base de Datos Anfitrión" + +#contributors: +msgid "Database Name/Instance" +msgstr "Nombre Base de Datos/Instancia" + +#contributors: +msgid "Database Port" +msgstr "Base de Datos Puerto" + +#contributors: +msgid "Database Type" +msgstr "Tipo Base de Datos" + +#contributors: +msgid "Database port is empty. Please input one." +msgstr "Puerto de base de datos vacío. Introducir uno." + +#contributors: +msgid "Database/Instance Name" +msgstr "Base de datos/Nombre de instancia" + +#contributors: +msgid "Datasource in project is not valid." +msgstr "Fuente de daos del proyecto no válida." + +#contributors: +msgid "Datasource path is empty." +msgstr "Ruta vacía de fuente de datos." + +#contributors: +msgid "Date/Time" +msgstr "" + +#contributors: +msgid "Date/Time formats (using comma to separate formats):" +msgstr "" + +#contributors: +msgid "December" +msgstr "" + +#contributors: +msgid "Decimal:" +msgstr "Decimal:" + +#contributors: +msgid "Decimals (max 15)" +msgstr "Decimales (máx. 15)" + +#contributors: +msgid "Default displayed decimal places in Table:" +msgstr "" + +#contributors: +msgid "Delete" +msgstr "Eliminar" + +#contributors: +msgid "Delete Variable(s)" +msgstr "Eliminar Variable(s)" + +#contributors: +msgid "Delta Factor:" +msgstr "Factor Delta:" + +#contributors: +msgid "Dendrogram" +msgstr "Dendograma" + +#contributors: +msgid "Dependent Var (y-axis)" +msgstr "Var. Dependiente (eje-y)" + +#contributors: +msgid "Dependent Var Y" +msgstr "Variable Dependiente Y" + +#contributors: +msgid "Dependent Variable" +msgstr "Variable dependiente" + +#contributors: +msgid "Descending order" +msgstr "Orden Descendente" + +#contributors: +msgid "Description" +msgstr "Descripción" + +#contributors: +msgid "Diagonal weights = 1" +msgstr "pesos Diagonal = 1" + +#contributors: +msgid "Diff Values" +msgstr "Valores en Difer." + +#contributors: +msgid "Difference-in-Means Test:" +msgstr "Test de Diferencia de Medias:" + +#contributors: +msgid "Differential Local Moran's I" +msgstr "I Local de Moran Diferencial" + +#contributors: +msgid "Differential Moran Variable Settings" +msgstr "Configuración de Variable de Moran Diferencial" + +#contributors: +msgid "Differential Moran's I" +msgstr "I de Moran Diferencial" + +#contributors: +msgid "Differential Moran's I (%s): %s - %s" +msgstr "I de Moran Diferencial (%s): %s - %s" + +#contributors: +msgid "Differential Moran's I tests whether the change in a variable over time is spatially correlated.\n\nPlease first group variables by time period: Select Time --> Time Editor." +msgstr "" + +#contributors: +msgid "Disable auto upgrade:" +msgstr "Desactivar actualización automática" + +#contributors: +msgid "Disable crash detection for bug report:" +msgstr "Desactivar detección de fallos para informe de errores" + +#contributors: +msgid "Display Axes Scale Values" +msgstr "Mostrar Valores de Escala Ejes " + +#contributors: +msgid "Display Centroids" +msgstr "Mostrar Centroides" + +#contributors: +msgid "Display Mean Centers" +msgstr "Mostrar Centros Medios" + +#contributors: +msgid "Display Slope Values" +msgstr "Mostrar Valores de Pendiente" + +#contributors: +msgid "Display Statistics" +msgstr "Mostrar Estadísticos" + +#contributors: +msgid "Display Thiessen Polygons" +msgstr "Mostrar Polígonos Thiessen" + +#contributors: +msgid "Displayed decimal places" +msgstr "Mostrar lugares decimales" + +#contributors: +msgid "Displayed decimals" +msgstr "Mostrar decimales" + +#contributors: +msgid "Displayed decimals places" +msgstr "Lugares decimales mostrados" + +#contributors: +msgid "Dissolve" +msgstr "" + +#contributors: +msgid "Dissolve - " +msgstr "" + +#contributors: +msgid "Dissolve does not work with Table only datasource." +msgstr "" + +#contributors: +msgid "Dissolve only works on polygon dataset." +msgstr "" + +#contributors: +msgid "Distance" +msgstr "Distancia" + +#contributors: +msgid "Distance Function:" +msgstr "Función de Distancia:" + +#contributors: +msgid "Distance Weight" +msgstr "Pesos de Distancias" + +#contributors: +msgid "Distance band" +msgstr "Banda de Distancia" + +#contributors: +msgid "Distance function:\t" +msgstr "" + +#contributors: +msgid "Distance metric: " +msgstr "" + +#contributors: +msgid "Distance:" +msgstr "" + +#contributors: +msgid "Do Means Differ? (ANOVA)" +msgstr "" + +#contributors: +msgid "Do you want to save the results of Diff-in-Diff test?\n\nNote: the results can only be saved into an external data file, due to the change of cross-sectional observations in a space-time context." +msgstr "" + +#contributors: +msgid "Do you want to save your data?" +msgstr "¿Desea guardar sus datos?" + +#contributors: +msgid "Don't show Recent/Sample Data panel again" +msgstr "No mostrar Recientes/Datos de Ejemplo de nuevo" + +#contributors: +msgid "Don't show this dialog again (You can always change this setting using menu: File->Preferences)" +msgstr "No mostrar este cuadro de nuevo (Esta configuración siempre se puede cambiar en el menú: Archivo->Preferencias)" + +#contributors: +msgid "Donate" +msgstr "" + +#contributors: +msgid "Down" +msgstr "" + +#contributors: +msgid "Download OSM Roads" +msgstr "" + +#contributors: +msgid "Downloading updates..." +msgstr "Descargando actualizaciones..." + +#contributors: +msgid "Duplicate IDs" +msgstr "IDs Duplicados" + +#contributors: +msgid "Duplicate Thiessen Polygons Found" +msgstr "Encontrados Polígonos Thiesen duplicados" + +#contributors: +msgid "Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Please try to export current dataset without duplicates." +msgstr "" + +#contributors: +msgid "Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Press OK to save duplicate polygon ids to Table." +msgstr "" + +#contributors: +msgid "Duplicate variable names specified." +msgstr "" + +#contributors: +msgid "E&xplore" +msgstr "Explorar" + +#contributors: +msgid "ESRI File Geodatabase (*.gdb)|*.gdb" +msgstr "Geodatabase archivos ESRI (*.gdb)|*.gdb" + +#contributors: +msgid "ESRI Personal Geodatabase (*.mdb)|*.mdb" +msgstr "Geodatabase Personal ESRI (*.mdb)|*.mdb" + +#contributors: +msgid "ESRI Shapefile (*.shp)|*.shp" +msgstr "Archivo ESRI (*.shp)|*.shp" + +#contributors: +msgid "Edit" +msgstr "Editar" + +#contributors: +msgid "Edit Custom Breaks" +msgstr "Editar Cortes Personalizados" + +#contributors: +msgid "Edit LOWESS Parameters" +msgstr "Editar Parámetros LOWESS" + +#contributors: +msgid "Edit Title" +msgstr "Editar Título" + +#contributors: +msgid "Edit Variable Properties" +msgstr "Editar Propiedades de Variables" + +#contributors: +msgid "Emp Bayes Rate Std Moran's I (%s): %s / %s" +msgstr "I de Moran Std. en Tasa de Bayes Empírico (%s): %s / %s" + +#contributors: +msgid "Empirical Bayes" +msgstr "Empírico Bayes" + +#contributors: +msgid "Empirical Bayes Rate Standardization Variables" +msgstr "Variables Estandarizadas de Tasas de Bayes Empírico" + +#contributors: +msgid "Empirical Bayes Smoothed Variable Settings" +msgstr "Configuración Variable Alisada de Bayes Empírico" + +#contributors: +msgid "Empirical Spatial Rate Smoothed Variable Settings" +msgstr "Configuración de Variable Alisada de Tasa Empírica Espacial" + +#contributors: +msgid "Enable High DPI/Retina support (Mac only):" +msgstr "" + +#contributors: +msgid "Enable User Defined Value Range of Y-Axis" +msgstr "Permitir Definicion de Rango de Valores del Eje Y" + +#contributors: +msgid "Enable transparency setup of category color in map (Windows only):" +msgstr "" + +#contributors: +msgid "Encode" +msgstr "Codificación" + +#contributors: +msgid "Enter a seed value" +msgstr "Introducir valor de semilla" + +#contributors: +msgid "Enter a seed value for random number generator:" +msgstr "" + +#contributors: +msgid "Enter new ID variable name:" +msgstr "Introduzca nombre nueva variable ID" + +#contributors: +msgid "Equal Intervals" +msgstr "Intervalos Iguales" + +#contributors: +msgid "Equal Intervals Map" +msgstr "Mapa de Intervalos Iguales" + +#contributors: +msgid "Error" +msgstr "Error" + +#contributors: +msgid "Error while opening project:\n\n" +msgstr "" + +#contributors: +msgid "Error: " +msgstr "Error: " + +#contributors: +msgid "Error: Base values contain non-positive numbers which will result in undefined values." +msgstr "Error: Valores de la base con números negativos, que dan lugar a valores indefinidos." + +#contributors: +msgid "Error: Chosen theme requires more cateogries than observations." +msgstr "Error: el tema seleccionado tiene más categorías que observaciones." + +#contributors: +msgid "Error: Due to restrictions on the DBF file format, the particular combination of length and decimals entered is not valid. Based on your current choices, we recommend length = %d and decimals = %d" +msgstr "Error: debido a restricciones en el formato del archivo DBF, la combinación concreta de longitud y decimales introducida no es válida. En base a su elección actual, recomendamos longitud = %d y decimales = %d" + +#contributors: +msgid "Error: Maximum number of neighbors %d exceeded." +msgstr "Error: Excedido el máximo número de vecinos %d" + +#contributors: +msgid "Error: The table variable name is empty." +msgstr "Error: El nombre de la variable de la tabla está vacío." + +#contributors: +msgid "Error: \"%s\" already exists in Table, please specify a different name." +msgstr "Error: \"%s\" existente en la Tabla, especificar un nombre diferente." + +#contributors: +msgid "Error: \"%s\" is an invalid variable name. The first character must be alphabetic, and the remaining characters can be either alphanumeric or underscores. For DBF table, a valid variable name is between one and ten characters long." +msgstr "Error: \"%s\" no es un nombre de variable válido. El 1º carácter debe ser alfabético y los restantes pueden ser alfanuméricos o guiones bajos. En una tabla DBF, un nombre válido debe tener entre uno y 10 caracteres de largo." + +#contributors: +msgid "Error: \"%s\" not found." +msgstr "Error: \"%s\" no encontrado." + +#contributors: +msgid "Error: no records found in data source." +msgstr "Error: no hay registros en la fuente de datos" + +#contributors: +msgid "Error: the inverse matrix is ill-conditioned." +msgstr "Error: la matriz inversa está mal-condicionada" + +#contributors: +msgid "Estimated Pairs:" +msgstr "" + +#contributors: +msgid "Euclidean Distance" +msgstr "" + +#contributors: +msgid "Event Variable" +msgstr "Variable de Eventos" + +#contributors: +msgid "Excess Risk" +msgstr "Riesgo atribuible" + +#contributors: +msgid "Excess Risk Map Variable Settings" +msgstr "Configuración Variable de Mapa de Riesgo Excesivo" + +#contributors: +msgid "Exclude" +msgstr "Excluir" + +#contributors: +msgid "Existing Variables" +msgstr "Variables Existentes" + +#contributors: +msgid "Exit" +msgstr "Salir" + +#contributors: +msgid "Exit with unsaved changes?" +msgstr "¿Salir sin guardar cambios?" + +#contributors: +msgid "Exit?" +msgstr "¿Salir?" + +#contributors: +msgid "Explore" +msgstr "Explorar" + +#contributors: +msgid "Export or save layer to" +msgstr "Exportar o guardar capa para" + +#contributors: +msgid "Exporting Shape to Boundary" +msgstr "Exportar Shape to Boundary" + +#contributors: +msgid "Expression" +msgstr "Expresión" + +#contributors: +msgid "Extent" +msgstr "" + +#contributors: +msgid "Fail in reading the Boundary file: at polygon-%d" +msgstr "Error de lectura del fichero Boundary: en polígono-%d" + +#contributors: +msgid "Failed to create the weights file." +msgstr "Error al crear archivo de pesos." + +#contributors: +msgid "Failed to open data source. Please check the data/datasource and check if the data type/format is supported by GeoDa.\n\nTip: you can set up the necessary GeoDa driver by following the instructions at:\n http://geodacenter.github.io/formats.html" +msgstr "" + +#contributors: +msgid "False Discovery Rate:" +msgstr "Tasa de Falso Descubrimiento" + +#contributors: +msgid "February" +msgstr "" + +#contributors: +msgid "Field (%s) already exited." +msgstr "" + +#contributors: +msgid "File" +msgstr "Archivo" + +#contributors: +msgid "File Path" +msgstr "Ruta del Archivo" + +#contributors: +msgid "File doesn't exist!" +msgstr "¡Fichero no existente!" + +#contributors: +msgid "File merged into Table successfully." +msgstr "Archivo unido con éxito a la Tabla." + +#contributors: +msgid "Fill Color" +msgstr "" + +#contributors: +msgid "Fill Color for Category" +msgstr "" + +#contributors: +msgid "Fill Opacity for Category" +msgstr "" + +#contributors: +msgid "Finished" +msgstr "Terminado" + +#contributors: +msgid "First Variable (X)" +msgstr "Primera Variable (X)" + +#contributors: +msgid "First Variable (X/Longitude)" +msgstr "Primera Variable (X/Longitud)" + +#contributors: +msgid "First line of CSV is variable names?" +msgstr "¿Primera Línea de CSV esn nombre de variables?" + +#contributors: +msgid "First row of CSV file" +msgstr "Primera fila de archivo CSV" + +#contributors: +msgid "Fit-To-Window Mode" +msgstr "" + +#contributors: +msgid "Fixed Aspect Ratio Mode" +msgstr "Modo Ratio de Aspecto Fijo" + +#contributors: +msgid "Fixed scale over time" +msgstr "Escala fija en el tiempo" + +#contributors: +msgid "Fixed x-axis scale over time" +msgstr "Escala de eje-x fija en el tiempo" + +#contributors: +msgid "Fixed y-axis scale over time" +msgstr "Escala fija del eje-y en el tiempo" + +#contributors: +msgid "Fourth Variable" +msgstr "Cuarta Variable" + +#contributors: +msgid "Frequency" +msgstr "Frecuencia" + +#contributors: +msgid "Full Extent" +msgstr "Ver Todo" + +#contributors: +msgid "GAL files (*.gal)|*.gal" +msgstr "Archivos GAL (*.gal)|*.gal" + +#contributors: +msgid "GWT files (*.gwt)|*.gwt" +msgstr "Ficheros GWT (*.gwt)|*.gwt" + +#contributors: +msgid "GeoDa Bug Report Dialog" +msgstr "Cuadro de Informes de Errores de GeoDa" + +#contributors: +msgid "GeoDa CSV File Configuration" +msgstr "Configuración del Fichero CSV de GeoDa" + +#contributors: +msgid "GeoDa Help" +msgstr "Ayuda de GeoDa" + +#contributors: +msgid "GeoDa Preference Setup" +msgstr "Preferencias de GeoDa" + +#contributors: +msgid "GeoDa Project (*.gda)|*.gda" +msgstr "Proyecto de GeoDa (*.gda)|*.gda" + +#contributors: +msgid "GeoDa Project File (*.gda)|*.gda" +msgstr "Archivo de Proyecto GeoDa (*.gda)|*.gda" + +#contributors: +msgid "GeoDa Project File to Open" +msgstr "Abrir Archivo de Proyecto de GeoDa" + +#contributors: +msgid "GeoDa Project to Save As" +msgstr "Guardar Como Proyecto de GeoDa" + +#contributors: +msgid "GeoDa Update Dialog" +msgstr "Cuadro de Actualización de GeoDa" + +#contributors: +msgid "GeoDa can not get valid spatial reference from input data source. Please try another data source." +msgstr "" + +#contributors: +msgid "GeoDa can not open the input data source. Please try another data source." +msgstr "" + +#contributors: +msgid "GeoDa can't change the variable type to DATE/TIME. Please select another type." +msgstr "GeoDa no puede cambiar el tipo de variable a FECHA/HORA. Seleccionar otro tipo." + +#contributors: +msgid "GeoDa can't create a layer." +msgstr "" + +#contributors: +msgid "GeoDa can't load dataset with duplicate field names." +msgstr "" + +#contributors: +msgid "GeoDa can't read data from datasource. \n\nDetails: Datasource is empty." +msgstr "" + +#contributors: +msgid "GeoDa can't save a Table-only data source as a Geometry enabled data source. Please try to add a geometry layer and then use File->Save As." +msgstr "Imposible guardar una fuente de datos con una única Tabla como fuente de datos Geométricos. Intentar añadir capa geométrica y utilizar Fichero->Guardar Como." + +#contributors: +msgid "GeoDa can't save changes to this datasource. Please try to use File->Export." +msgstr "Imposible guardar cambios en esta fuente de datos. Intentar utilizar Archivo->Exportar." + +#contributors: +msgid "GeoDa cannot find proper projection or geographic coordinate system information to add a basemap. Please update this information (e.g. in .prj file)." +msgstr "GeoDa no puede encontrar la proyección adecuada o la información sobre coordenadas geográficas para añadir al mapa base. Actualizar esta información (p.e. con un archivo .prj)" + +#contributors: +msgid "GeoDa could not find the required weights file." +msgstr "Geoda no puede encontrar el archivo de pesos" + +#contributors: +msgid "GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager." +msgstr "" + +#contributors: +msgid "GeoDa could not load this layer. Please check if the datasource is valid and not table only." +msgstr "" + +#contributors: +msgid "GeoDa does not support creating data of %s. Please try to 'Export' to other supported data source format." +msgstr "" + +#contributors: +msgid "GeoDa does not support datasource with line data at this time. Please choose a datasource with either point or polygon data." +msgstr "" + +#contributors: +msgid "GeoDa has run into a problem and will close." +msgstr "GeoDa ha encontrado un problema y se cerrará." + +#contributors: +msgid "GeoDa maj.min.bld (type), day month year" +msgstr "GeoDa maj.min.bld (tipo), día mes año" + +#contributors: +msgid "GeoDa was unable to save the file." +msgstr "GeoDa no puede guardar el fichero." + +#contributors: +msgid "GeoJSON (*.geojson;*.json)|*.geojson;*.json" +msgstr "GeoJSON (*.geojson;*,json)|*.geojson;*,json" + +#contributors: +msgid "GeoJson URL" +msgstr "URL de GeoJson" + +#contributors: +msgid "GeoPackage (*.gpkg)|*.gpkg" +msgstr "GeoPackage (*.gpkg)|*.gpkg" + +#contributors: +msgid "Geography Markup Language (*.gml)|*.gml" +msgstr "Lenguaje de Marcado Geográfico (*.gml)|*.gml" + +#contributors: +msgid "Geometric centroids" +msgstr "" + +#contributors: +msgid "Geometries have been added to existing Table-only data source. Do you want to save them as a new datasource?" +msgstr "" + +#contributors: +msgid "Geometries not saved" +msgstr "Geometrías no guardadas" + +#contributors: +msgid "Get a free Carto account: " +msgstr "Obtener una cuenta Carto gratis" + +#contributors: +msgid "Get a free GeoDa-Web account: " +msgstr "Obtener una cuenta de GeoDa-Web gratis" + +#contributors: +msgid "Get a free Nokia/HERE account: " +msgstr "Obtener una cuenta gratis de Nokia/HERE" + +#contributors: +msgid "Getis-Ord" +msgstr "" + +#contributors: +msgid "Gi cluster map, pseudo p-val" +msgstr "Mapa de clústers Gi; pseudo p-val" + +#contributors: +msgid "Gi* cluster map, pseudo p-val" +msgstr "Gi* mapa de clústers, pseudo p-val." + +#contributors: +msgid "Greedy" +msgstr "" + +#contributors: +msgid "Greek (ISO-8859-7)" +msgstr "Griego (ISO-8859-7)" + +#contributors: +msgid "Grid Bounding Box" +msgstr "Cuadro Delimitador de Rejilla" + +#contributors: +msgid "Grid Size" +msgstr "Tamaño de Rejilla" + +#contributors: +msgid "Grid file was successfully created." +msgstr "Archivo de rejilla creado con éxito." + +#contributors: +msgid "Group" +msgstr "" + +#contributors: +msgid "Group 1:" +msgstr "Grupo 1:" + +#contributors: +msgid "Group 2:" +msgstr "Grupo 2:" + +#contributors: +msgid "Group Variable:" +msgstr "" + +#contributors: +msgid "Grouped Variables" +msgstr "Variables Agrupadas" + +#contributors: +msgid "Groups:" +msgstr "Grupos:" + +#contributors: +msgid "HDBScan" +msgstr "" + +#contributors: +msgid "HDBScan Cluster Map (%d clusters)" +msgstr "" + +#contributors: +msgid "HDBScan Clustering Settings" +msgstr "" + +#contributors: +msgid "HERE App ID" +msgstr "" + +#contributors: +msgid "HERE App Key" +msgstr "" + +#contributors: +msgid "Has Colocation" +msgstr "Tiene colocación" + +#contributors: +msgid "Hebrew (ISO-8859-8-1)" +msgstr "Hebreo (ISO-8859-8-1)" + +#contributors: +msgid "Hebrew (Windows-1255)" +msgstr "Hebreo (Windows-1255)" + +#contributors: +msgid "Height:" +msgstr "Height:" + +#contributors: +msgid "Help" +msgstr "Ayuda" + +#contributors: +msgid "Hide Map" +msgstr "Ocultar Mapa" + +#contributors: +msgid "Hide system table in Postgresql connection:" +msgstr "Ocultar tabla de sistema en conexión de Postgresql:" + +#contributors: +msgid "Hide system table in SQLITE connection:" +msgstr "Ocultar tabla de sistema en conexión SQLITE:" + +#contributors: +msgid "Hierachical Map does not work with Table only datasource." +msgstr "" + +#contributors: +msgid "Hierachical Map: " +msgstr "" + +#contributors: +msgid "Hierarchical" +msgstr "Jerárquico" + +#contributors: +msgid "Hierarchical Clustering Settings" +msgstr "Configuración Clúster Jerárquico" + +#contributors: +msgid "Hierarchical Map" +msgstr "" + +#contributors: +msgid "High" +msgstr "Alto" + +#contributors: +msgid "High-High" +msgstr "Alto-Alto" + +#contributors: +msgid "High-Low" +msgstr "Alto-Bajo" + +#contributors: +msgid "Highlight Color" +msgstr "Destacar Color" + +#contributors: +msgid "Hinge" +msgstr "Bisagra" + +#contributors: +msgid "Hinge=1.5" +msgstr "Bisagra=1.5" + +#contributors: +msgid "Hinge=3.0" +msgstr "Bisagra=3.0" + +#contributors: +msgid "Histogram" +msgstr "Histograma" + +#contributors: +msgid "Histogram Classification" +msgstr "Clasificación Histograma" + +#contributors: +msgid "Histogram Variable" +msgstr "Variable de Histograma" + +#contributors: +msgid "Histogram: " +msgstr "Histograma: " + +#contributors: +msgid "Horizontal Bins Breaks" +msgstr "Cortes Intervalos Horizontales" + +#contributors: +msgid "Horizontal Cells" +msgstr "Celdas Horizontales" + +#contributors: +msgid "Http connection timeout (seconds) for e.g. WFS, Geojson etc.:" +msgstr "Conexión http terminada (segundos) para p.e. WFS, Geojson, etc.:" + +#contributors: +msgid "ID is not specified!" +msgstr "ID no especificado" + +#contributors: +msgid "Image Dimension Settings" +msgstr "" + +#contributors: +msgid "Improve Cartogram" +msgstr "Mejorar Cartograma" + +#contributors: +msgid "Include" +msgstr "Incluir" + +#contributors: +msgid "Include Variable Names" +msgstr "Incluir Nombres de Variables" + +#contributors: +msgid "Include diagonal of weights matrix" +msgstr "Incluir diagonal de matriz de pesos" + +#contributors: +msgid "Include lower orders" +msgstr "Incluir órdenes inferiores" + +#contributors: +msgid "Incomplete Group Variable" +msgstr "" + +#contributors: +msgid "Independent Var (x-axis)" +msgstr "Var. Independiente (eje-x)" + +#contributors: +msgid "Independent Var X" +msgstr "Var X Independiente" + +#contributors: +msgid "Inference Settings" +msgstr "Configuración de Inferencia" + +#contributors: +msgid "Inference Settings (%d perm)" +msgstr "Configuración Inferencia (%d perm)" + +#contributors: +msgid "Info" +msgstr "Info" + +#contributors: +msgid "Information" +msgstr "Información" + +#contributors: +msgid "Initial Groups:" +msgstr "Grupos Iniciales:" + +#contributors: +msgid "Initial groups:\t" +msgstr "" + +#contributors: +msgid "Initialization Method:" +msgstr "Método de inicialización:" + +#contributors: +msgid "Initialization Re-runs:" +msgstr "Iniciando repeticiones:" + +#contributors: +msgid "Initialization method:\t" +msgstr "" + +#contributors: +msgid "Initialization re-runs:\t" +msgstr "" + +#contributors: +msgid "Input" +msgstr "Abrir" + +#contributors: +msgid "Input ASCII file" +msgstr "Introducir archivo ASCII" + +#contributors: +msgid "Input data source" +msgstr "" + +#contributors: +msgid "Input datasource" +msgstr "Fuente de Datos de Entrada" + +#contributors: +msgid "Input file " +msgstr "Abrir Archivo" + +#contributors: +msgid "Input file (text file)" +msgstr "Abrir archivo (texto)" + +#contributors: +msgid "Input is duplicated." +msgstr "Entrada duplicada." + +#contributors: +msgid "Input is not valid." +msgstr "Entrada no válida" + +#contributors: +msgid "Input is required" +msgstr "Se necesita una Entrada" + +#contributors: +msgid "Input significance:" +msgstr "Introducir significación:" + +#contributors: +msgid "Input:" +msgstr "Entrada:" + +#contributors: +msgid "Insert before" +msgstr "Insertar antes" + +#contributors: +msgid "Insufficient Random Sampling" +msgstr "Muestreo Aleatorio insuficiente" + +#contributors: +msgid "Internal Error: Add new field (%s) failed.\n\nDetails:%s" +msgstr "" + +#contributors: +msgid "Internal Error: Delete field failed.\n\nDetails:" +msgstr "" + +#contributors: +msgid "Internal Error: can't update an in-memory cell." +msgstr "Error Interno: no puede actualizar una celda en memoria" + +#contributors: +msgid "Intervals" +msgstr "Intervalos" + +#contributors: +msgid "Intervals in the Histogram" +msgstr "Intervalos en el Histograma" + +#contributors: +msgid "Invalid Variable" +msgstr "Variable no Válida" + +#contributors: +msgid "Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager to define a valid weights file." +msgstr "" + +#contributors: +msgid "Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file." +msgstr "" + +#contributors: +msgid "Invalid layer association has been detected, which will cause infinite highlighting loop. Please try to reset highlight association between layers." +msgstr "" + +#contributors: +msgid "Invert Select" +msgstr "Invertir Selección" + +#contributors: +msgid "Invert Selection" +msgstr "Invertir Selección" + +#contributors: +msgid "It looks like GeoDa has been terminated abnormally. \nDo you want to send a crash report to GeoDa team? \n\n(Optional) Please leave your email address,\nso we can send a follow-up email once we have a fix." +msgstr "" + +#contributors: +msgid "Iterations:" +msgstr "Iteraciones:" + +#contributors: +msgid "January" +msgstr "" + +#contributors: +msgid "Japanese (EUC-JP)" +msgstr "Japonés (EUC-JP)" + +#contributors: +msgid "Japanese (Shift&JIS)" +msgstr "Japonés (Shift&JIS)" + +#contributors: +msgid "Japanese (Shift_JIS)" +msgstr "" + +#contributors: +msgid "Join Operation:" +msgstr "" + +#contributors: +msgid "Join Variable:" +msgstr "" + +#contributors: +msgid "July" +msgstr "" + +#contributors: +msgid "June" +msgstr "" + +#contributors: +msgid "K Means" +msgstr "K Means" + +#contributors: +msgid "K Medians" +msgstr "K Medians" + +#contributors: +msgid "K Medoids" +msgstr "K Medoids" + +#contributors: +msgid "K-Nearest neighbors" +msgstr "K-vecinos Más Cercanos" + +#contributors: +msgid "KMeans Clustering Settings" +msgstr "" + +#contributors: +msgid "KMedians Clustering Settings" +msgstr "" + +#contributors: +msgid "KMedoids Clustering Settings" +msgstr "" + +#contributors: +msgid "KWT files (*.kwt)|*.kwt" +msgstr "Ficheros KWT (*.kwt)|*.kwt" + +#contributors: +msgid "Kernel function" +msgstr "Función Kernel" + +#contributors: +msgid "Key" +msgstr "Clave" + +#contributors: +msgid "Keyhole Markup Language (*.kml)|*.kml" +msgstr "Lenguaje de Marcado Keyhole (*.kml|*.kml" + +#contributors: +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" + +#contributors: +msgid "LISA" +msgstr "" + +#contributors: +msgid "LOWESS Smoother" +msgstr "Alisado LOWESS" + +#contributors: +msgid "LOWESS Smoother Help" +msgstr "Ayuda de Alisado LOWESS" + +#contributors: +msgid "LOWESS Smoother Parameters" +msgstr "Parámetros de Alisado LOWESS" + +#contributors: +msgid "Language" +msgstr "Idioma" + +#contributors: +msgid "Language:" +msgstr "Idioma:" + +#contributors: +msgid "Latitude/Y:" +msgstr "" + +#contributors: +msgid "Layer names" +msgstr "Nombres de capa" + +#contributors: +msgid "Left" +msgstr "" + +#contributors: +msgid "Legend Background Color" +msgstr "Color de Fondo de Leyenda" + +#contributors: +msgid "Length (max 254)" +msgstr "Tamaño (máx. 254)" + +#contributors: +msgid "Light" +msgstr "Fino" + +#contributors: +msgid "Limited date/time type recognition can be done for Date (YYYY-MM-DD), Time (HH:MM:SS+nn) and DateTime (YYYY-MM-DD HH:MM:SS+nn) in configuration.\n\nPlease try to load customized date/time type as string and covert it using Table->Edit Variable Property" +msgstr "" + +#contributors: +msgid "Line" +msgstr "Línea" + +#contributors: +msgid "Linear Smoother" +msgstr "Alisado Lineal" + +#contributors: +msgid "List of existing ungrouped variables. To group variables by time, move them to the list on the right.\n\nFor example, to group Pop80 and Pop90, select them on the left and move them to the right." +msgstr "" + +#contributors: +msgid "Load" +msgstr "" + +#contributors: +msgid "Load CRS from a data source" +msgstr "" + +#contributors: +msgid "Load Layer Failed." +msgstr "" + +#contributors: +msgid "Load time definition from project file." +msgstr "Cargar definición temporal de archivo de proyecto" + +#contributors: +msgid "Loading data..." +msgstr "Cargando datos..." + +#contributors: +msgid "Local G" +msgstr "G Local" + +#contributors: +msgid "Local G Maps" +msgstr "Mapas Locales G" + +#contributors: +msgid "Local G Statistics Maps" +msgstr "Mapas de Estadísticos G Locales" + +#contributors: +msgid "Local G*" +msgstr "G* Local" + +#contributors: +msgid "Local Geary" +msgstr "" + +#contributors: +msgid "Local Geary Maps" +msgstr "Mapas Geary Local" + +#contributors: +msgid "Local Join Count " +msgstr "" + +#contributors: +msgid "Local Moran's I Maps" +msgstr "Mapas del I de Moran Local" + +#contributors: +msgid "Local Moran's I with EB Rate" +msgstr "I de Moran Local con Tasas EB" + +#contributors: +msgid "Local Search:" +msgstr "Búsqueda Local" + +#contributors: +msgid "Local search:" +msgstr "" + +#contributors: +msgid "Locale for numbers has been setup successfully. Please re-open current project to enable this locale." +msgstr "Realizada con éxito la configuración local numérica. Reabrir el proyecto actual para activar esta configuración." + +#contributors: +msgid "Loop" +msgstr "Bucle" + +#contributors: +msgid "Low" +msgstr "Bajo" + +#contributors: +msgid "Low-High" +msgstr "Bajo-Alto" + +#contributors: +msgid "Low-Low" +msgstr "Bajo-Bajo" + +#contributors: +msgid "Lower outlier" +msgstr "Atípico superior" + +#contributors: +msgid "Lower-left corner" +msgstr "Esquina inferior izquierda" + +#contributors: +msgid "MDS" +msgstr "MDS" + +#contributors: +msgid "MDS Plot" +msgstr "Gráfico MDS" + +#contributors: +msgid "MDS Plot - " +msgstr "Gráfico MDS - " + +#contributors: +msgid "MDS Settings" +msgstr "Configuración MDS" + +#contributors: +msgid "MS Excel (*.xls)|*.xls" +msgstr "MS Excel (*.xls)|*.xls" + +#contributors: +msgid "Make selection from expression " +msgstr "Realizar selección de la expresión" + +#contributors: +msgid "Manual Resize Column" +msgstr "Cambio Ancho Manual de Columna" + +#contributors: +msgid "Map" +msgstr "Mapa" + +#contributors: +msgid "Map Color Classification" +msgstr "Clasificación Colores Mapa" + +#contributors: +msgid "Map Layer Settings" +msgstr "" + +#contributors: +msgid "Map Layout Preview" +msgstr "Map Layout Preview" + +#contributors: +msgid "Map Movie" +msgstr "Vídeo de Mapa" + +#contributors: +msgid "Map Theme" +msgstr "Tema de Mapa" + +#contributors: +msgid "Map Themes" +msgstr "Temas de Mapa" + +#contributors: +msgid "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" +msgstr "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" + +#contributors: +msgid "Maps To Open" +msgstr "Mapas para Abrir" + +#contributors: +msgid "Maps and Rates" +msgstr "Mapas y Tasas" + +#contributors: +msgid "Maps:" +msgstr "Mapas:" + +#contributors: +msgid "March" +msgstr "" + +#contributors: +msgid "Max" +msgstr "Máx." + +#contributors: +msgid "Max Distance:" +msgstr "" + +#contributors: +msgid "Max value of Y axis" +msgstr "Valor Máx. del eje Y" + +#contributors: +msgid "Max-p Settings" +msgstr "Configuración MaxP" + +#contributors: +msgid "Maximum # of regions:" +msgstr "Máximo nº de regiones:" + +#contributors: +msgid "Maximum Iterations:" +msgstr "Iteraciones máximas:" + +#contributors: +msgid "Maximum iterations:\t" +msgstr "" + +#contributors: +msgid "May" +msgstr "" + +#contributors: +msgid "Mean" +msgstr "" + +#contributors: +msgid "Merge" +msgstr "Combinar" + +#contributors: +msgid "Merge - " +msgstr "Unir - " + +#contributors: +msgid "Merge by key values" +msgstr "Combinar por valores clave" + +#contributors: +msgid "Merge by record order" +msgstr "Combinar por orden de registros" + +#contributors: +msgid "Merge error: Geometric type of selected datasource has to be the same with current datasource." +msgstr "Error de anexión: el tipo de geometría de la fuente de datos seleccionada y la activa debe ser la misma." + +#contributors: +msgid "Message area" +msgstr "Ãrea de Mensajes" + +#contributors: +msgid "Meta-data" +msgstr "" + +#contributors: +msgid "Method" +msgstr "Método" + +#contributors: +msgid "Method of selecting clusters:" +msgstr "" + +#contributors: +msgid "Method:" +msgstr "Método:" + +#contributors: +msgid "Method:\t" +msgstr "" + +#contributors: +msgid "Min" +msgstr "Mín." + +#contributors: +msgid "Min # per Region:" +msgstr "Mín. nº por Región:" + +#contributors: +msgid "Min Region Size:" +msgstr "Mín. Tamaño Región" + +#contributors: +msgid "Min cluster size:" +msgstr "" + +#contributors: +msgid "Min samples:" +msgstr "" + +#contributors: +msgid "Min value of Y axis" +msgstr "Valor mín. del eje Y" + +#contributors: +msgid "Minimum Bound:" +msgstr "Valor Cota Mín." + +#contributors: +msgid "Minimum bound:\t" +msgstr "" + +#contributors: +msgid "Minimum cluster size should be greater than one." +msgstr "" + +#contributors: +msgid "Minimum region size:\t" +msgstr "" + +#contributors: +msgid "Minimum samples should be greater than zero." +msgstr "" + +#contributors: +msgid "Models" +msgstr "Modelos" + +#contributors: +msgid "Moran Scatter Plot" +msgstr "Diagrama de Dispersión de Moran" + +#contributors: +msgid "Moran scatter plot is not supported when isolates are present in weights. Do you want to continue by removing the isolates when compute Moran's I?" +msgstr "" + +#contributors: +msgid "Moran's I (%s): %s" +msgstr "I de Moran (%s): %s" + +#contributors: +msgid "Moran's I with EB Rate" +msgstr "I de Moran con Tasa EB" + +#contributors: +msgid "Move Down" +msgstr "Abajo" + +#contributors: +msgid "Move Selected to Top" +msgstr "Mover Seleccionados Arriba" + +#contributors: +msgid "Move Up" +msgstr "Arriba" + +#contributors: +msgid "Multi-Variable Settings" +msgstr "Configuración Multi-Variable" + +#contributors: +msgid "Multivariate Local Geary" +msgstr "Geary Local Multivariante" + +#contributors: +msgid "Name" +msgstr "Nombre" + +#contributors: +msgid "Natural Breaks" +msgstr "Cortes Naturales" + +#contributors: +msgid "Natural Breaks Map" +msgstr "Mapa de Cortes Naturales" + +#contributors: +msgid "Negative" +msgstr "Negativo" + +#contributors: +msgid "Neighborless" +msgstr "Sin vecinos" + +#contributors: +msgid "Neighbors of Cores" +msgstr "Vecinos y Centros" + +#contributors: +msgid "New" +msgstr "Nuevo" + +#contributors: +msgid "New Categories Title" +msgstr "Título de Nueva Categoría" + +#contributors: +msgid "New Custom Categories Title:" +msgstr "Nuevo Título de Categorías Personalizado" + +#contributors: +msgid "New From Recent" +msgstr "Nuevo desde Reciente" + +#contributors: +msgid "New Group Details" +msgstr "Nombrar Nuevo Grupo" + +#contributors: +msgid "New Map Coordinates" +msgstr "Nuevo Mapa de Coordenadas" + +#contributors: +msgid "New Project Filename" +msgstr "Nuevo Nombre de Proyecto" + +#contributors: +msgid "New Selection" +msgstr "Nueva Selección" + +#contributors: +msgid "New datasource:" +msgstr "Nueva fuente de datos" + +#contributors: +msgid "New project file:" +msgstr "Nuevo archivo de proyecto" + +#contributors: +msgid "New selection" +msgstr "Nueva Selección" + +#contributors: +msgid "New space-time variable name" +msgstr "Nuevo nombre de variable espacio-temporal" + +#contributors: +msgid "New variable name" +msgstr "Nuevo nombre de variable" + +#contributors: +msgid "No Basemap" +msgstr "Sin Mapa Base" + +#contributors: +msgid "No Colocation" +msgstr "Sin colocación" + +#contributors: +msgid "No Weights Found" +msgstr "No se encontraron Pesos" + +#contributors: +msgid "No clusters can be found using current parameters." +msgstr "" + +#contributors: +msgid "No field chosen for first and second variable." +msgstr "" + +#contributors: +msgid "No field chosen for first variable." +msgstr "" + +#contributors: +msgid "No field chosen for fourth variable." +msgstr "" + +#contributors: +msgid "No field chosen for second variable." +msgstr "" + +#contributors: +msgid "No field chosen for third variable." +msgstr "" + +#contributors: +msgid "No layer has been selected. Please select a layer." +msgstr "No se ha seleccionado ninguna capa. Seleccionar capa" + +#contributors: +msgid "No layer was found in the selected data source." +msgstr "Capa no encontrada en la fuente de datos seleccionada" + +#contributors: +msgid "No layer was found in this datasource." +msgstr "" + +#contributors: +msgid "No numeric variables found in table." +msgstr "No hay variables numéricas en la tabla." + +#contributors: +msgid "No numeric variables found." +msgstr "" + +#contributors: +msgid "No rates currently calculated to save." +msgstr "No hay tasas calculadas para guardar." + +#contributors: +msgid "No update required" +msgstr "Ninguna actualización necesaria" + +#contributors: +msgid "No weights file was created due to all observations being isolates for the specified threshold value. Increase the threshold to create a non-empty weights file." +msgstr "No se creó el archivo de pesos porque todas las observaciones están aisladas para el valor umbral especificado. Aumente el umbral para crear un archivo de pesos no vacío" + +#contributors: +msgid "None of your observations have neighbors. This could be related to digitizing problems, which can be fixed by adjusting the precision threshold." +msgstr "Ninguna de las observaciones tiene vecinos. Esto podría deberse a problemas de digitalización, que podrían resolverse ajustando el umbral de precisión." + +#contributors: +msgid "Nordic Latin-6 (ISO-8859-10)" +msgstr "Nórdico Latín-6 (ISO-8859-10)" + +#contributors: +msgid "Normal" +msgstr "Normal" + +#contributors: +msgid "Not Clustered" +msgstr "" + +#contributors: +msgid "Not Significant" +msgstr "No Significativo" + +#contributors: +msgid "Not enough memory!" +msgstr "¡Memoria insuficiente!" + +#contributors: +msgid "Notice" +msgstr "Advertencia" + +#contributors: +msgid "November" +msgstr "" + +#contributors: +msgid "Null geometry was detected in dataset. GeoDa can't create weights with NULL geometry. Please try to save as records with valid geometries and try again." +msgstr "" + +#contributors: +msgid "Number Bins:" +msgstr "" + +#contributors: +msgid "Number of Box Plots" +msgstr "" + +#contributors: +msgid "Number of Categories" +msgstr "Número de Categorías" + +#contributors: +msgid "Number of Clusters:" +msgstr "Número de Clústers:" + +#contributors: +msgid "Number of Columns" +msgstr "Número de Columnas" + +#contributors: +msgid "Number of Neighbors" +msgstr "Número de Vecinos" + +#contributors: +msgid "Number of Rows" +msgstr "Número de Filas" + +#contributors: +msgid "Number of clusters:\t" +msgstr "" + +#contributors: +msgid "Number of neighbors" +msgstr "Número de vecinos" + +#contributors: +msgid "Number of not clustered observations: " +msgstr "" + +#contributors: +msgid "OGR failed to create field.\n\nDetails:" +msgstr "" + +#contributors: +msgid "OK" +msgstr "Aceptar" + +#contributors: +msgid "OK to Exit?" +msgstr "¿De acuerdo en Salir?" + +#contributors: +msgid "OLS Model has been selected." +msgstr "El Modelo MCO ha sido seleccionado." + +#contributors: +msgid "OLS Model with White test has been selected." +msgstr "Se ha seleccionado un Modelo MCO con test de White." + +#contributors: +msgid "Obs." +msgstr "" + +#contributors: +msgid "October" +msgstr "" + +#contributors: +msgid "Ok" +msgstr "Aceptar" + +#contributors: +msgid "On line %d of weights file, observation id %d encountered which does not exist in field \"%s\" of the Table." +msgstr "%d en línea del fichero de pesos, encontrado id de obs. %d que no existe en el campo \"%s\" de la Tabla." + +#contributors: +msgid "On line %d of weights file, observation id %d encountered which is out of allowed observation range of 1 through %d." +msgstr "En la fila %d del fichero de pesos, encontrada observación con id %d fuera del rango de permitido entre 1 y %d." + +#contributors: +msgid "Once you have grouped variables, you can save a new space-time table and weights: To add a spatial ID to your space-time table and create space-time weights, you need to have an active weights file (Tools-Weights Manager)." +msgstr "Una vez agrupadas las variables, debe guardar una nueva tabla y pesos espacio-temporales: Para añadir el ID espacial a su tabla y crear pesos espacio-temporales, debe tener un fichero activo de pesos (Herramientas-Gestor de Pesos)" + +#contributors: +msgid "Only 'gal', 'gwt', 'kwt', 'mat' and 'swm' weights files supported." +msgstr "Sólo se admiten ficheros de pesos 'gal', 'gwt', 'kwt', 'mat' y 'swm'" + +#contributors: +msgid "Only Map Boundary" +msgstr "Only Map Boundary" + +#contributors: +msgid "Oops. GeoDa was unable to submit a bug report. Please try again or create it here instead: https://github.com/GeoDaCenter/geoda/issues Thanks!" +msgstr "Oops. GeoDa no pudo enviar el informe de errores. Intentarlo de nuevo o desde aquí: https://github.com/GeoDaCenter/geoda/issues ¡Gracias!" + +#contributors: +msgid "Open" +msgstr "Abrir" + +#contributors: +msgid "Open Datasource:" +msgstr "Fuente de Datos Abierta:" + +#contributors: +msgid "Open Document Spreadsheet (*.ods)|*.ods" +msgstr "OpenDocument Hoja de Cálculo (*.ods)|*.ods" + +#contributors: +msgid "Open Layer:" +msgstr "Abrir Capa:" + +#contributors: +msgid "Open data source progress dialog" +msgstr "Abrir diálogo de progreso de fuente de datos" + +#contributors: +msgid "Open file" +msgstr "" + +#contributors: +msgid "Open project file:" +msgstr "Abrir archivo de proyecto" + +#contributors: +msgid "Open weights file" +msgstr "Abrir archivo de pesos" + +#contributors: +msgid "Operation requires a valid field name or constant." +msgstr "Operación que requiere de un nombre de campo válido o constante." + +#contributors: +msgid "Operator" +msgstr "Operador" + +#contributors: +msgid "Options" +msgstr "Opciones" + +#contributors: +msgid "Options > Change Parameters" +msgstr "" + +#contributors: +msgid "Options:" +msgstr "" + +#contributors: +msgid "Order of contiguity" +msgstr "Orden de contigüidad" + +#contributors: +msgid "Other (up to 99999)" +msgstr "Otro (superior a 99999)" + +#contributors: +msgid "Other Pos" +msgstr "Otra Pos." + +#contributors: +msgid "Other Positive" +msgstr "Otro Positivo" + +#contributors: +msgid "Outline Color" +msgstr "" + +#contributors: +msgid "Outline Color for Category" +msgstr "" + +#contributors: +msgid "Outline Visible" +msgstr "Outline Visible" + +#contributors: +msgid "Outlines Visible" +msgstr "Contornos Visibles" + +#contributors: +msgid "Output file (*.shp)" +msgstr "Arhivo de Resultados (*.shp)" + +#contributors: +msgid "Output file (text file)" +msgstr "Archivo de resultados (texto)" + +#contributors: +msgid "Output:" +msgstr "Resultados:" + +#contributors: +msgid "Overwrite?" +msgstr "¿Sobrescribir?" + +#contributors: +msgid "PCA" +msgstr "ACP" + +#contributors: +msgid "PCA Settings" +msgstr "Configuración de ACP" + +#contributors: +msgid "POLY&ID" +msgstr "POLY&ID" + +#contributors: +msgid "Pan" +msgstr "Arrastrar" + +#contributors: +msgid "Panning Mode" +msgstr "Modo Arrastrado" + +#contributors: +msgid "Parallel Coordinate Plot" +msgstr "Gráfico de Coordenadas Paralelas" + +#contributors: +msgid "Parallel Coordinate Plot: " +msgstr "Gráfico de Coordenadas Paralelas: " + +#contributors: +msgid "Parameters" +msgstr "Parámetros" + +#contributors: +msgid "Parameters:" +msgstr "Parámetros:" + +#contributors: +msgid "Password" +msgstr "Contraseña" + +#contributors: +msgid "Paste" +msgstr "Pegar" + +#contributors: +msgid "Percentile" +msgstr "Percentiles" + +#contributors: +msgid "Percentile Map" +msgstr "Mapa de Percentiles" + +#contributors: +msgid "Period 1" +msgstr "" + +#contributors: +msgid "Period 1:" +msgstr "Período 1:" + +#contributors: +msgid "Period 2" +msgstr "" + +#contributors: +msgid "Period 2:" +msgstr "Período 2:" + +#contributors: +msgid "Please briefly describe what went wrong." +msgstr "Describir brevemente lo que no ha funcionado." + +#contributors: +msgid "Please check input values are valid" +msgstr "" + +#contributors: +msgid "Please check the selected variables are all valid." +msgstr "Comprobar la validez de las variables seleccionadas." + +#contributors: +msgid "Please check your network connection, or contact GeoDa support team." +msgstr "Revisar conexión a la red o contactar con el equipo de soporte de GeoDa" + +#contributors: +msgid "Please choose Period 1 first." +msgstr "Elegir primero el Periodo 1" + +#contributors: +msgid "Please choose Period 1." +msgstr "Seleccionar Período 1." + +#contributors: +msgid "Please choose Period 2 first." +msgstr "Seleccionar antes el Período 2." + +#contributors: +msgid "Please choose Period 2." +msgstr "Seleccionar Período 2." + +#contributors: +msgid "Please choose Periods first." +msgstr "Seleccionar antes los Períodos." + +#contributors: +msgid "Please choose a Result field." +msgstr "Seleccionar un campo de Resultados." + +#contributors: +msgid "Please click to choose a highlighting style in GeoDa:" +msgstr "Haga click para elegir un estilo de resaltado en GeoDa" + +#contributors: +msgid "Please describe steps you took before something went wrong." +msgstr "Describir los pasos realizados antes de tener problemas." + +#contributors: +msgid "Please enter a field name for saving clustering results." +msgstr "Introducir un nombre de campo para guardar resultados de clústers" + +#contributors: +msgid "Please enter a valid number of cluster." +msgstr "" + +#contributors: +msgid "Please enter a valid number of clusters." +msgstr "" + +#contributors: +msgid "Please enter a valid positive integer" +msgstr "" + +#contributors: +msgid "Please enter iteration number" +msgstr "Introducir nº de iteración" + +#contributors: +msgid "Please enter maximum number of regions." +msgstr "Introducir máximo nº de regiones." + +#contributors: +msgid "Please enter minimum bound value" +msgstr "Introducir el valor de la cota mínima" + +#contributors: +msgid "Please enter minimum number of observations per regions, or use minimum bound instead." +msgstr "Introducir nº mínimo de observaciones por regiones o utilizar la cota mínima." + +#contributors: +msgid "Please enter number of regions" +msgstr "Introducir nº de regiones" + +#contributors: +msgid "Please enter values of bounding box." +msgstr "" + +#contributors: +msgid "Please first select observations in one of the other data or map views." +msgstr "Seleccionar primero observaciones en una de las otras vistas de datos o mapa." + +#contributors: +msgid "Please fix the grid bounding box." +msgstr "Por favor, ajustar cuadro delimitador de la rejilla" + +#contributors: +msgid "Please input Carto App Key." +msgstr "Introducir Clave de App de Carto." + +#contributors: +msgid "Please input Carto User Name." +msgstr "Introducir Nombre de Usuario de Carto." + +#contributors: +msgid "Please input a valid url address." +msgstr "Introducir dirección url válida." + +#contributors: +msgid "Please input a valid url." +msgstr "Introducir una url válida." + +#contributors: +msgid "Please input database host." +msgstr "Introducir base de datos anfitrión." + +#contributors: +msgid "Please input database name." +msgstr "Introducir nombre de base de datos" + +#contributors: +msgid "Please input database port." +msgstr "Introducir puerto de base de datos." + +#contributors: +msgid "Please input minimum bound value." +msgstr "Introducir un valor para cota mínima." + +#contributors: +msgid "Please input password." +msgstr "Introducir contraseña." + +#contributors: +msgid "Please input table name." +msgstr "Introducir el nombre de la tabla" + +#contributors: +msgid "Please input user name." +msgstr "Introducir nombre de usuario." + +#contributors: +msgid "Please load another layer using map window to apply Spatial Join." +msgstr "" + +#contributors: +msgid "Please open a data file rather than a project file (*.gda)." +msgstr "Reabrir un archivo de datos en lugar de un archivo de proyecto (*.gda)." + +#contributors: +msgid "Please provide paths for both Project file and Datasource." +msgstr "Proporcionar rutas para fichero de Proyecto y Fuente de Datos" + +#contributors: +msgid "Please restart GeoDa to apply the language setup." +msgstr "Reiniciar GeoDa para solicitar el asistente de idioma." + +#contributors: +msgid "Please restart GeoDa to finish installing updates." +msgstr "Reiniciar GeoDa para terminar de instalar actualizaciones." + +#contributors: +msgid "Please right-click or use
" +msgstr "" + +#contributors: +msgid "Please select Join Operation with Join Variable." +msgstr "" + +#contributors: +msgid "Please select a binary variable for Local Join Count." +msgstr "" + +#contributors: +msgid "Please select a map layer to apply spatial join to current map (%s):" +msgstr "" + +#contributors: +msgid "Please select a results field." +msgstr "Seleccionar un campo de resultados" + +#contributors: +msgid "Please select a time variable first, and make sure more than one time steps have been defined." +msgstr "Seleccionar antes una variable de tiempo y definir más de un período temporal." + +#contributors: +msgid "Please select a weights type." +msgstr "Seleccionar tipo de matriz de pesos." + +#contributors: +msgid "Please select an Base field." +msgstr "Seleccionar un campo Base" + +#contributors: +msgid "Please select an Event field." +msgstr "" + +#contributors: +msgid "Please select an Variable field." +msgstr "Seleccionar un campo de Variable." + +#contributors: +msgid "Please select another variable with values more suitable for computing a correlogram." +msgstr "Seleccionar otra variable con valores más adecuados para el cálculo del correlograma." + +#contributors: +msgid "Please select at least %d variables." +msgstr "Seleccionar, al menos, %d variables." + +#contributors: +msgid "Please select at least 2 variables." +msgstr "Seleccionar al menos 2 variables" + +#contributors: +msgid "Please select at least one variable." +msgstr "" + +#contributors: +msgid "Please select binary variables for Co-location Join Count." +msgstr "" + +#contributors: +msgid "Please select features first." +msgstr "Seleccionar 1º las características." + +#contributors: +msgid "Please select the layer name to connect:" +msgstr "Seleccionar el nombre de capa a conectar:" + +#contributors: +msgid "Please select two binary variables for Bivariate Local Join Count." +msgstr "" + +#contributors: +msgid "Please setup co-locations first." +msgstr "Establecer antes las co-localizaciones." + +#contributors: +msgid "Please specify a Weights matrix." +msgstr "Especificar una matriz de pesos." + +#contributors: +msgid "Please specify a valid data source name." +msgstr "Especificar un nombre válido de fuente de datos." + +#contributors: +msgid "Please specify distance metric." +msgstr "" + +#contributors: +msgid "Please specify the p-value to be used in tests; \ndefault: p-value = 0.01" +msgstr "" + +#contributors: +msgid "Please specify weights in Tools > Weights Manager." +msgstr "Especifique pesos en Herramientas > Gestor de Pesos" + +#contributors: +msgid "Please use
Options > Change Variable
to specify a variable." +msgstr "Utilizar
Opciones > Cambiar Variable
a especificar una variable." + +#contributors: +msgid "Plots:" +msgstr "Gráficos:" + +#contributors: +msgid "Point Color" +msgstr "Color de Puntos" + +#contributors: +msgid "Point Radius:" +msgstr "Point Radius:" + +#contributors: +msgid "Points from Table" +msgstr "Puntos de una Tabla" + +#contributors: +msgid "Positive" +msgstr "Positivo" + +#contributors: +msgid "Power" +msgstr "Potencia" + +#contributors: +msgid "Precision threshold" +msgstr "Precisión umbral" + +#contributors: +msgid "Pred. Val. and Res." +msgstr "Val. Pred. y Res." + +#contributors: +msgid "Preferences..." +msgstr "Preferencias..." + +#contributors: +msgid "Produce bounding-box file?" +msgstr "¿Crear archivo de cuadro delimitador?" + +#contributors: +msgid "Progress" +msgstr "Progreso" + +#contributors: +msgid "Project Information" +msgstr "Información de Proyecto" + +#contributors: +msgid "Project file path is empty." +msgstr "Ruta vacía de archivo de proyecto." + +#contributors: +msgid "Project filename not specified." +msgstr "Nombre archivo de proyecto no especificado." + +#contributors: +msgid "Project to X-Y" +msgstr "Proyectar a X-Y" + +#contributors: +msgid "Project to X-Z" +msgstr "Proyectar a X-Z" + +#contributors: +msgid "Project to Z-Y" +msgstr "Proyectar a Z-Y" + +#contributors: +msgid "Property" +msgstr "" + +#contributors: +msgid "Publish Maps and Plots to GeoDa-Web" +msgstr "Publicar Mapas y Gráficos para GeoDa-Web" + +#contributors: +msgid "Publish to GeoDa-Web" +msgstr "Publicar a la Web de GeoDa" + +#contributors: +msgid "Quantile" +msgstr "Cuantiles" + +#contributors: +msgid "Quantile Map" +msgstr "Mapa de Cuantiles" + +#contributors: +msgid "Queen contiguity" +msgstr "Contigüidad Reina" + +#contributors: +msgid "REDCAP Settings" +msgstr "Configuración de REDCAP" + +#contributors: +msgid "Random Gaussian dist with mean=%s, sd=%s" +msgstr "Dist. aleatoria gaussiana con media=%s, DT=%s" + +#contributors: +msgid "Random Sample" +msgstr "" + +#contributors: +msgid "Random uniform dist on unit interval" +msgstr "Distrib. uniforme aleatoria en intervalo unidad" + +#contributors: +msgid "Randomization" +msgstr "Aleatorización" + +#contributors: +msgid "Rate calculation successful." +msgstr "Tasa calculada con éxito." + +#contributors: +msgid "Rates" +msgstr "Tasas" + +#contributors: +msgid "Rates Variable Settings" +msgstr "Configuración Variable de Tasas" + +#contributors: +msgid "Rates-Calculated Map" +msgstr "Mapa de Tasas Calculadas" + +#contributors: +msgid "Rates-Calculated Maps" +msgstr "Mapas de Ratios Calculados" + +#contributors: +msgid "Raw Rate" +msgstr "Tasa Cruda" + +#contributors: +msgid "Raw Rate Smoothed Variable Settings" +msgstr "Configuración Variable Alisada Tasa Cruda" + +#contributors: +msgid "Re&set" +msgstr "" + +#contributors: +msgid "Read from an ASCII file" +msgstr "Leer de un Archivo ASCII" + +#contributors: +msgid "Recent" +msgstr "Reciente" + +#contributors: +msgid "Record order specified, but found minimum and maximum observation values of %d and %d which is incompatible with number of observations specified in first line of weights file: %d ." +msgstr "Orden de registro especificado, pero se encontraron valores de obs. mín. y máx. de %d y %d que son incompatibles con el nº de observaciones especificadas en la 1ª línea del archivo de pesos: %d ." + +#contributors: +msgid "Rectangle" +msgstr "Rectángulo" + +#contributors: +msgid "Redo" +msgstr "Repetir" + +#contributors: +msgid "Refresh" +msgstr "Actualizar" + +#contributors: +msgid "Regimes Regression" +msgstr "Regresión" + +#contributors: +msgid "Regression" +msgstr "Regresión" + +#contributors: +msgid "Regression Line Color" +msgstr "Color Línea de Regresión" + +#contributors: +msgid "Regression Output Text File" +msgstr "Archivo de Texto Resultados de la Regresión" + +#contributors: +msgid "Regression Report" +msgstr "Informe de Regresión" + +#contributors: +msgid "Remove" +msgstr "" + +#contributors: +msgid "Remove Time" +msgstr "Elimine el Tiempo" + +#contributors: +msgid "Rename Space-Time Variable" +msgstr "Renombrar Variable Espacio-Temporal" + +#contributors: +msgid "Rename Variable" +msgstr "Renombrar Variable" + +#contributors: +msgid "Reset" +msgstr "Borrar" + +#contributors: +msgid "Reset to default" +msgstr "Restaurar predeterminado" + +#contributors: +msgid "Reset to system locale information" +msgstr "Información de restauración a configuración local del sistema" + +#contributors: +msgid "Reset to system locale successfully. Please re-open current project with system locale." +msgstr "Restaurado con éxito a configuración local del sistema. Reabrir el proyecto actual con la configuración local." + +#contributors: +msgid "Resize" +msgstr "Redimensionar" + +#contributors: +msgid "Resolution(dpi):" +msgstr "Resolution(dpi):" + +#contributors: +msgid "Result" +msgstr "Resultado" + +#contributors: +msgid "Reverse" +msgstr "Marcha Atrás" + +#contributors: +msgid "Right" +msgstr "" + +#contributors: +msgid "Rook contiguity" +msgstr "Contigüidad Torre" + +#contributors: +msgid "Root Variable:" +msgstr "" + +#contributors: +msgid "Run" +msgstr "Ejecutar" + +#contributors: +msgid "Run Diff-in-Diff Test" +msgstr "Ejecutar Test de dif-en-dif" + +#contributors: +msgid "S.D" +msgstr "" + +#contributors: +msgid "SELECTED" +msgstr "SELECCIONADO" + +#contributors: +msgid "SQLite/SpatiaLite (*.sqlite)|*.sqlite" +msgstr "SQLite/SpatiaLite (*.sqlite)|*.sqlite" + +#contributors: +msgid "SVD will be automatically used for PCA since the number of rows is less than the number of columns." +msgstr "SDV será utilizado automáticmente por APC porque el nº de filas es menor que el nº de columnas." + +#contributors: +msgid "Sample Autocorrelation" +msgstr "Autocorrelación muestral" + +#contributors: +msgid "Sample Data" +msgstr "Datos de Ejemplo" + +#contributors: +msgid "Sample Size:" +msgstr "" + +#contributors: +msgid "Save" +msgstr "Guardar" + +#contributors: +msgid "Save " +msgstr "Guardar " + +#contributors: +msgid "Save As" +msgstr "Guardar como" + +#contributors: +msgid "Save As Datasource" +msgstr "Guardar Como Fuente Datos" + +#contributors: +msgid "Save As has been cancelled." +msgstr "Guardar Como ha sido cancelado." + +#contributors: +msgid "Save Categories" +msgstr "Guardar Categorías" + +#contributors: +msgid "Save Categories to Table" +msgstr "Guardar Categorías en Tabla" + +#contributors: +msgid "Save Centroids" +msgstr "Guardar Centroides" + +#contributors: +msgid "Save Cluster in Field:" +msgstr "Guardar Clúster en Campo:" + +#contributors: +msgid "Save Connectivity To Table" +msgstr "Guardar Conectividad a Tabla" + +#contributors: +msgid "Save Details" +msgstr "Guardar Detalles" + +#contributors: +msgid "Save Diff-in-Diff Test Results" +msgstr "Guardar Resultados del Test de Dif-en-Dif" + +#contributors: +msgid "Save Dummy" +msgstr "Guardar Ficticia" + +#contributors: +msgid "Save Duplicate Thiessen Polygon Ids" +msgstr "Guardar Ids de Polígonos Thiessen Duplicados" + +#contributors: +msgid "Save Duplicate Thiessen Polygons to Table" +msgstr "Guardar Duplicado de Polígonos Thiessen a Tabla" + +#contributors: +msgid "Save Image As" +msgstr "Guardar Imagen Como" + +#contributors: +msgid "Save Image to File" +msgstr "Guardar Imagen a Archivo" + +#contributors: +msgid "Save Mean Centers" +msgstr "Guardar Centros Medios" + +#contributors: +msgid "Save OSM roads file" +msgstr "" + +#contributors: +msgid "Save OSM roads to file successfully." +msgstr "" + +#contributors: +msgid "Save Project" +msgstr "Guardar Proyecto" + +#contributors: +msgid "Save Project File As..." +msgstr "Guardar Fichero de Proyecto Como..." + +#contributors: +msgid "Save Projet File As" +msgstr "Guardar Archivo de Proyecto Como" + +#contributors: +msgid "Save Rates" +msgstr "Guardar Tasas" + +#contributors: +msgid "Save Rates - %s over %s" +msgstr "Guardar Tasas - %s sobre %s" + +#contributors: +msgid "Save Regression Results" +msgstr "Guardar Resultados de Regresión" + +#contributors: +msgid "Save Results" +msgstr "Guardar Resultados" + +#contributors: +msgid "Save Results to Table: " +msgstr "" + +#contributors: +msgid "Save Results: HDBScan (Core Distances/Probabilities/Outliers)" +msgstr "" + +#contributors: +msgid "Save Results: Local Join Count stats, " +msgstr "" + +#contributors: +msgid "Save Results: LocalGeary" +msgstr "Guardar Resultados: GearyLocal" + +#contributors: +msgid "Save Results: MDS" +msgstr "" + +#contributors: +msgid "Save Results: Moran's I" +msgstr "Guardar Resultados: I de Moran" + +#contributors: +msgid "Save Selected As" +msgstr "Guardar Selección como" + +#contributors: +msgid "Save Selection" +msgstr "Guardar Selección" + +#contributors: +msgid "Save Space-Time Table/Weights" +msgstr "Guardar Tabla Espacio-Tiempo/pesos" + +#contributors: +msgid "Save Spanning Tree" +msgstr "Guardar Ãrbol de Expansión" + +#contributors: +msgid "Save Spanning Tree to a Weights File" +msgstr "Guardar Ãrbol de Expansión a un Fichero de Pesos" + +#contributors: +msgid "Save Statistics file" +msgstr "Guardar archivo de Estadísticas" + +#contributors: +msgid "Save Table As CSV File" +msgstr "Guardar Tabla como CSV" + +#contributors: +msgid "Save Test Results" +msgstr "Guardar Resultados del Test" + +#contributors: +msgid "Save Thiessen Polygons" +msgstr "Guardar Polígonos Thiessen" + +#contributors: +msgid "Save as data source (%s) failed.\n\nDetails:" +msgstr "" + +#contributors: +msgid "Save data source progress dialog" +msgstr "Diálogo de progreso de guardar fuente de datos" + +#contributors: +msgid "Save is not supported on current data source type: %s. Please try to use \"File->Save As\" other data source. However, the project file can still be saved as other project file." +msgstr "No es posible Guardar en el tipo de fuente de datos activo: %s. Intentar utilizar \"Archivo->Guardar Como\" otra fuente de datos. No obstante, el archivo de proyecto puede ser guardado con otro nombre." + +#contributors: +msgid "Save to File" +msgstr "Guardar en Archivo" + +#contributors: +msgid "Save/Show Map" +msgstr "" + +#contributors: +msgid "Saved successfully." +msgstr "Guardado con éxito" + +#contributors: +msgid "Saving data source cancelled." +msgstr "Cancelado el guardado de fuente de datos." + +#contributors: +msgid "Saving data..." +msgstr "Guardando datos..." + +#contributors: +msgid "Saving failed: GeoDa can't save as empty datasource." +msgstr "Error en Guardando: GeoDa no puede guardar fuentes de datos vacías." + +#contributors: +msgid "Saving to data source (%s) failed.\n\nDetails: %s" +msgstr "" + +#contributors: +msgid "Scale Basemap" +msgstr "" + +#contributors: +msgid "Scale Options" +msgstr "Opciones de Escala" + +#contributors: +msgid "Scatter Plot" +msgstr "Diagrama de Dispersión" + +#contributors: +msgid "Scatter Plot - x: %s, y: %s" +msgstr "Diagrama de Dispersión - x: %s, y: %s" + +#contributors: +msgid "Scatter Plot Matrix" +msgstr "Matriz de Diagramas de Dispersión" + +#contributors: +msgid "Scatter Plot Matrix Help" +msgstr "Ayuda Matriz de Gráficos de Dispersión" + +#contributors: +msgid "Scatter Plot Matrix Variables Add/Remove" +msgstr "Añadir/Eliminar Variables Matriz Gráficos de Dispersión" + +#contributors: +msgid "Scatter Plot Variables" +msgstr "Variables Diagrama de Dispersión" + +#contributors: +msgid "Scatter Plot- x: %s, y: %s" +msgstr "Diagrama de Dispersión- x: %s, y: %s" + +#contributors: +msgid "Second Variable (Y)" +msgstr "Segunda Variable (y)" + +#contributors: +msgid "Second Variable (Y/Latitude)" +msgstr "Segunda Variable (Y/Latitud)" + +#contributors: +msgid "Select" +msgstr "Seleccionar" + +#contributors: +msgid "Select All" +msgstr "Seleccionar Todo" + +#contributors: +msgid "Select All In Range" +msgstr "Seleccionar Todo en Intervalo" + +#contributors: +msgid "Select All Undefined" +msgstr "Seleccionar Todo Celdas en Blanco" + +#contributors: +msgid "Select All..." +msgstr "Seleccionar Todo..." + +#contributors: +msgid "Select From Current Selection" +msgstr "Seleccionar de Selección Actual" + +#contributors: +msgid "Select ID Variable" +msgstr "Seleccionar Variable ID" + +#contributors: +msgid "Select ID Variable (Optional)" +msgstr "" + +#contributors: +msgid "Select Neighborless Observations" +msgstr "Seleccionar Observaciones sin Vecinos" + +#contributors: +msgid "Select Variables" +msgstr "Selección de Variables" + +#contributors: +msgid "Select Variables (Multi-Selection)" +msgstr "Seleccionar Variables (Multi-Selección)" + +#contributors: +msgid "Select a file:" +msgstr "" + +#contributors: +msgid "Select an existing *.gdb directory, or create an New Folder named *.gdb" +msgstr "Seleccionar un directorio *.gdb existente o crear una Nueva Carpeta llamada *.gdb" + +#contributors: +msgid "Select color scheme:" +msgstr "Seleccionar paleta de colores" + +#contributors: +msgid "Select datasource" +msgstr "Seleccionar fuente de datos" + +#contributors: +msgid "Select encoding (optional): " +msgstr "" + +#contributors: +msgid "Select field is not integer type. Default record order will be used instead." +msgstr "" + +#contributors: +msgid "Select fields:" +msgstr "Seleccionar campos" + +#contributors: +msgid "Select from current selection" +msgstr "Seleccionar de selección actual" + +#contributors: +msgid "Select key:" +msgstr "Seleccionar clave" + +#contributors: +msgid "Select layer" +msgstr "Select layer" + +#contributors: +msgid "Select the language" +msgstr "Seleccionar idioma" + +#contributors: +msgid "Select variable " +msgstr "Seleccionar variable " + +#contributors: +msgid "Select variable for dissolving:" +msgstr "" + +#contributors: +msgid "Select variables to delete " +msgstr "Seleccionar variables a eliminar" + +#contributors: +msgid "Select variables:" +msgstr "" + +#contributors: +msgid "Select, hold CMD for brushing" +msgstr "" + +#contributors: +msgid "Select, hold CTRL for brushing" +msgstr "Seleccionar, mantener CTRL para brushing" + +#contributors: +msgid "Selectable Fill Color" +msgstr "Seleccionable Color de Relleno" + +#contributors: +msgid "Selected" +msgstr "Seleccionado" + +#contributors: +msgid "Selected =" +msgstr "Seleccionados" + +#contributors: +msgid "Selected vs. Unselected" +msgstr "Seleccionado vs. Desmarcado" + +#contributors: +msgid "Selection" +msgstr "Selección" + +#contributors: +msgid "Selection Mode" +msgstr "Modo de Selección" + +#contributors: +msgid "Selection Shape" +msgstr "Selección Forma" + +#contributors: +msgid "Selection Tool" +msgstr "Herramienta de Selección" + +#contributors: +msgid "Selection Variable" +msgstr "Variable de Selección" + +#contributors: +msgid "Send Crash Report" +msgstr "Enviar Informe de Errores" + +#contributors: +msgid "September" +msgstr "" + +#contributors: +msgid "Set Association Dialog" +msgstr "Set Association Dialog" + +#contributors: +msgid "Set Display Precision" +msgstr "Fijar Pantalla de Precisión" + +#contributors: +msgid "Set Display Precision of Y-Axis" +msgstr "Fijar Posiciones Decimales en Eje-Y" + +#contributors: +msgid "Set Display Precision on Axes" +msgstr "Mostrar Pantalla de Precisión de Ejes" + +#contributors: +msgid "Set Display Precision:" +msgstr "Mostrar Pantalla de Precisión" + +#contributors: +msgid "Set Highlight Association" +msgstr "Set Highlight Association" + +#contributors: +msgid "Set Number Separators" +msgstr "Fijar Separadores de Números" + +#contributors: +msgid "Set Number Separators in Table" +msgstr "Fijar Separadores de Números en Tabla" + +#contributors: +msgid "Set Number of Permutation" +msgstr "Fijar Número de Permutaciones" + +#contributors: +msgid "Set number of CPU cores manually:" +msgstr "Establecer manualmente el número de núcleos de CPU" + +#contributors: +msgid "Set seed for randomization:" +msgstr "Fijar semilla para aleatorización:" + +#contributors: +msgid "Set the threshold to bridge the gap between disconnected polygons (often caused by digitizing errors). The value depends on your measurement unit (e.g. 1 foot or 0.0000001 degrees). Use the weights histogram to detect neighborless observations." +msgstr "Fijar el umbral para acortar distancias entre polígonos desconectados (a veces por errores de digitalización). El valor depende de la unidad de medida (ej., 0,3 metros ó 0,0000001 grados. Utilizar histograma de pesos para detectar observaciones sin vecinos." + +#contributors: +msgid "Set transparency of highlighted objects in selection:" +msgstr "Fijar transparencia de objetos resaltados en la selección:" + +#contributors: +msgid "Set transparency of unhighlighted objects in selection:" +msgstr "Fijar transparencia de objetos sin resaltar en la selección" + +#contributors: +msgid "Set value to cell failed." +msgstr "" + +#contributors: +msgid "Setup Locale of GeoDa Table" +msgstr "Configuración Local de Tablas de GeoDa" + +#contributors: +msgid "Setup co-locations:" +msgstr "Establecer colocalizaciones:" + +#contributors: +msgid "Shape" +msgstr "Formas" + +#contributors: +msgid "Shape Centers" +msgstr "Centros de Forma" + +#contributors: +msgid "Show As Conditional Map" +msgstr "Mostrar como Mapa Condicional" + +#contributors: +msgid "Show Axes" +msgstr "Mostrar Ejes" + +#contributors: +msgid "Show Axes Through Origin" +msgstr "Mostrar Ejes sobre el Origen" + +#contributors: +msgid "Show CSV Configuration in Merge Data Dialog:" +msgstr "Mostrar Formato CSV en Cuadro de Unión de Tablas" + +#contributors: +msgid "Show Graph" +msgstr "Mostrar Grafo" + +#contributors: +msgid "Show LOWESS Smoother" +msgstr "Mostrar Alisado LOWESS" + +#contributors: +msgid "Show Legend" +msgstr "Show Legend" + +#contributors: +msgid "Show Linear Smoother" +msgstr "Mostrar Alisado Lineal" + +#contributors: +msgid "Show Map Boundary" +msgstr "" + +#contributors: +msgid "Show Recent/Sample Data panel in Connect Datasource Dialog:" +msgstr "" + +#contributors: +msgid "Show Selection and Neighbors" +msgstr "Mostrar Selección y Vecinos" + +#contributors: +msgid "Show Status Bar" +msgstr "Mostrar Barra de Estado" + +#contributors: +msgid "Show Vertical Axis" +msgstr "Mostrar Eje Vertical" + +#contributors: +msgid "Show connect line" +msgstr "Show connect line" + +#contributors: +msgid "Significance Filter" +msgstr "" + +#contributors: +msgid "Significance Map" +msgstr "Mapa de Significación" + +#contributors: +msgid "Simulated Annealing" +msgstr "" + +#contributors: +msgid "Skater Settings" +msgstr "Configuración Skater" + +#contributors: +msgid "Smoother" +msgstr "Alisado" + +#contributors: +msgid "Some calculated values were undefined and this is most likely due to neighborless observations in the weight matrix. Rate calculation successful for observations with neighbors." +msgstr "Algunos valores calculados están sin definir y esto se debe muy probablemente a observaciones sin vecinos en la matriz de pesos. Cálculo de tasas correcto para obs. con vecinos." + +#contributors: +msgid "Sort" +msgstr "Ordenar" + +#contributors: +msgid "South European Latin-3 (ISO-8859-3)" +msgstr "Sur de Europa Latín-3 (ISO-8859-3)" + +#contributors: +msgid "Space-time variables with duplicate name \"%s\" found." +msgstr "Encontradas variables Espacio-temporales con el nombre \"%s\" duplicado" + +#contributors: +msgid "Spatial Constraint:" +msgstr "" + +#contributors: +msgid "Spatial Correlogram" +msgstr "Correlograma Espacial" + +#contributors: +msgid "Spatial Empirical Bayes" +msgstr "Empírico Bayes Espacial" + +#contributors: +msgid "Spatial Error" +msgstr "Error Espacial" + +#contributors: +msgid "Spatial Join" +msgstr "Unión Espacial" + +#contributors: +msgid "Spatial Join can not be applied on two points layers. Please select another layer." +msgstr "" + +#contributors: +msgid "Spatial Join can not be applied on unknonwn layers. Please select another layer." +msgstr "" + +#contributors: +msgid "Spatial Join does not work with Table only datasource." +msgstr "" + +#contributors: +msgid "Spatial Lag" +msgstr "Retardo Espacial" + +#contributors: +msgid "Spatial Rate" +msgstr "Tasa Espacial" + +#contributors: +msgid "Spatial Rate Smoothed Variable Settings" +msgstr "Configuración Variable Alisada de Tasa Espacial" + +#contributors: +msgid "Spatial lag and error regressions require symmetric weights (not KNN). You can still use KNN weights to obtain spatial diagnostics for classic regressions." +msgstr "Los modelos del retardo y del error espacial necesitan pesos simétricos (no KNN). Los pesos KNN pueden utilizarse para calcular tests espaciales en el modelo básico." + +#contributors: +msgid "Special" +msgstr "Especial" + +#contributors: +msgid "Specified id field (%s) not found in currently loaded Table." +msgstr "Campo id especificado (%s) no se encuentra en la Tabla activa" + +#contributors: +msgid "Specified key (%d) not found in currently loaded Table." +msgstr "No se encuentra la clave especificada (%d) en la Tabla activa" + +#contributors: +msgid "Specified key (%s) not found in currently loaded Table." +msgstr "La clave especificada (%s) no se encuentra en la Tabla activa" + +#contributors: +msgid "Specified key value field \"%s\" in weights file contains duplicate values in the currently loaded Table." +msgstr "El campo de valores clave especificado \"%s\" del fichero de pesos contiene valores duplicados en la Tabla activa." + +#contributors: +msgid "Specified key value field \"%s\" on first line of weights file is not an integer type in the currently loaded Table." +msgstr "El campo especificado para el valor clave \"%s\" de la 1ª línea del archivo de pesos no es de tipo entero en la tabla activa." + +#contributors: +msgid "Specified key value field \"%s\" on first line of weights file not found in currently loaded Table." +msgstr "Campo especificado de valor clave \"%s\" de la 1ª línea del archivo de pesos no está en la Tabla activa" + +#contributors: +msgid "Specify Seed..." +msgstr "Especificar Semilla..." + +#contributors: +msgid "Specify bandwidth" +msgstr "Especificar ancho de banda" + +#contributors: +msgid "Specify manually" +msgstr "Especificar manualmente" + +#contributors: +msgid "Spectral" +msgstr "Espectral" + +#contributors: +msgid "Spectral Clustering Map (%d clusters)" +msgstr "" + +#contributors: +msgid "Spectral Clustering Settings" +msgstr "Configuración Clúster Espectral" + +#contributors: +msgid "Speed" +msgstr "Velocidad" + +#contributors: +msgid "Stable Version and Bug Fixes Only" +msgstr "Versión Estable y Sólo Corrección de Errores" + +#contributors: +msgid "Stack" +msgstr "Agregar" + +#contributors: +msgid "Standard Deviation" +msgstr "Desviación Estándar" + +#contributors: +msgid "Standard Deviation Color" +msgstr "Color Desviación Estándar" + +#contributors: +msgid "Standard Deviation Map" +msgstr "Mapa de Desviación Estándar" + +#contributors: +msgid "Standardized Data" +msgstr "Datos estandarizados" + +#contributors: +msgid "Statistics" +msgstr "Estadísticos" + +#contributors: +msgid "Status Bar" +msgstr "Barra de Estado" + +#contributors: +msgid "Stopping criterion for power iteration:" +msgstr "Criterio de parada para iteración de potencia" + +#contributors: +msgid "Strong" +msgstr "Grueso" + +#contributors: +msgid "Submit Bug Error" +msgstr "Enviar Informe de Errores" + +#contributors: +msgid "Submit Bug Report" +msgstr "Enviar Informe de Errores" + +#contributors: +msgid "Success" +msgstr "Éxito" + +#contributors: +msgid "Success / Warning" +msgstr "" + +#contributors: +msgid "Successful aggregation." +msgstr "Agregación realizada con éxito" + +#contributors: +msgid "Suggested field name:" +msgstr "Nombre de campo sugerido" + +#contributors: +msgid "Sum" +msgstr "Suma" + +#contributors: +msgid "Summary" +msgstr "Resumen" + +#contributors: +msgid "Synchronize %s with Time Control" +msgstr "Sincronizar %n with Control de Tiempo" + +#contributors: +msgid "System" +msgstr "Sistema" + +#contributors: +msgid "System:" +msgstr "Sistema:" + +#contributors: +msgid "T&able" +msgstr "Tabla" + +#contributors: +msgid "Table" +msgstr "Tabla" + +#contributors: +msgid "Table Name" +msgstr "Nombre de Tabla" + +#contributors: +msgid "Tabu Length:" +msgstr "Distancia Tabú" + +#contributors: +msgid "Tabu Search" +msgstr "" + +#contributors: +msgid "Tabu length for Tabu Search algorithm has to be an integer number larger than 1 (e.g. 85)." +msgstr "Distancia tabú para el algoritmo Búsqueda Tabú debe ser un número entero mayor que 1 (ej. 85)" + +#contributors: +msgid "Tabu length:" +msgstr "" + +#contributors: +msgid "Target" +msgstr "Objetivo" + +#contributors: +msgid "Target Variable" +msgstr "Variable Objetivo" + +#contributors: +msgid "Thank you for helping us improve GeoDa with your bug report! \n\nYou can track our response and add screenshots or details here (or email us at spatial@uchicago.edu):" +msgstr "" + +#contributors: +msgid "The GeoDa project file cannot find one or more associated data sources.\n\nDetails: GeoDa is looking for: %s\n\nTip: You can open the .gda project file in a text editor to modify the path(s) of the data source associated with your project." +msgstr "" + +#contributors: +msgid "The Table should always be open, although somtimes it is hidden while the project is open. This condition has been violated. Please report this to the program developers." +msgstr "" + +#contributors: +msgid "The between-cluster sum of squares:\t" +msgstr "" + +#contributors: +msgid "The categories of the selected variables do not overlap in space. Please select other variables." +msgstr "Las categorías de las variables seleccionadas no se superponen en el espacio. Seleccionar otras variables." + +#contributors: +msgid "The connectivity of selected spatial weights is incomplete, please adjust the spatial weights." +msgstr "La conectividad de los pesos espaciales seleccionados está incompleta; arreglar matriz de pesos." + +#contributors: +msgid "The currently entered threshold value is not a valid number. Please move the slider, or enter a valid number." +msgstr "The valor umbral introducido no es un nº válido. Mover el control deslizante o introducir un número válido." + +#contributors: +msgid "The currently entered threshold value is not a valid number. Please move the slider, or enter a valid number." +msgstr "" + +#contributors: +msgid "The currently entered threshold value of %f is less than %f which is the minimum value for which there will be no neighborless observations (isolates). \n\nPress Yes to proceed anyhow, press No to abort." +msgstr "" + +#contributors: +msgid "The data source is read only. Please try to save as other data source." +msgstr "La fuente de datos sólo se ha leído. Guardar como otra fuente de datos" + +#contributors: +msgid "The first line should have comma separated number of rows and ID name!" +msgstr "¡La 1ª línea debería tener un nº de filas separadas por comas y nombre de ID!" + +#contributors: +msgid "The geometries will not be saved when exporting to a Table-only data source.\n\nDo you want to continue?" +msgstr "" + +#contributors: +msgid "The last seed used by the pseudo random\nnumber generator was " +msgstr "" + +#contributors: +msgid "The length of a string field must be at least %d and at most %d. Keeping original value." +msgstr "El tamaño de un campo de carácter debe ser, al menos, %d y como mucho, %d. Mantener valor original." + +#contributors: +msgid "The length of an integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "El tamaño de un campo numérico entero debe ser, al menos, %d y como mucho, %d. Mantener valor original." + +#contributors: +msgid "The length of an non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "La longitud de un campo numérico no entero debe ser al menos %d y como mucho %d. Mantener valor original." + +#contributors: +msgid "The length of field name should be between 1 and %d.\nCurrent field length (%d) is not valid" +msgstr "" + +#contributors: +msgid "The new theme chosen will no longer include rates smoothing. Please use the Rates submenu to choose a theme with rates again." +msgstr "" + +#contributors: +msgid "The number of covariates should be more than the number of observations." +msgstr "El nº de covariables debería ser superior al nº de observaciones." + +#contributors: +msgid "The number of decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "El nº de lugares decimales de un campo numérico no entero debe ser, al menos, %d y como mucho, %d. Mantener valor original." + +#contributors: +msgid "The number of displayed decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "El nº de lugares decimales mostrados para un campo numérico no entero debe ser, al menos, %d y como mucho, %d. Mantener el valor original." + +#contributors: +msgid "The number of identified clusters is less than " +msgstr "El nº de clústers identificados es menor que " + +#contributors: +msgid "The number of observations specified in chosen weights file is %d, but the number in the current Table is %d, which is incompatible." +msgstr "El nº de observaciones especificadas in el fichero de pesos elegido es %d, pero el nº en la Tabla activa es %d, lo que es incompatible." + +#contributors: +msgid "The number of observations specified in chosen weights file is incompatible with current Table." +msgstr "El nº de observaciones especificado en el archivo de pesos es incompatible con la Tabla activa." + +#contributors: +msgid "The number of records in current table is larger than the number of records in import table. Please choose import table >= %d records" +msgstr "El nº de datos de la tabla activa es mayor que el nº de datos de la tabla importada. Seleccionar importar tabla >= % datos" + +#contributors: +msgid "The original datasource %s is not a valid file. GeoDa \"Save\" only works on file datasource." +msgstr "Fichero de fuente de datos original %s no válido. GeoDa \"Guardar\" sólo funciona con fuentes de datos de ficheros." + +#contributors: +msgid "The ratio of between to total sum of squares:\t" +msgstr "" + +#contributors: +msgid "The sample size for random sampling is too small.\nPlease increase the number of iterations." +msgstr "" + +#contributors: +msgid "The selected database driver is not supported on this platform. Please check GeoDa website for more information about database support and connection." +msgstr "Controlador de base de datos seleccionado no admitido en esta plataforma. Consulte la web de GeoDa para más información sobre bases de datos y conexiones admitidas." + +#contributors: +msgid "The selected group variable should contains %d items. Please modify the group variable in Time Editor, or select another variable." +msgstr "" + +#contributors: +msgid "The selected group variable should contains %d items. Please modify the group variable in Time->Time Editor, or select another variable." +msgstr "" + +#contributors: +msgid "The selected variable %s is not valid. If it's a grouped variable, please modify it in Time->Time Editor. Or please select another variable." +msgstr "La variable seleccionada %s no es válida. Si es una variable agrupada, notificarlo en el Editor Tiempo->Time. O seleccionar otra variable." + +#contributors: +msgid "The selected variable is not numeric. Please select another variable." +msgstr "La variable seleccionada no es numérica. Seleccionar otra variable." + +#contributors: +msgid "The set of values in the import key fields has no match in current table. Please choose keys with matching sets of values." +msgstr "Grupo de valores de campos clave importados sin coincidencia en la tabla activa. Buscar claves con grupos de valores coincidentes." + +#contributors: +msgid "The total sum of squares:\t" +msgstr "" + +#contributors: +msgid "The total within-cluster sum of squares:\t" +msgstr "" + +#contributors: +msgid "Themeless" +msgstr "Un Color" + +#contributors: +msgid "Themeless Map" +msgstr "Mapa de un Color" + +#contributors: +msgid "There are spatial objects being counted more than once. Please check the results." +msgstr "" + +#contributors: +msgid "There are unsaved data source or weights/time definition changes." +msgstr "Sin guardar cambios en fuente de datos o definición de pesos/tiempo." + +#contributors: +msgid "There is a view could not be closed. Please manually close and try again." +msgstr "No se puede cerrar una vista. Cerrarla manualmente e intentarlo de nuevo." + +#contributors: +msgid "There is an error during PCA calculation. Please check if the data is valid." +msgstr "Error durante el cálculo del ACP. Comprobar que los datos son válidos." + +#contributors: +msgid "There is at least one neighborless observation. Check the islands in weights histogram and linked map." +msgstr "" + +#contributors: +msgid "There is at least one neighborless observation. Check the weights histogram and linked map to see if the islands are real or not. If not, adjust the distance threshold (points) or the precision threshold (polygons)." +msgstr "Hay al menos una observación sin vecinos. Comprobar el histograma de pesos y el mapa adjunto para ver si las islas son reales o no. Si no lo son, ajuste la distancia umbral (puntos) o el umbral de precisión (polígonos)." + +#contributors: +msgid "There is at least one view could not be closed. Please manually close and try again." +msgstr "Al menos una vista no puede ser cerrada. Cerrarla manualmente e intentarlo de nuevo." + +#contributors: +msgid "There is at least one view open that depends on this matrix. Ok to close these views and remove?" +msgstr "Hay, al menos, una vista abierta que depende de esta matriz. ¿De acuerdo con cerrar y eliminar estas vistas?" + +#contributors: +msgid "There is one other view open that depends on this matrix. Ok to close this view and remove?" +msgstr "Hay otra vista abierta que depende de esta matriz. ¿Está de acuerdo en cerrarla y eliminarla?" + +#contributors: +msgid "There was a problem associating the weights file." +msgstr "Se ha producido un problema al asociar el archivo de pesos" + +#contributors: +msgid "There was a problem generating voronoi contiguity neighbors. Please report this." +msgstr "Problema al generar vecinos de contigüidad voronoi. Enviar informe sobre esta cuestión." + +#contributors: +msgid "There was a problem reading the layer" +msgstr "Problema de lectura de la capa" + +#contributors: +msgid "There was a problem reading the table" +msgstr "Problema de lectura de tabla" + +#contributors: +msgid "There was a problem requesting the weights file." +msgstr "Se ha producido un problema al llamar al fichero de pesos" + +#contributors: +msgid "These are the row numbers of the records without location information." +msgstr "Éstos son los nº de filas de los datos sin información de localización." + +#contributors: +msgid "Thiessen Polygons" +msgstr "Polígonos Thiessen" + +#contributors: +msgid "Third Variable (Z)" +msgstr "Tercera Variable (Z)" + +#contributors: +msgid "This datasource is not supported. Please export to other datasource that GeoDa supports first." +msgstr "Esta fuente de datos no está admitida. Exportar antes a una fuente de datos admitida por GeoDa." + +#contributors: +msgid "This field name already exists (non-integer type). Please input a unique name." +msgstr "El nombre del campo ya existe (tipo no entero). Introducir un campo único." + +#contributors: +msgid "This format is not supported." +msgstr "Formato no admitido" + +#contributors: +msgid "This is the list of existing grouped variables. As new groups are created, they will appear on this list. You can open an existing .gda file and edit it here." +msgstr "Lista de variables agrupadas existentes. Al crear nuevos grupos, éstos aparecerán en esta lista. Puede abrir un fichero .gda existente y editarlo aquí." + +#contributors: +msgid "This view currently supports data with at most 1000 observations. The Spatial Correlogram Scatterplot plots distances between all pairs of observations. The current data set has %d observations and %d unordered pairs of observations." +msgstr "Esta vista suele admitir datos hasta 1000 observaciones. El Diagrama del Correlograma Espacial representa distancias entre todos los pares de observaciones. La base de datos activa tiene %d observaciones y %d pares desordenados de observaciones." + +#contributors: +msgid "Thousands:" +msgstr "Miles" + +#contributors: +msgid "Tim&e" +msgstr "Tiempo" + +#contributors: +msgid "Time" +msgstr "Tiempo" + +#contributors: +msgid "Time Editor" +msgstr "Editor Tiempo" + +#contributors: +msgid "Time Player" +msgstr "Reproductor de Tiempo" + +#contributors: +msgid "Time Setup" +msgstr "Asistente de Tiempo" + +#contributors: +msgid "Time Variable Options" +msgstr "Opciones de Variable Temporal" + +#contributors: +msgid "Time:" +msgstr "Tiempo:" + +#contributors: +msgid "Title of Visualization" +msgstr "Título de Visualización" + +#contributors: +msgid "Tools" +msgstr "Herramientas" + +#contributors: +msgid "Top" +msgstr "" + +#contributors: +msgid "Transformation:" +msgstr "Transformación:" + +#contributors: +msgid "Transformation: " +msgstr "" + +#contributors: +msgid "Transformation:\t" +msgstr "" + +#contributors: +msgid "Travel Distances Tool" +msgstr "" + +#contributors: +msgid "Turkish (Windows-1254)" +msgstr "Turco (Windows-1254)" + +#contributors: +msgid "Turkish Latin-5 (ISO-8859-9)" +msgstr "Turco Latín-5 (ISO-8859-9)" + +#contributors: +msgid "Type" +msgstr "Tipo" + +#contributors: +msgid "Type 1" +msgstr "Tipo 1" + +#contributors: +msgid "Type 1a" +msgstr "Tipo 1a" + +#contributors: +msgid "Type 2" +msgstr "Tipo 2" + +#contributors: +msgid "Type 2a" +msgstr "Tipo 2a" + +#contributors: +msgid "Unable to overwrite " +msgstr "No se puede sobrescribir" + +#contributors: +msgid "Undefined" +msgstr "Sin definir" + +#contributors: +msgid "Undo" +msgstr "Deshacer" + +#contributors: +msgid "Ungrouped Variables" +msgstr "Variables Sin Agrupar" + +#contributors: +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" + +#contributors: +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#contributors: +msgid "Unique Values" +msgstr "Valores Individuales" + +#contributors: +msgid "Unique Values Map" +msgstr "Mapa de Valores Individuales" + +#contributors: +msgid "Univariate" +msgstr "Univariante" + +#contributors: +msgid "Univariate Local Geary" +msgstr "Geary Local Univariante" + +#contributors: +msgid "Univariate Local Join Count" +msgstr "Join Count Local Univariante" + +#contributors: +msgid "Univariate Local Moran's I" +msgstr "I de Moran Local Univariante" + +#contributors: +msgid "Univariate Moran's I" +msgstr "I de Morán Univariante" + +#contributors: +msgid "Unknow exception. Please contact GeoDa support." +msgstr "Excepción desconocida. Contactar con el soporte de GeoDa." + +#contributors: +msgid "Unselected" +msgstr "Desmarcado" + +#contributors: +msgid "Unselected =" +msgstr "No Seleccionados" + +#contributors: +msgid "Up" +msgstr "" + +#contributors: +msgid "Update GeoDa completed" +msgstr "Actualización de GeoDa completada" + +#contributors: +msgid "Update GeoDa failed" +msgstr "Error de Actualización de GeoDa" + +#contributors: +msgid "Update project information failed. \n\nDetails: The layer information defined in project file does no match opened datasource." +msgstr "" + +#contributors: +msgid "Upper outlier" +msgstr "Atípico superior" + +#contributors: +msgid "Upper-right corner" +msgstr "Esquina superior derecha" + +#contributors: +msgid "Use GPU to Accelerate computation:" +msgstr "" + +#contributors: +msgid "Use Power Iteration method:\tMax iterations=" +msgstr "" + +#contributors: +msgid "Use Power Iteration:" +msgstr "Utilizar Interación de Potencia:" + +#contributors: +msgid "Use Scientific Notation" +msgstr "Usar Notación Científica" + +#contributors: +msgid "Use Specified Seed" +msgstr "Usar Semilla Específica" + +#contributors: +msgid "Use Transparent Legend Background" +msgstr "Use Transparent Legend Background" + +#contributors: +msgid "Use Weights:" +msgstr "Utilizar Pesos:" + +#contributors: +msgid "Use bounding box of input datasource" +msgstr "" + +#contributors: +msgid "Use classic yellow cross-hatching to highlight selection in maps:" +msgstr "Utilizar el típico entramado amarillo para destacar selecciones en mapas:" + +#contributors: +msgid "Use existing field name" +msgstr "Usar nombre existente de campo" + +#contributors: +msgid "Use geometric centroids" +msgstr "Utilizar centroides geométricos" + +#contributors: +msgid "Use geometric centroids (weighting): \n" +msgstr "" + +#contributors: +msgid "Use inverse distance?" +msgstr "¿Usar distancia inversa?" + +#contributors: +msgid "Use max knn distance as bandwidth" +msgstr "Usar distancia máx. k-vecinos como ancho banda" + +#contributors: +msgid "Use outline + motorway(~bbox) of input datasource" +msgstr "" + +#contributors: +msgid "Use outline of input datasource" +msgstr "" + +#contributors: +msgid "Use row-standardized weights" +msgstr "Usar pesos estandarizados por filas" + +#contributors: +msgid "Use selected as specified alpha level" +msgstr "Utilizar seleccionados como nivel alfa especificado" + +#contributors: +msgid "Use specified seed:" +msgstr "Utilizar semilla especificada" + +#contributors: +msgid "Use the bounding box of shape datasource" +msgstr "Usar el cuadro delimitador de la fuente de datos shape" + +#contributors: +msgid "User Defined" +msgstr "Definido por Usuario" + +#contributors: +msgid "User Name" +msgstr "Nombre Usuario" + +#contributors: +msgid "User name" +msgstr "Nombre usuario" + +#contributors: +msgid "Value" +msgstr "" + +#contributors: +msgid "Values assigned to target field successfully." +msgstr "Valores asignados con éxito al campo de destino." + +#contributors: +msgid "Var Calc Container" +msgstr "Contenedor de Var Calc" + +#contributors: +msgid "Variable" +msgstr "Variable" + +#contributors: +msgid "Variable %s at time %d could not be standardized." +msgstr "" + +#contributors: +msgid "Variable %s at time %d is a placeholer" +msgstr "" + +#contributors: +msgid "Variable %s is a placeholer" +msgstr "" + +#contributors: +msgid "Variable %s is a time-grouped variable. Please ungroup this variable to delete." +msgstr "La variable %s está temporalmente agrupada. Desagrupar esta variable para borrarla." + +#contributors: +msgid "Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data." +msgstr "La variable % no está en la Tabla. Cerrar y reabrir el cuadro de diálogo Regresión para sincronizar con los datos de la Tabla." + +#contributors: +msgid "Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data." +msgstr "Variable %s ya no está en la Tabla. Cerrar y reabrir este cuadro de diálogo para sincronizar con datos de la Tabla" + +#contributors: +msgid "Variable %s is not valid. Please select another variable." +msgstr "Variable %s no válida. Seleccionar otra variable." + +#contributors: +msgid "Variable / Constant" +msgstr "Variable / Constante" + +#contributors: +msgid "Variable %s is specified. " +msgstr "Se ha especificado variable %s." + +#contributors: +msgid "Variable Choice" +msgstr "Elección de Variable" + +#contributors: +msgid "Variable Name" +msgstr "Nombre de la Variable" + +#contributors: +msgid "Variable Properties" +msgstr "Propiedades de Variable" + +#contributors: +msgid "Variable Properties - " +msgstr "Propiedades de la Variable - " + +#contributors: +msgid "Variable Setting" +msgstr "Configuración de Variable" + +#contributors: +msgid "Variable Settings" +msgstr "Configuración de Variable" + +#contributors: +msgid "Variable Type Error" +msgstr "Error Tipo de Variable" + +#contributors: +msgid "Variable Value Error" +msgstr "Error en Valor de Variable" + +#contributors: +msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name." +msgstr "El nombre de la variable \"%s\" no es válido o está duplicado. Introducir otro nombre de variable no duplicado." + +#contributors: +msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name. The first character must be a letter, and the remaining characters can be either letters, numbers or underscores. For DBF table, a valid variable name is between one and ten characters long." +msgstr "El nombre de variable \"%s\" está dupliado o no es válido. Introducir nombre alternativo no duplicado. El primer carácter debe ser una letra y el resto pueden ser letras, números o guiones bajos. Un nombre válido para las tablas DFB debe tener entre uno y diez caracteres de largo." + +#contributors: +msgid "Variable name can't be empty." +msgstr "" + +#contributors: +msgid "Variable name is either a duplicate or is invalid. Please\nenter an alternative, non-duplicate variable name.\n\n" +msgstr "" + +#contributors: +msgid "Variable:" +msgstr "Variable" + +#contributors: +msgid "Variables" +msgstr "Variables" + +#contributors: +msgid "Variables:" +msgstr "" + +#contributors: +msgid "Vertical Bins Breaks" +msgstr "Cortes Intervalos Verticales" + +#contributors: +msgid "Vertical Cells" +msgstr "Celdas Verticales" + +#contributors: +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamita (Windows-1258)" + +#contributors: +msgid "View" +msgstr "Vista" + +#contributors: +msgid "View Original Data" +msgstr "Ver Datos Originales" + +#contributors: +msgid "View Standardized Data" +msgstr "Ver Variables Estandarizadas" + +#contributors: +msgid "Voronoi Contiguity Error" +msgstr "Error de Contigüidad de Voronoi" + +#contributors: +msgid "WFS URL" +msgstr "URL de WFS" + +#contributors: +msgid "Warning" +msgstr "Aviso" + +#contributors: +msgid "Warning: %d observations are neighborless." +msgstr "Aviso: %d observaciones no tienen vecinos." + +#contributors: +msgid "Warning: %d observations is neighborless." +msgstr "Aviso: %d observaciones sin vecinos." + +#contributors: +msgid "Warning: NULL geometry" +msgstr "" + +#contributors: +msgid "Warning: loss data" +msgstr "Aviso: pérdida de datos" + +#contributors: +msgid "Was not able to load weights matrix." +msgstr "Imposible cargar matriz de pesos." + +#contributors: +msgid "Web" +msgstr "Web" + +#contributors: +msgid "Weight" +msgstr "Pesos" + +#contributors: +msgid "Weight matrix required for chosen spatial rate method." +msgstr "El método de tasas espaciales necesita una matriz de pesos." + +#contributors: +msgid "Weighting:" +msgstr "Ponderación:" + +#contributors: +msgid "Weights" +msgstr "pesos" + +#contributors: +msgid "Weights File" +msgstr "Fichero de pesos" + +#contributors: +msgid "Weights File Creation" +msgstr "Creación Archivo de Pesos" + +#contributors: +msgid "Weights Intersection" +msgstr "Weights Intersection" + +#contributors: +msgid "Weights Manager" +msgstr "Gestor de pesos" + +#contributors: +msgid "Weights Name" +msgstr "" + +#contributors: +msgid "Weights Symmetry Check" +msgstr "Comprobar Simetría de Pesos" + +#contributors: +msgid "Weights Union" +msgstr "Weights Intersection" + +#contributors: +msgid "Weights file \"%s\" created successfully." +msgstr "Archivo de pesos \"%s\" creado con éxito." + +#contributors: +msgid "Weights file/format is not valid." +msgstr "" + +#contributors: +msgid "Weights:" +msgstr "Pesos:" + +#contributors: +msgid "Welcome to GeoDa" +msgstr "Bienvenidos a GeoDa" + +#contributors: +msgid "Welcome to GeoDa 1.8.16" +msgstr "Bienvenidos a GeoDa 1.8.16" + +#contributors: +msgid "West European Latin-1 (ISO-8859-1)" +msgstr "Europeo Occidental Latín-1 (ISO-8859-1)" + +#contributors: +msgid "West European Latin-9 (ISO-8859-15)" +msgstr "Europeo Occidental Latín-9 (ISO-8859-15)" + +#contributors: +msgid "What windows to open?" +msgstr "Qué ventana abrir" + +#contributors: +msgid "When \"all times\" selected for either variable, result field must also be \"all times.\"" +msgstr "Al seleccionar \"todos los períodos\", el campo de resultados debe ser también \"todos los períodos.\"" + +#contributors: +msgid "When \"all times\" selected for variable, result field must also be \"all times.\"" +msgstr "Al seleccionar \"todos los períodos\", el campo de resultados debe ser también \"todos los períodos.\"" + +#contributors: +msgid "White Test" +msgstr "Test de White" + +#contributors: +msgid "Width in pixels" +msgstr "Ancho en píxeles" + +#contributors: +msgid "Width:" +msgstr "Width:" + +#contributors: +msgid "Within cluster S.S." +msgstr "" + +#contributors: +msgid "Within-cluster sum of squares:\n" +msgstr "" + +#contributors: +msgid "Wrong number of rows!" +msgstr "¡Nº equivocado de columnas!" + +#contributors: +msgid "Wrote GeoDa Project File: " +msgstr "Escrito en Archivo Proyecto GeoDa:" + +#contributors: +msgid "X" +msgstr "X" + +#contributors: +msgid "X Variable" +msgstr "Variable X" + +#contributors: +msgid "X-Axis" +msgstr "Eje-X" + +#contributors: +msgid "X-Coordinates" +msgstr "Coordenadas-X" + +#contributors: +msgid "X-coord" +msgstr "Coord-X" + +#contributors: +msgid "X-coordinate" +msgstr "coordenada-X" + +#contributors: +msgid "X-coordinate variable" +msgstr "Variable coordenada-X" + +#contributors: +msgid "Y" +msgstr "y" + +#contributors: +msgid "Y Variable" +msgstr "Variable Y" + +#contributors: +msgid "Y-Axis" +msgstr "Eje-Y" + +#contributors: +msgid "Y-Coordinates" +msgstr "Coordenadas-Y" + +#contributors: +msgid "Y-coord" +msgstr "Coord-Y" + +#contributors: +msgid "Y-coordinate" +msgstr "coordenada-Y" + +#contributors: +msgid "Y-coordinate variable" +msgstr "Variable coordenada-Y" + +#contributors: +msgid "Yes" +msgstr "Sí" + +#contributors: +msgid "You can try to proceed but the current threshold distance value might be too large to compute. If it fails, please input a smaller distance band (which might leave some observations neighborless) or use other weights (e.g. KNN)." +msgstr "" + +#contributors: +msgid "You have requested to create a new file project %s while another project is open. Please close project %s and try again." +msgstr "" + +#contributors: +msgid "Your Email address (Optional):" +msgstr "Dirección de correo electrónico (Opcional):" + +#contributors: +msgid "Your GeoDa is already up-to-date." +msgstr "Su GeoDa está ya actualizado." + +#contributors: +msgid "Your Github account (Optional):" +msgstr "Tu cuenta de Gibhub (Opcional):" + +#contributors: +msgid "Your table cannot be aggregated because the key field \"%s\" is unique. Please use another key." +msgstr "Imposible agregar tabla porque el campo clave \"%s\" es único. Utilizar otro campo clave." + +#contributors: +msgid "Your table cannot be merged because the key field \"%s\" is not unique. \nIt contains undefined or duplicate values.\n\nDetails:" +msgstr "" + +#contributors: +msgid "Z" +msgstr "Z" + +#contributors: +msgid "Z Variable" +msgstr "Variable Z" + +#contributors: +msgid "Zoom : press right-mouse button" +msgstr "Zoom: presionar botón derecho del ratón" + +#contributors: +msgid "Zoom In" +msgstr "Zoom +" + +#contributors: +msgid "Zoom Out" +msgstr "Zoom -" + +#contributors: +msgid "Zooming Mode" +msgstr "Modo de Zoom" + +#contributors: +msgid "[Please briefly describe what went wrong]" +msgstr "[Describir brevemente lo que no ha funcionado]" + +#contributors: +msgid "[Steps you took before something went wrong]" +msgstr "[Pasos realizados antes de tener problemas]" + +#contributors: +msgid "\"%s\" is not a valid p-value. Default p-value (0.01) is used" +msgstr "\"%s\" p-valor no válido. Utilizado el p-valor (0.01) por defecto" + +#contributors: +msgid "\"%s\" is not a valid seed. Seed unchanged." +msgstr "\"%s\" semilla no válida. Semilla sin modificar." + +#contributors: +msgid "\". \n\nDetails: Attemp to write a readonly database, or " +msgstr "" + +#contributors: +msgid "\nREGRESSION\n----------\n" +msgstr "" + +#contributors: +msgid "\nSelect whether to use periods or commas as\nseparators in numeric fields. \n\nE.g., by default, GeoDa uses commas to\nseparate thousands and periods\nfor decimals (1,000.00).\n " +msgstr "" + +#contributors: +msgid "\n\n95% threshold criterion: " +msgstr "" + +#contributors: +msgid "\n\nCumulative proportion:\n" +msgstr "" + +#contributors: +msgid "\n\nDetails: " +msgstr "" + +#contributors: +msgid "\n\nEigenvalues:\n" +msgstr "" + +#contributors: +msgid "\n\nKaiser criterion: " +msgstr "" + +#contributors: +msgid "\n\nProportion of variance:\n" +msgstr "" + +#contributors: +msgid "\n\nSquared correlations:\n" +msgstr "" + +#contributors: +msgid "\n\nStandard deviation:\n" +msgstr "" + +#contributors: +msgid "\n\nVariable Loadings:\n" +msgstr "" + +#contributors: +msgid "adaptive kernel" +msgstr "" + +#contributors: +msgid "and field" +msgstr "and field" + +#contributors: +msgid "autocorrelation is " +msgstr "" + +#contributors: +msgid "bandwidth" +msgstr "" + +#contributors: +msgid "binary" +msgstr "binario" + +#contributors: +msgid "break 0" +msgstr "Corte 0" + +#contributors: +msgid "calculating..." +msgstr "calculando..." + +#contributors: +msgid "can't compute" +msgstr "imposible calcular" + +#contributors: +msgid "category 1" +msgstr "Categoría 1" + +#contributors: +msgid "choice:" +msgstr "elección:" + +#contributors: +msgid "choose a variable" +msgstr "Elegir una variable" + +#contributors: +msgid "csv file:" +msgstr "fichero csv:" + +#contributors: +msgid "current table key" +msgstr "Clave de la tabla activa" + +#contributors: +msgid "custom" +msgstr "Personalizado" + +#contributors: +msgid "dBase Database File (*.dbf)|*.dbf" +msgstr "Archivo Datos dBase (*.dbf)|*.dbf" + +#contributors: +msgid "datasource.type %s unknown.." +msgstr "fuentedatos.tipo %n desconocido.." + +#contributors: +msgid "day:" +msgstr "día:" + +#contributors: +msgid "decimal\nplaces" +msgstr "" + +#contributors: +msgid "displayed\ndecimal places" +msgstr "" + +#contributors: +msgid "distance metric" +msgstr "" + +#contributors: +msgid "distance unit" +msgstr "" + +#contributors: +msgid "distance vars" +msgstr "" + +#contributors: +msgid "diverging" +msgstr "divergente" + +#contributors: +msgid "done" +msgstr "" + +#contributors: +msgid "ds:" +msgstr "ds" + +#contributors: +msgid "enumerate as 1, 2, 3, ..." +msgstr "Numerar como 1, 2, 3, ..." + +#contributors: +msgid "false" +msgstr "" + +#contributors: +msgid "field name:" +msgstr "nombre de campo:" + +#contributors: +msgid "fields:" +msgstr "campos:" + +#contributors: +msgid "file" +msgstr "" + +#contributors: +msgid "file size:" +msgstr "tamaño de archivo:" + +#contributors: +msgid "from" +msgstr "" + +#contributors: +msgid "id variable" +msgstr "" + +#contributors: +msgid "import table key" +msgstr "Clave de tabla importada" + +#contributors: +msgid "in current layer." +msgstr "in current layer." + +#contributors: +msgid "inches" +msgstr "inches" + +#contributors: +msgid "include lower orders" +msgstr "" + +#contributors: +msgid "inverse distance" +msgstr "" + +#contributors: +msgid "is associated to" +msgstr "is associated to" + +#contributors: +msgid "kernel method" +msgstr "" + +#contributors: +msgid "kernel to diagonal" +msgstr "" + +#contributors: +msgid "large" +msgstr "" + +#contributors: +msgid "length" +msgstr "" + +#contributors: +msgid "max dist" +msgstr "" + +#contributors: +msgid "max neighbors" +msgstr "" + +#contributors: +msgid "max-p" +msgstr "MaxP" + +#contributors: +msgid "max:" +msgstr "máx." + +#contributors: +msgid "maximum" +msgstr "máximo" + +#contributors: +msgid "maximum\npossible" +msgstr "" + +#contributors: +msgid "mean" +msgstr "media" + +#contributors: +msgid "mean neighbors" +msgstr "" + +#contributors: +msgid "mean:" +msgstr "" + +#contributors: +msgid "median neighbors" +msgstr "" + +#contributors: +msgid "median:" +msgstr "" + +#contributors: +msgid "min dist" +msgstr "" + +#contributors: +msgid "min neighbors" +msgstr "" + +#contributors: +msgid "min:" +msgstr "mín." + +#contributors: +msgid "minimum" +msgstr "mínimo" + +#contributors: +msgid "minimum\npossible" +msgstr "" + +#contributors: +msgid "mm" +msgstr "mm" + +#contributors: +msgid "month:" +msgstr "mes:" + +#contributors: +msgid "name:" +msgstr "nombre" + +#contributors: +msgid "need two valid regressions" +msgstr "" + +#contributors: +msgid "neighbors" +msgstr "" + +#contributors: +msgid "not saved" +msgstr "" + +#contributors: +msgid "numeric" +msgstr "numérico" + +#contributors: +msgid "obs " +msgstr "" + +#contributors: +msgid "obs#" +msgstr "nº obs." + +#contributors: +msgid "observation:" +msgstr "observación" + +#contributors: +msgid "order" +msgstr "" + +#contributors: +msgid "parent group" +msgstr "" + +#contributors: +msgid "pixels" +msgstr "pixels" + +#contributors: +msgid "power" +msgstr "" + +#contributors: +msgid "range, est. distance" +msgstr "" + +#contributors: +msgid "records:" +msgstr "registros" + +#contributors: +msgid "redcap" +msgstr "REDCAP" + +#contributors: +msgid "row-standardized" +msgstr "estandarizada por filas" + +#contributors: +msgid "row:\n" +msgstr "fila:\n" + +#contributors: +msgid "s.d." +msgstr "" + +#contributors: +msgid "s.d.:" +msgstr "" + +#contributors: +msgid "sd from mean" +msgstr "" + +#contributors: +msgid "selected:" +msgstr "seleccionado:" + +#contributors: +msgid "sequential" +msgstr "secuencial" + +#contributors: +msgid "show normal distribution p-val map" +msgstr "Mostrar mapa de p-val. de distribución normal" + +#contributors: +msgid "show normal distribution p-val maps" +msgstr "Mostrar mapas de p-val. de distribución normal" + +#contributors: +msgid "show significance maps" +msgstr "Mostrar mapas de significación" + +#contributors: +msgid "skater" +msgstr "skater" + +#contributors: +msgid "small" +msgstr "" + +#contributors: +msgid "space-time variable found with no name" +msgstr "Variable espacio-temporal encontrada sin nombre" + +#contributors: +msgid "standard deviation" +msgstr "desviación estándar" + +#contributors: +msgid "suggested title:" +msgstr "título sugerido:" + +#contributors: +msgid "symmetry" +msgstr "" + +#contributors: +msgid "thematic" +msgstr "temática" + +#contributors: +msgid "threshold value" +msgstr "" + +#contributors: +msgid "time" +msgstr "tiempo" + +#contributors: +msgid "to" +msgstr "" + +#contributors: +msgid "to define weights." +msgstr "pendiente definición de pesos." + +#contributors: +msgid "to specify variable and distance parameters." +msgstr "" + +#contributors: +msgid "total # pairs" +msgstr "" + +#contributors: +msgid "true" +msgstr "" + +#contributors: +msgid "type" +msgstr "" + +#contributors: +msgid "undefined: " +msgstr "" + +#contributors: +msgid "uni. dist. Min" +msgstr "Dist. min. uni." + +#contributors: +msgid "uniform distribution" +msgstr "distribución uniforme" + +#contributors: +msgid "unknown" +msgstr "" + +#contributors: +msgid "using row-standardized weights" +msgstr "usando pesos estandarizados por filas" + +#contributors: +msgid "value" +msgstr "Valor" + +#contributors: +msgid "value:" +msgstr "valor:" + +#contributors: +msgid "var name:" +msgstr "nombre var.:" + +#contributors: +msgid "variable name" +msgstr "" + +#contributors: +msgid "version:" +msgstr "versión:" + +#contributors: +msgid "weights:" +msgstr "pesos" + +#contributors: +msgid "wrong model number" +msgstr "nº equivocado de modelo" + +#contributors: +msgid "y:" +msgstr "y:" + +#contributors: +msgid "year:" +msgstr "año" + diff --git a/internationalization/po2csv.py b/internationalization/po2csv.py new file mode 100644 index 000000000..77a87898e --- /dev/null +++ b/internationalization/po2csv.py @@ -0,0 +1,86 @@ +#!/usr/bin/python + +from __future__ import print_function +import re +import sys +#import xlsxwriter + +def dict2PO(po_items, file_path): + f = open(file_path, 'w') + msgid_list = sorted(po_items) + for msgid in msgid_list: + msgstr, contrib = po_items[msgid] + line = '#contributors:' + contrib + '\n' + f.write(line) + line = 'msgid "' + msgid + '"\n' + f.write(line) + line = 'msgstr "' + msgstr + '"\n' + f.write(line) + f.write('\n') + f.close() + + +def dict2csv(po_items, file_path): + f = open(file_path, 'w') + line = 'msgid`msgstr`contributors\n' + f.write(line) + msgid_list = sorted(po_items) + for msgid in msgid_list: + msgstr, contrib = po_items[msgid] + line = '[' + msgid + ']`[' + msgstr + ']`' + contrib + '\n' + f.write(line) + f.close() + +def po2dict(po_file, result): + mode = 0 + + with open(po_file) as f: + start = 0 + end = 0 + + source = '' + dest = '' + contrib = '' + next_contrib = '' + + for i, line in enumerate(f, 1): + line = line.strip() + if(line.startswith('#') or len(line) == 0): + if (line.startswith('#contributors')): + if (mode == 2): + next_contrib = line.split(':')[1] + else: + contrib = line.split(':')[1] + + elif (line.startswith('msgid') or (mode == 1 and not line.startswith('msgstr'))): + if (mode == 2 and len(source + dest + contrib) > 0): + # store previously processed item if any + result[source] = [dest, contrib] + source = '' + dest = '' + contrib = next_contrib + + start = line.find('"') + 1 + end = line.rfind('"') + source += line[start: end] + mode = 1 + + elif (line.startswith('msgstr') or mode == 2): + mode = 2 + start = line.find('"') + 1 + end = line.rfind('"') + dest += line[start : end] + + if (mode == 2 and len(source + dest + contrib) > 0): + # store previously processed item if any + result[source] = [dest, contrib] + +if __name__ == "__main__": + if (len(sys.argv) != 3) : + print("Usage: python po2csv.py po_file csv_file") + else: + po_file, csv_file = sys.argv[1:] + if (po_file and csv_file): + po_items = {} + po2dict(po_file, po_items) + dict2csv(po_items, csv_file) \ No newline at end of file diff --git a/internationalization/pofiles/es.po b/internationalization/pofiles/es.po index 5e8c8a6c6..4b4a96743 100644 --- a/internationalization/pofiles/es.po +++ b/internationalization/pofiles/es.po @@ -1,3964 +1,6284 @@ +#contributors: msgid "" -msgstr "" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"X-Generator: Poedit 2.1.1\n" -"X-Poedit-SourceCharset: UTF-8\n" +msgstr "Plural-Forms: nplurals=2; plural=(n != 1);\nProject-Id-Version: \nPOT-Creation-Date: \nPO-Revision-Date: \nLast-Translator: \nLanguage-Team: \nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nLanguage: es\nX-Generator: Poedit 2.1.1\nX-Poedit-SourceCharset: UTF-8\n" -msgid "&Tools" -msgstr "Herramientas" +#contributors: +msgid " (isolates in weights are removed)" +msgstr "" -msgid "&Space" -msgstr "Espacio" +#contributors: +msgid " = 0 at " +msgstr "" -msgid "C&reate" -msgstr "Crear" +#contributors: +msgid " BiLISA Cluster Map" +msgstr "BiLISA Mapa de Clústers" -msgid "&Explore" -msgstr "Explorar" +#contributors: +msgid " BiLISA Significance Map" +msgstr "Mapa de Significación BiLISA" -msgid "E&xplore" -msgstr "Explorar" +#contributors: +msgid " Bivariate Local Geary Cluster Map" +msgstr "Mapa de Clústers Geary Local Bivariante" -msgid "T&able" -msgstr "Tabla" +#contributors: +msgid " Bivariate LocalGeary Significance Map" +msgstr "Mapa de Significación Local de Geary Bivariante" -msgid "&New" -msgstr "Nuevo" +#contributors: +msgid " Categories" +msgstr "Categorías" -msgid "&Help" -msgstr "Ayuda" +#contributors: +msgid " Differential LISA Cluster Map" +msgstr "Mapa de Clústers LISA Diferencial" -msgid "Spatial Join" -msgstr "Unión Espacial" +#contributors: +msgid " Differential Local Geary Cluster Map" +msgstr "Mapa de Clúster de Geary Local Diferencial" -msgid "&Run" -msgstr "&Ejecutar" +#contributors: +msgid " Differential Significance Map" +msgstr "Mapa de Significación Diferencial" -msgid "Appl&y" -msgstr "Aplicar" +#contributors: +msgid " Distance metric: " +msgstr "" -msgid "&Close" -msgstr "Cerrar" +#contributors: +msgid " LISA Cluster Map" +msgstr "Mapa de Clusters LISA" -msgid "&Cancel" -msgstr "Cancelar" +#contributors: +msgid " LISA Significance Map" +msgstr "Mapa de Significación LISA" -msgid "&File" -msgstr "Archivo" +#contributors: +msgid " Local Geary Cluster Map" +msgstr "Mapa de Clúster Geary Local" -msgid "&Save to Table" -msgstr "Guardar en Tabla" +#contributors: +msgid " Local Geary Significance Map" +msgstr "Mapa de Significación Geary Local" -msgid "&Map" -msgstr "Mapa" +#contributors: +msgid " already exists. OK to overwrite?" +msgstr "ya existe. ¿Aceptar sobrescribir?" -msgid "&Edit" -msgstr "Editar" +#contributors: +msgid " and " +msgstr " y " -msgid "&Add ID Variable..." -msgstr "Añadir Variable ID" +#contributors: +msgid " and two time periods: " +msgstr " y 2 períodos de tiempo: " -msgid "&Open Project" -msgstr "Abrir Proyecto" +#contributors: +msgid " for obs within distance band " +msgstr "" -msgid "&Merge" -msgstr "Combinar" +#contributors: +msgid " has duplicate values. Please choose a different ID Variable.\n\nDetails:" +msgstr "" -msgid "Tim&e" -msgstr "Tiempo" +#contributors: +msgid " in range:" +msgstr "" -msgid "&Undo" -msgstr "Deshacer" +#contributors: +msgid " is not supported by GeoDa.\n" +msgstr "" -msgid "&Paste" -msgstr "Pegar" +#contributors: +msgid " km" +msgstr "" -msgid "&Save" -msgstr "Guardar" +#contributors: +msgid " mi" +msgstr "" -msgid "Select &All" -msgstr "Seleccionar Todo" +#contributors: +msgid " pairs in distance band " +msgstr "" -msgid "Cu&t" -msgstr "Cortar" +#contributors: +msgid " should contains only numbers/letters as IDs. Please choose a different ID Variable." +msgstr " debería contener sólo IDs con números/letras. Seleccionar una Variable ID diferente." -msgid "&Copy" -msgstr "Copiar" +#contributors: +msgid " to " +msgstr "" -msgid "&Redo" -msgstr "Repetir" +#contributors: +msgid "# Iterations:" +msgstr "Nº Iteraciones:" -msgid "Descending order" -msgstr "Orden Descendente" +#contributors: +msgid "# Max Iteration:" +msgstr "Nº Máx. Iteraciones:" -msgid "View Standardized Data" -msgstr "Ver Variables Estandarizadas" +#contributors: +msgid "# Neighors:" +msgstr "Nº Vecinos" -msgid "Classic " -msgstr "Básico" +#contributors: +msgid "# Pairs" +msgstr "" -msgid "Zoom In" -msgstr "Zoom +" +#contributors: +msgid "# iterations:\t" +msgstr "" -msgid "Hide Map" -msgstr "Ocultar Mapa" +#contributors: +msgid "# observations" +msgstr "" -msgid "Expression" -msgstr "Expresión" +#contributors: +msgid "#hover obs " +msgstr "" -msgid "Progress" -msgstr "Progreso" +#contributors: +msgid "#obs" +msgstr "nº obs." -msgid "Merge by record order" -msgstr "Combinar por orden de registros" +#contributors: +msgid "#obs:" +msgstr "" -msgid "Create Grid" -msgstr "Crear Rejilla" +#contributors: +msgid "#obs=" +msgstr "" -msgid "Data Point" -msgstr "Punto de Datos" +#contributors: +msgid "#row=" +msgstr "" -msgid "Classification Themes" -msgstr "Temas de Clasificación" +#contributors: +msgid "#selected=" +msgstr "" -msgid "Sample Data" -msgstr "Datos de Ejemplo" +#contributors: +msgid "% non-zero" +msgstr "" -msgid "break 0" -msgstr "Corte 0" +#contributors: +msgid "% of total" +msgstr "" -msgid "Histogram" -msgstr "Histograma" +#contributors: +msgid "%d of %d variables to include" +msgstr "" -msgid "Carto Dark" -msgstr "Carto Oscuro" +#contributors: +msgid "%d variables to include" +msgstr "" -msgid "Select variables to delete " -msgstr "Seleccionar variables a eliminar" +#contributors: +msgid "%s (Weights: %s)" +msgstr "%s (Pesos: %s)" -msgid "Hebrew (ISO-8859-8-1)" -msgstr "Hebreo (ISO-8859-8-1)" +#contributors: +msgid "%s Cluster Map (%d clusters)" +msgstr "" -msgid "Box Map (Hinge=1.5)" -msgstr "Mapa de Caja (Bisagra=1.5)" +#contributors: +msgid "&Add ID Variable..." +msgstr "Añadir Variable ID" -msgid "Differential Moran's I" -msgstr "I de Moran Diferencial" +#contributors: +msgid "&Cancel" +msgstr "Cancelar" -msgid "Merge by key values" -msgstr "Combinar por valores clave" +#contributors: +msgid "&Close" +msgstr "Cerrar" -msgid "GeoPackage (*.gpkg)|*.gpkg" -msgstr "GeoPackage (*.gpkg)|*.gpkg" +#contributors: +msgid "&Edit" +msgstr "Editar" -msgid "Themeless" -msgstr "Un Color" +#contributors: +msgid "&File" +msgstr "Archivo" -msgid "Selection Tool" -msgstr "Herramienta de Selección" +#contributors: +msgid "&Help" +msgstr "Ayuda" -msgid "Arabic (Windows-1256)" -msgstr "Ãrabe (Windows-1256)" +#contributors: +msgid "&Map" +msgstr "Mapa" -msgid "Change Outline Color of Neighbors" -msgstr "Cambiar Color del Contorno de Vecinos" +#contributors: +msgid "&Merge" +msgstr "Combinar" -msgid "Operator" -msgstr "Operador" +#contributors: +msgid "&New" +msgstr "Nuevo" -msgid "Refresh" -msgstr "Actualizar" +#contributors: +msgid "&Open Project" +msgstr "Abrir Proyecto" -msgid "Select All In Range" -msgstr "Seleccionar Todo en Intervalo" +#contributors: +msgid "&Regression" +msgstr "" -msgid "Maps and Rates" -msgstr "Mapas y Tasas" +#contributors: +msgid "&Run" +msgstr "&Ejecutar" -msgid "Save As" -msgstr "Guardar como" +#contributors: +msgid "&Save to Table" +msgstr "Guardar en Tabla" -msgid "Enter new ID variable name:" -msgstr "Introduzca nombre nueva variable ID" +#contributors: +msgid "&Space" +msgstr "Espacio" -msgid "Scatter Plot Matrix" -msgstr "Matriz de Diagramas de Dispersión" +#contributors: +msgid "&Tools" +msgstr "Herramientas" -msgid "Z Variable" -msgstr "Variable Z" +#contributors: +msgid "(Dendrogram is too complex to draw. Please view clustering results in map.)" +msgstr "(Dendograma muy complicado de representar. Ver resultados de clústers en un mapa.)" -msgid "Selection Shape" -msgstr "Selección Forma" +#contributors: +msgid "(Duplicate field name)" +msgstr "(Nombre de campo duplicado)" -msgid "Select datasource" -msgstr "Seleccionar fuente de datos" +#contributors: +msgid "(Field name is not valid)" +msgstr "(Nombre de campo no válido)" -msgid "diverging" -msgstr "divergente" +#contributors: +msgid "(Gaussian) Sigma:" +msgstr "Sigma (Gaussiano):" -msgid "Change Font" -msgstr "Cambiar Fuente" +#contributors: +msgid "(Leave empty for undefined values)" +msgstr "Dejar en blanco los valores no seleccionados" -msgid "#obs" -msgstr "nº obs." +#contributors: +msgid "(Optional) First record has field names? " +msgstr "(Opcional) ¿El primer dato tiene nombre de campo?" -msgid "Copy Legend To Clipboard" -msgstr "Copiar Leyenda al Portapapeles" +#contributors: +msgid "(Optional) Longitude/X:" +msgstr "" -msgid "standard deviation" -msgstr "desviación estándar" +#contributors: +msgid "(Optional) You can change the data type for a field:" +msgstr "(Opcional) Vd. puede cambiar el tipo de datos del campo:" -msgid "Y Variable" -msgstr "Variable Y" +#contributors: +msgid "(Use Sequences)" +msgstr "" -msgid "Database/Instance Name" -msgstr "Base de datos/Nombre de instancia" +#contributors: +msgid "---\n\nPCA method: " +msgstr "" -msgid "Include diagonal of weights matrix" -msgstr "Incluir diagonal de matriz de pesos" +#contributors: +msgid ".\nEnter a seed value to use between\n0 and " +msgstr "" -msgid "GeoJSON (*.geojson;*.json)|*.geojson;*.json" -msgstr "GeoJSON (*.geojson;*,json)|*.geojson;*,json" +#contributors: +msgid "0x03 (dBASE III+)" +msgstr "0x03 (dBASE III+)" -msgid "Smoother" -msgstr "Alisado" +#contributors: +msgid "1 Iteration" +msgstr "Iteración 1" -msgid "uni. dist. Min" -msgstr "Dist. min. uni." +#contributors: +msgid "199 Permutations" +msgstr "199 Permutaciones" -msgid "Turkish Latin-5 (ISO-8859-9)" -msgstr "Turco Latín-5 (ISO-8859-9)" +#contributors: +msgid "1st Variable (X)" +msgstr "1ª Variable (X)" + +#contributors: +msgid "2 Iteration" +msgstr "Iteración 2" + +#contributors: +msgid "2nd Variable (Y)" +msgstr "2ª Variable (Y)" + +#contributors: +msgid "3 Iteration" +msgstr "Iteración 3" + +#contributors: +msgid "3D Plot" +msgstr "Gráfico 3D" + +#contributors: +msgid "3D Scatter Plot" +msgstr "Diagrama de Dispersión 3D" + +#contributors: +msgid "3D Scatter Plot Variables" +msgstr "Variables Diagrama Dispersión 3D" + +#contributors: +msgid "3rd Variable (Z)" +msgstr "3ª Variable (Z)" + +#contributors: +msgid "4 Iteration" +msgstr "Iteración 4" + +#contributors: +msgid "499 Permutations" +msgstr "499 Permutaciones" + +#contributors: +msgid "4th Variable" +msgstr "4ª Variable" + +#contributors: +msgid "5 Iteration" +msgstr "Iteración 5" + +#contributors: +msgid "5 of 5 variables needed" +msgstr "5 de 5 variables necesitadas" + +#contributors: +msgid "6 Iteration" +msgstr "Iteración 6" + +#contributors: +msgid "99 Permutations" +msgstr "99 Permutaciones" + +#contributors: +msgid "999 Permutations" +msgstr "999 Permutaciones" + +#contributors: +msgid "<" +msgstr "<" + +#contributors: +msgid "<<" +msgstr "" + +#contributors: +msgid "<=" +msgstr "<=" + +#contributors: +msgid "=" +msgstr "=" + +#contributors: +msgid ">" +msgstr ">" + +#contributors: +msgid ">>" +msgstr ">>" + +#contributors: +msgid "A Table-only data source can't be stacked with current data source." +msgstr "" + +#contributors: +msgid "A newer version of GeoDa is found. Do you want to update to version " +msgstr "Existe una nueva versión de GeoDa. ¿Desea actualizar a la versión ?" + +#contributors: +msgid "A project file contains extra information not directly stored in the data source such as variable order and grouping." +msgstr "" + +#contributors: +msgid "About DBF Viewer" +msgstr "Sobre DBF Viewer" + +#contributors: +msgid "About GeoDa" +msgstr "Acerca de GeoDa" + +#contributors: +msgid "About Precision Threshold" +msgstr "Acerca del Umbral de Precisión" + +#contributors: +msgid "Adaptive bandwidth" +msgstr "Ancho de Banda Adaptativo" + +#contributors: +msgid "Adaptive kernel" +msgstr "Kernel adaptativo" + +#contributors: +msgid "Add" +msgstr "Añadir" + +#contributors: +msgid "Add Centroids to Table" +msgstr "Añadir Centroides a Tabla" + +#contributors: +msgid "Add Map Layer" +msgstr "Add Map Layer" + +#contributors: +msgid "Add Mean Centers to Table" +msgstr "Añadir Centros Medios a Tabla" + +#contributors: +msgid "Add Neighbors To Selection" +msgstr "Añadir Vecinos a Selección" + +#contributors: +msgid "Add New ID Variable" +msgstr "Añadir Nueva Variable ID" + +#contributors: +msgid "Add OGR column error. Field type is unknown or not supported." +msgstr "Añadir error de columna OGR. Tipo de campo desconocido o no admitido." + +#contributors: +msgid "Add OGR column error. Field type is unknown." +msgstr "Añadir columna de error OGR. Tipo de campo desconocido" + +#contributors: +msgid "Add Time" +msgstr "Añadir Tiempo" + +#contributors: +msgid "Add Variable" +msgstr "Añadir Variable" + +#contributors: +msgid "Add a name for your group of variables. \n\nYou can edit the time period labels for easier interpretation of results." +msgstr "" + +#contributors: +msgid "Add basemap automatically:" +msgstr "Añadir mapa base automáticamente:" + +#contributors: +msgid "Add new column to table" +msgstr "Añadir nueva columna a la tabla" + +#contributors: +msgid "Add/Remove Variables" +msgstr "Añadir/Eliminar Variables" + +#contributors: +msgid "Adjust Bubble Size" +msgstr "" + +#contributors: +msgid "Adjust Value Range of Y Axis" +msgstr "Ajustar Rango de Valores al Eje Y" + +#contributors: +msgid "Adjust Value Range of Y-Axis" +msgstr "Ajustar Rango de Valores al Eje Y" + +#contributors: +msgid "Adjust Values of Y Axis" +msgstr "Ajustar Valores del Eje Y" + +#contributors: +msgid "Affinity with Guassian Kernel:\tSigma=" +msgstr "" + +#contributors: +msgid "Affinity with K-NN:" +msgstr "Afinidad con K-NN:" + +#contributors: +msgid "Affinity with K-Nearest Neighbors:\tK=" +msgstr "" + +#contributors: +msgid "Affinity with Kernel:" +msgstr "Afinidad con Kernel:" + +#contributors: +msgid "Aggregate" +msgstr "Agregar" + +#contributors: +msgid "Aggregate - " +msgstr "Agregar - " + +#contributors: +msgid "All" +msgstr "Todo" + +#contributors: +msgid "All Pairs" +msgstr "" + +#contributors: +msgid "All Rights Reserved" +msgstr "Todos los Derechos Reservados" + +#contributors: +msgid "Allow a single cluster:" +msgstr "" + +#contributors: +msgid "Alpha:" +msgstr "" + +#contributors: +msgid "Always using fixed-point notation" +msgstr "" + +#contributors: +msgid "Animation" +msgstr "Animación" + +#contributors: +msgid "App Key" +msgstr "Clave App" + +#contributors: +msgid "Append To Current Selection" +msgstr "Anexar a Selección Actual" + +#contributors: +msgid "Append to current selection" +msgstr "Agregar a selección actual" + +#contributors: +msgid "Appl&y" +msgstr "Aplicar" + +#contributors: +msgid "Apply" +msgstr "Aplicar" + +#contributors: +msgid "Apply kernel to diagonal weights" +msgstr "Aplicar kernel a pesos diagonal" + +#contributors: +msgid "April" +msgstr "" + +#contributors: +msgid "Arabic (Windows-1256)" +msgstr "Ãrabe (Windows-1256)" + +#contributors: +msgid "Arc Distance" +msgstr "" + +#contributors: +msgid "Ascending order" +msgstr "Orden ascendente" + +#contributors: +msgid "Assign To Target" +msgstr "" + +#contributors: +msgid "Assign Values to Currently Selected / Unselected" +msgstr "Asignar Valores a Actual Selección / No Selección" + +#contributors: +msgid "Assoc. Var." +msgstr "Var. Asoc." + +#contributors: +msgid "Attributes (Optional)" +msgstr "" + +#contributors: +msgid "August" +msgstr "" + +#contributors: +msgid "Auto Weighting" +msgstr "Auto-Ponderación" + +#contributors: +msgid "Autocorr." +msgstr "" + +#contributors: +msgid "Autocorr. of " +msgstr "" + +#contributors: +msgid "Automatic Labels" +msgstr "Etiquetas Automáticas" + +#contributors: +msgid "Average" +msgstr "Promedio" + +#contributors: +msgid "Average Comparison Chart" +msgstr "Gráfico Comparación de Medias" + +#contributors: +msgid "Averages Chart" +msgstr "Gráfico de Medias" + +#contributors: +msgid "Axes Through Origin" +msgstr "Ejes Sobre el Origen" + +#contributors: +msgid "Axis Option" +msgstr "Opción de Eje" + +#contributors: +msgid "Axis Selection" +msgstr "Selección de Eje" + +#contributors: +msgid "Background" +msgstr "Fondo" + +#contributors: +msgid "Background Color" +msgstr "Color de Fondo" + +#contributors: +msgid "Bandwidth:" +msgstr "Ancho de banda:" + +#contributors: +msgid "Base Map " +msgstr "Mapa Base" + +#contributors: +msgid "Base Variable" +msgstr "Variable Base" + +#contributors: +msgid "Basemap" +msgstr "Mapa Base" + +#contributors: +msgid "Basemap Configuration" +msgstr "Configuración de Mapa Base" + +#contributors: +msgid "Basemap Configuration Dialog" +msgstr "Cuadro de Configuración de Mapa Base" + +#contributors: +msgid "Basemap Parameters:" +msgstr "Basemap Parameters:" + +#contributors: +msgid "Basemap Sources: (Format: group&name.basemap&name,basemap&url)" +msgstr "" + +#contributors: +msgid "Before add/delete observations, please close the %d view(s) that depend on it." +msgstr "Antes de añadir/borrar observaciones, cerrar la(s) vista(s) %d que depende(n) de ellas." + +#contributors: +msgid "Before proceed with operation (add/remove, move, or rename), please close %d views that depend on it." +msgstr "Antes de proceder con la operación (añadir/eliminar, mover o renombrar), cerrar las %d vistas que dependen de ella." + +#contributors: +msgid "Before you can modify the variable %s, please close the %d view(s) that depend on it." +msgstr "Antes de modificar la variable %s, cerrar la(s) %d vista(s) que dependen de ella" + +#contributors: +msgid "Bivariate" +msgstr "Bivariante" + +#contributors: +msgid "Bivariate Local Join Count" +msgstr "Join Count Local Bivariante" + +#contributors: +msgid "Bivariate Local Moran's I" +msgstr "I de Moran Local Bivariante" + +#contributors: +msgid "Bivariate Moran Variable Settings" +msgstr "Configuración Variable de Moran Bivariante" + +#contributors: +msgid "Bivariate Moran's I" +msgstr "I de Morán Bivariante" + +#contributors: +msgid "Bivariate Moran's I (%s): %s and lagged %s" +msgstr "I de Moran Bivariante (%s): %s y %s retardado" + +#contributors: +msgid "Bonferroni bound:" +msgstr "Límite de Bonferroni" + +#contributors: +msgid "Both are significant, Spatial Lag Model has been selected." +msgstr "Ambos son significativos, se selecciona el Modelo del Retardo Espacial" + +#contributors: +msgid "Bottom" +msgstr "" + +#contributors: +msgid "Bounding Box" +msgstr "" + +#contributors: +msgid "Box Map (Hinge=1.5)" +msgstr "Mapa de Caja (Bisagra=1.5)" + +#contributors: +msgid "Box Map (Hinge=3.0)" +msgstr "Mapa de Caja (Bisagra=3.0)" + +#contributors: +msgid "Box Plot" +msgstr "Diagrama de Caja" + +#contributors: +msgid "Boxplot Theme" +msgstr "Tema del diagrama de Caja" + +#contributors: +msgid "Breaks" +msgstr "Cortes" + +#contributors: +msgid "Breaks with same values were created. Please choose a smaller categories, or manually edit the break values." +msgstr "" + +#contributors: +msgid "Bubble Chart" +msgstr "Gráfico de Burbujas" + +#contributors: +msgid "Bubble Chart - x: %s, y: %s, size: %s, %s" +msgstr "Gráfico de Burbujas - x: %s, y: %s, tamaño: %s, %s" + +#contributors: +msgid "Bubble Chart Variables" +msgstr "Variables de Gráfico de Burbujas" + +#contributors: +msgid "Bubble Size" +msgstr "Tamaño de Burbuja" + +#contributors: +msgid "Bubble Size Adjust Dialog" +msgstr "" + +#contributors: +msgid "Buffer query area:" +msgstr "" + +#contributors: +msgid "Bug Report" +msgstr "Informe de Errores" + +#contributors: +msgid "C&reate" +msgstr "Crear" + +#contributors: +msgid "CRS (proj4 format)" +msgstr "" + +#contributors: +msgid "CSV Configuration Warning" +msgstr "Aviso de Configuración CSV" + +#contributors: +msgid "CSV Contains Variable Names?" +msgstr "¿CSV Contiene Nombres de Variables?" + +#contributors: +msgid "CSV File Configuration" +msgstr "" + +#contributors: +msgid "Calculator" +msgstr "Calculadora" + +#contributors: +msgid "Can't connect to datasource: " +msgstr "No se puede conectar con fuente de datos:" + +#contributors: +msgid "Can't create layer %s with empty field (%s) name." +msgstr "" + +#contributors: +msgid "Can't create output OGR driver. \n\nDetails:" +msgstr "" + +#contributors: +msgid "Can't get bounding box information from this datasource. Please try another datasource." +msgstr "No se puede obtener información del cuadro delimitador de la fuente de datos. Intentarlo con otra fuente de datos." + +#contributors: +msgid "Can't get datasource type from: %s\n\nPlease select datasource supported by GeoDa or add extension to file datasource." +msgstr "" + +#contributors: +msgid "Can't get layers from unknown datasource. Please complete the datasource fields." +msgstr "Imposible obtener capas de fuente de datos desconocida. Completar los campos de la misma." + +#contributors: +msgid "Can't save Thiessen polygons" +msgstr "" + +#contributors: +msgid "Can't write/create layer \"" +msgstr "" + +#contributors: +msgid "Cancel" +msgstr "Cancelar" + +#contributors: +msgid "Canvas Layout Preview" +msgstr "" + +#contributors: +msgid "Carto" +msgstr "Carto" + +#contributors: +msgid "Cartogram" +msgstr "Cartograma" + +#contributors: +msgid "Cartogram Variables" +msgstr "Variables del Cartograma" + +#contributors: +msgid "Categories" +msgstr "Categorías" + +#contributors: +msgid "Categories \"%s\" is currently in use by another view. Please close or change all views using this custom categories before deleting." +msgstr "Categorías \"%s\" está actualmente en uso por otra vista. Cerrar/cambiar las vistas utilizando estas categorías personalizadas antes de borrar." + +#contributors: +msgid "Categories of " +msgstr "Categoría de " + +#contributors: +msgid "Categories title \"%s\" already exists. Please choose a different title." +msgstr "Título de categorías \"%s\" existente. Seleccionar un título diferente." + +#contributors: +msgid "Category" +msgstr "Categoría" + +#contributors: +msgid "Category Editor" +msgstr "Editor de Categorías" + +#contributors: +msgid "Central European (CP852)" +msgstr "Centroeuropeo (CP852)" + +#contributors: +msgid "Central European (Windows-1250)" +msgstr "Centroeuropeo (Windows-1250)" + +#contributors: +msgid "Central European Latin-2 (ISO-8859-2)" +msgstr "Centroeuropeo Latín-2 (ISO-8859-2)" + +#contributors: +msgid "Centroid (X)" +msgstr "" + +#contributors: +msgid "Centroid (Y)" +msgstr "" + +#contributors: +msgid "Change" +msgstr "Cambio" + +#contributors: +msgid "Change Categories Title" +msgstr "Cambiar Título de Categorías" + +#contributors: +msgid "Change Color of Root" +msgstr "" + +#contributors: +msgid "Change Current Map Type" +msgstr "Cambiar Tipo Actual de Mapa" + +#contributors: +msgid "Change Edge Color" +msgstr "Cambiar Color del Borde" + +#contributors: +msgid "Change Edge Thickness" +msgstr "Cambiar Grosor del Borde" + +#contributors: +msgid "Change Fill Color" +msgstr "Change Fill Color" + +#contributors: +msgid "Change Fill Color of Neighbors" +msgstr "Cambiar Color de Relleno de Vecinos" + +#contributors: +msgid "Change Font" +msgstr "Cambiar Fuente" + +#contributors: +msgid "Change Map Transparency" +msgstr "Cambiar Transparencia del Mapa" + +#contributors: +msgid "Change Outline Color" +msgstr "Change Outline Color" + +#contributors: +msgid "Change Outline Color of Selected" +msgstr "" + +#contributors: +msgid "Change Parameters" +msgstr "Cambiar Parámetros" + +#contributors: +msgid "Change Point Radius" +msgstr "Change Point Radius" + +#contributors: +msgid "Change Seed" +msgstr "Cambiar semilla" + +#contributors: +msgid "Change Size of Root" +msgstr "" + +#contributors: +msgid "Change field properties (%s) failed.\n\nDetails: %s" +msgstr "" + +#contributors: +msgid "Change title \"%s\" to" +msgstr "Cambiar título\"%s\" a" + +#contributors: +msgid "Change variable type for \"%s\" has failed. Please check all values are valid for conversion." +msgstr "Error en el cambio de tipo de variable por \"%s\". Comprobar la validez de todos los valores en la conversión." + +#contributors: +msgid "Check Bug Report on Github" +msgstr "Consulte el Informe de Errores en Github" + +#contributors: +msgid "Check Updates" +msgstr "Comprobar Actualizaciones" + +#contributors: +msgid "Checking Symmetry..." +msgstr "Comprobando Simetría..." + +#contributors: +msgid "Chinese Simplified (GB2312)" +msgstr "Chino Simplificado (GB2312)" + +#contributors: +msgid "Chinese Traditional (Big5)" +msgstr "Chino Tradicional (Big5)" + +#contributors: +msgid "Choose A Color" +msgstr "Seleccionar un Color" + +#contributors: +msgid "Choose Cateogry Color" +msgstr "Seleccionar Color de Categoría" + +#contributors: +msgid "Choose Cateogry Fill Color" +msgstr "" + +#contributors: +msgid "Choose Cateogry Outline Color" +msgstr "" + +#contributors: +msgid "Choose Intervals" +msgstr "Elegir Intervalos" + +#contributors: +msgid "Choose Weights" +msgstr "Seleccionar Pesos" + +#contributors: +msgid "Choose Weights File" +msgstr "Elegir Archivo de Pesos" + +#contributors: +msgid "Choose an output weights file name." +msgstr "Escribir nombre de fichero de resultado de pesos" -msgid "GeoDa maj.min.bld (type), day month year" -msgstr "GeoDa maj.min.bld (tipo), día mes año" +#contributors: +msgid "Chosen field is not a numeric type. Please select a numeric type field." +msgstr "El campo escogido no es numérico. Seleccionar un campo de tipo numérico." + +#contributors: +msgid "Chosen field is not a numeric type. Please select a numeric type field." +msgstr "El campo elegido no es numérico. Seleccionar un campo numérico." + +#contributors: +msgid "Chosen key field '%s' s a time variant. Please choose a non-time variant field as key." +msgstr "Campo clave seleccionado %s' varía en el tiempo. Seleccionar campo clave no variable en el tiempo." -msgid "Distance metric" -msgstr "Métrica de Distancia" +#contributors: +msgid "Chosen key field is not valid. Please select another key field" +msgstr "" + +#contributors: +msgid "Chow test for sel/unsel regression subsets: " +msgstr "Test de Chow para regresiones de subgrupos de sel/no sel." +#contributors: msgid "Circle" msgstr "Círculo" -msgid "PCA" -msgstr "ACP" +#contributors: +msgid "Circle Color" +msgstr "Color del Círculo" -msgid "Hinge=1.5" -msgstr "Bisagra=1.5" +#contributors: +msgid "Circle Size" +msgstr "Tamaño del Círculo" -msgid "dBase Database File (*.dbf)|*.dbf" -msgstr "Archivo Datos dBase (*.dbf)|*.dbf" +#contributors: +msgid "Classic " +msgstr "Básico" -msgid "First row of CSV file" -msgstr "Primera fila de archivo CSV" +#contributors: +msgid "Classification Themes" +msgstr "Temas de Clasificación" -msgid "Save Thiessen Polygons" -msgstr "Guardar Polígonos Thiessen" +#contributors: +msgid "Clean Basemap Cache" +msgstr "Borrar Mapa Base de Caché" -msgid "Save Categories to Table" -msgstr "Guardar Categorías en Tabla" +#contributors: +msgid "Clear Highlight Association" +msgstr "Clear Highlight Association" -msgid "Axes Through Origin" -msgstr "Ejes Sobre el Origen" +#contributors: +msgid "Clear Selection" +msgstr "Borrar Selección" -msgid "Basemap Configuration Dialog" -msgstr "Cuadro de Configuración de Mapa Base" +#contributors: +msgid "Click RegressionDlg::OnSaveToTxtFileClick" +msgstr "Teclear RegressionDlg::OnSaveToTxtFileClick" -msgid "records:" -msgstr "registros" +#contributors: +msgid "Click RegressionDlg::OnViewResultsClick" +msgstr "Teclear RegressionDlg::OnViewResultsClick" -msgid "sequential" -msgstr "secuencial" +#contributors: +msgid "Close" +msgstr "Cerrar" -msgid "" -"Copyright (C) 1998-2011\n" -"GeoDa Center for Geospatial Analysis and Computation\n" -"and Arizona Board of Regents\n" -"All Rights Reserved" +#contributors: +msgid "Cluster Map " +msgstr "Mapa de Clústers" + +#contributors: +msgid "Cluster Maps" +msgstr "Mapas de Clústers" + +#contributors: +msgid "Cluster centers:" msgstr "" -"Copyright (C) 1998-2011\n" -"GeoDa Center for Geospatial Analysis and Computation\n" -"y Arizona Board of Regents\n" -"Todos los Derechos Reservados" -msgid "Pred. Val. and Res." -msgstr "Val. Pred. y Res." +#contributors: +msgid "Clusters" +msgstr "Clúster" -msgid "Line" -msgstr "Línea" +#contributors: +msgid "Co-location Join Count" +msgstr "Co-location Join Count" -msgid "Regimes Regression" -msgstr "Regresión" +#contributors: +msgid "Co-location Join Count only applies to co-location case. The selected variables have no co-location. Please change your selection, or use Univariate/Bivariate Local Join Count." +msgstr "" -msgid "Categories" -msgstr "Categorías" +#contributors: +msgid "Co-location Map" +msgstr "Mapa de Co-localización" -msgid "Light" -msgstr "Fino" +#contributors: +msgid "Co-location Map: " +msgstr "" -msgid "Assoc. Var." -msgstr "Var. Asoc." +#contributors: +msgid "Co-location Settings" +msgstr "Configuración de Co-localización" -msgid "Unique Values Map" -msgstr "Mapa de Valores Individuales" +#contributors: +msgid "Coeff. Var. Mat." +msgstr "Mat. Var. Coef." -msgid "Message area" -msgstr "Ãrea de Mensajes" +#contributors: +msgid "Colocation Cluster" +msgstr "Clúster de Colocaciones" -msgid "File Path" -msgstr "Ruta del Archivo" +#contributors: +msgid "Color" +msgstr "Color" -msgid "Change Parameters" -msgstr "Cambiar Parámetros" +#contributors: +msgid "Color Scheme" +msgstr "Paleta de Colores" -msgid "Natural Breaks Map" -msgstr "Mapa de Cortes Naturales" +#contributors: +msgid "Column Name" +msgstr "Nombre de Columna" + +#contributors: +msgid "Column Number (from 0)" +msgstr "Número de Columna (desde 0)" + +#contributors: +msgid "Comma Separated Value (*.csv)|*.csv" +msgstr "Valor Separado por Comas (*.csv)|*.csv" + +#contributors: +msgid "Components:" +msgstr "Componentes:" + +#contributors: +msgid "Conditional Co-location Map Variables" +msgstr "Variables de Mapa de Co-localización Condicional" + +#contributors: +msgid "Conditional G Cluster Map Variables" +msgstr "Variables de Mapa de Clúster G Condicional" + +#contributors: +msgid "Conditional GetisOrd Map" +msgstr "Mapa Condicional de GetisOrd" + +#contributors: +msgid "Conditional Histogram" +msgstr "Histograma Condicional" + +#contributors: +msgid "Conditional Histogram Variables" +msgstr "Variables de Histograma Condicional" + +#contributors: +msgid "Conditional LISA Map" +msgstr "Mapa LISA Condicional" + +#contributors: +msgid "Conditional LISA Map Variables" +msgstr "Variables del Mapa LISA Condicional" + +#contributors: +msgid "Conditional Local Geary Map" +msgstr "Mapa Condicional Geary Local" + +#contributors: +msgid "Conditional Local Geary Map Variables" +msgstr "Variables del Mapa de Geary Local Condicional" + +#contributors: +msgid "Conditional Local Join Count Map" +msgstr "Mapa Joint Count Local Condicional" + +#contributors: +msgid "Conditional Map" +msgstr "Mapa Condicional" + +#contributors: +msgid "Conditional Map Variables" +msgstr "Variables Mapa Condicional" + +#contributors: +msgid "Conditional Plot" +msgstr "Gráfico Condicional" + +#contributors: +msgid "Conditional Scatter Plot" +msgstr "Diagrama de Dispersión Condicional" + +#contributors: +msgid "Conditional Scatter Plot Variables" +msgstr "Variables Gráfico de Dispersión Condicional" + +#contributors: +msgid "Connect" +msgstr "Conectar" + +#contributors: +msgid "Connect to Data Source" +msgstr "Conectarse a la fuente de datos" + +#contributors: +msgid "Connectivity" +msgstr "Conectividad" + +#contributors: +msgid "Connectivity Graph" +msgstr "Gráfico de Conectividad" + +#contributors: +msgid "Connectivity Histogram" +msgstr "Histograma de Conectividades" + +#contributors: +msgid "Connectivity Map" +msgstr "Mapa de conectividad" + +#contributors: +msgid "Connectivity Map - " +msgstr "" + +#contributors: +msgid "Contiguity Weight" +msgstr "Pesos de Contigüidad" + +#contributors: +msgid "Continue" +msgstr "Continuar" + +#contributors: +msgid "Convert ASCII to SHP" +msgstr "Convertir ASCII a SHP" + +#contributors: +msgid "Convert Boundary to SHP" +msgstr "Convertir Boundary a SHP" + +#contributors: +msgid "Convert Boundary to Shape Datasource" +msgstr "Convertir Boundary a Fuente de Datos Shape" + +#contributors: +msgid "Cooling Rate:" +msgstr "Tasa de Enfriamiento" + +#contributors: +msgid "Cooling rate for Simulated Annealing algorithm has to be a float number between 0 and 1 (e.g. 0.85)." +msgstr "La tasa de enfriamiento para algoritmo de Recocido Simulado ha de ser un nº flotante entre 0 y 1 (ej. 0.85)." + +#contributors: +msgid "Cooling rate:" +msgstr "" + +#contributors: +msgid "Copy" +msgstr "Copiar" + +#contributors: +msgid "Copy Image To Clipboard" +msgstr "Copiar Imagen al Portapapeles " + +#contributors: +msgid "Copy Legend To Clipboard" +msgstr "Copiar Leyenda al Portapapeles" + +#contributors: +msgid "Copyright (C) 1998-2011\nGeoDa Center for Geospatial Analysis and Computation\nand Arizona Board of Regents\nAll Rights Reserved" +msgstr "Copyright (C) 1998-2011\nGeoDa Center for Geospatial Analysis and Computation\ny Arizona Board of Regents\nTodos los Derechos Reservados" + +#contributors: +msgid "Copyright (C) 2011-%d by Luc Anselin" +msgstr "" + +#contributors: +msgid "Copyright (C) year-year by Luc Anselin" +msgstr "Copyright (C) año-año por Luc Anselin" + +#contributors: +msgid "Cores" +msgstr "Centros" + +#contributors: +msgid "Cores and Neighbors" +msgstr "Centros y Vecinos" + +#contributors: +msgid "Correlogram" +msgstr "Correlograma" + +#contributors: +msgid "Correlogram Parameters" +msgstr "" + +#contributors: +msgid "Correlogram Parameters Help" +msgstr "" + +#contributors: +msgid "Could not create a new variable. Possibly a read-only data source." +msgstr "Imposible crear una nueva variable. Posible fuente de datos de sólo lectura." + +#contributors: +msgid "Could not determine which Field Choice was selected. Please report this error." +msgstr "" + +#contributors: +msgid "Could not determine which Time Choice was selected. Please report this error." +msgstr "" + +#contributors: +msgid "Could not initialize new project." +msgstr "" + +#contributors: +msgid "Count" +msgstr "Cuenta" + +#contributors: +msgid "Covariates" +msgstr "Explicativas" + +#contributors: +msgid "Create" +msgstr "Crear" + +#contributors: +msgid "Create Custom Breaks" +msgstr "Crear Cortes Personalizados" + +#contributors: +msgid "Create Grid" +msgstr "Crear Rejilla" + +#contributors: +msgid "Create New Custom" +msgstr "Crear Nuevo Personalizado" -msgid "Save Projet File As" -msgstr "Guardar Archivo de Proyecto Como" +#contributors: +msgid "Create Project File Now?" +msgstr "¿Crear Ahora Archivo de Proyecto?" -msgid "Cyrillic (Windows-1251)" -msgstr "Cirílico (Windows-1251)" +#contributors: +msgid "Create Weights" +msgstr "Crear Pesos" -msgid "Selection" -msgstr "Selección" +#contributors: +msgid "Create a project file?" +msgstr "¿Crear un archivo de proyecto?" -msgid "Display Thiessen Polygons" -msgstr "Mostrar Polígonos Thiessen" +#contributors: +msgid "Create new custom categories classification." +msgstr "" -msgid "Time Editor" -msgstr "Editor Tiempo" +#contributors: +msgid "Creating Grid" +msgstr "Crear Rejilla" -msgid "Intervals" -msgstr "Intervalos" +#contributors: +msgid "Cumulative" +msgstr "Acumulado" -msgid "Improve Cartogram" -msgstr "Mejorar Cartograma" +#contributors: +msgid "Current OGR dirver " +msgstr "" -msgid "Add new column to table" -msgstr "Añadir nueva columna a la tabla" +#contributors: +msgid "Current Opacity: %.2f" +msgstr "" -msgid "Tools" -msgstr "Herramientas" +#contributors: +msgid "Current Transparency: %.2f" +msgstr "Transparencia actual: %.2f" -msgid "Category" -msgstr "Categoría" +#contributors: +msgid "Current field name:" +msgstr "Nombre de campo actual" -msgid "Save Rates" -msgstr "Guardar Tasas" +#contributors: +msgid "Current layer has already been associated with selected layer. Please select another layer to associate with." +msgstr "" -msgid "Database Host" -msgstr "Base de Datos Anfitrión" +#contributors: +msgid "Current time:" +msgstr "Tiempo Actual:" -msgid "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" -msgstr "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" +#contributors: +msgid "Curve Color" +msgstr "Color de la Curva" -msgid "Exit" -msgstr "Salir" +#contributors: +msgid "Custom" +msgstr "" + +#contributors: +msgid "Custom Breaks" +msgstr "Cortes Personalizados" +#contributors: msgid "Custom Inference" msgstr "Inferencia Personalizada" -msgid "Y-coordinate variable" -msgstr "Variable coordenada-Y" - -msgid "Base Variable" -msgstr "Variable Base" +#contributors: +msgid "Cut" +msgstr "Cortar" -msgid "Axis Option" -msgstr "Opción de Eje" +#contributors: +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirílico (ISO-8859-5)" -msgid "Horizontal Bins Breaks" -msgstr "Cortes Intervalos Horizontales" +#contributors: +msgid "Cyrillic (KOI8-R)" +msgstr "Cirílico (KOI8-R)" -msgid "Hinge=3.0" -msgstr "Bisagra=3.0" +#contributors: +msgid "Cyrillic (Windows-1251)" +msgstr "Cirílico (Windows-1251)" -msgid "Min" -msgstr "Mín." +#contributors: +msgid "Cyrillic/Russian (CP866)" +msgstr "Cirílico/Ruso (CP866)" -msgid "Nokia/HERE App ID" -msgstr "Nokia/HERE ID de la APP" +#contributors: +msgid "D.F." +msgstr "" -msgid "Number of Rows" -msgstr "Número de Filas" +#contributors: +msgid "DBF File Information" +msgstr "Información Archivo DBF" -msgid "Boxplot Theme" -msgstr "Tema del diagrama de Caja" +#contributors: +msgid "DBF Viewer 0.8 (July 29, 2011)" +msgstr "DBF Viewer 0.8 (Julio 29, 2011)" -msgid "Current time:" -msgstr "Tiempo Actual:" +#contributors: +msgid "Data" +msgstr "Datos" -msgid "Decimals (max 15)" -msgstr "Decimales (máx. 15)" +#contributors: +msgid "Data Point" +msgstr "Punto de Datos" -msgid "MDS" -msgstr "MDS" +#contributors: +msgid "Data Preview - number of preview records:" +msgstr "Vista Previa de Datos - nº de datos en vista previa:" -msgid "Lower-left corner" -msgstr "Esquina inferior izquierda" +#contributors: +msgid "Data Source Overview/Help: " +msgstr "Revisión Fuente de Datos/Ayuda" -msgid "Count" -msgstr "Cuenta" +#contributors: +msgid "Data Type" +msgstr "Tipo de Datos" -msgid "Spatial Correlogram" -msgstr "Correlograma Espacial" +#contributors: +msgid "Data source (%s) doesn't exist. Please check the project configuration file." +msgstr "La fuente de datos (%s) no existe. Comprobar el fichero de configuración del proyecto." -msgid "Read from an ASCII file" -msgstr "Leer de un Archivo ASCII" +#contributors: +msgid "Database" +msgstr "Base de Datos" -msgid "Space" -msgstr "Espacio" +#contributors: +msgid "Database Host" +msgstr "Base de Datos Anfitrión" -msgid "South European Latin-3 (ISO-8859-3)" -msgstr "Sur de Europa Latín-3 (ISO-8859-3)" +#contributors: +msgid "Database Name/Instance" +msgstr "Nombre Base de Datos/Instancia" -msgid "Nordic Latin-6 (ISO-8859-10)" -msgstr "Nórdico Latín-6 (ISO-8859-10)" +#contributors: +msgid "Database Port" +msgstr "Base de Datos Puerto" -msgid "Time" -msgstr "Tiempo" +#contributors: +msgid "Database Type" +msgstr "Tipo Base de Datos" -msgid "West European Latin-9 (ISO-8859-15)" -msgstr "Europeo Occidental Latín-9 (ISO-8859-15)" +#contributors: +msgid "Database port is empty. Please input one." +msgstr "Puerto de base de datos vacío. Introducir uno." -msgid "Nokia Night" -msgstr "Nokia Noche" +#contributors: +msgid "Database/Instance Name" +msgstr "Base de datos/Nombre de instancia" -msgid "name:" -msgstr "nombre" +#contributors: +msgid "Datasource in project is not valid." +msgstr "Fuente de daos del proyecto no válida." -msgid "Univariate Local Moran's I" -msgstr "I de Moran Local Univariante" +#contributors: +msgid "Datasource path is empty." +msgstr "Ruta vacía de fuente de datos." -msgid "Local G Maps" -msgstr "Mapas Locales G" +#contributors: +msgid "Date/Time" +msgstr "" -msgid "Strong" -msgstr "Grueso" +#contributors: +msgid "Date/Time formats (using comma to separate formats):" +msgstr "" -msgid "Turkish (Windows-1254)" -msgstr "Turco (Windows-1254)" +#contributors: +msgid "December" +msgstr "" -msgid "Creating Grid" -msgstr "Crear Rejilla" +#contributors: +msgid "Decimal:" +msgstr "Decimal:" -msgid "Carto Light (No Labels)" -msgstr "Carto Claro (Sin Etiquetas)" +#contributors: +msgid "Decimals (max 15)" +msgstr "Decimales (máx. 15)" -msgid "minimum" -msgstr "mínimo" +#contributors: +msgid "Default displayed decimal places in Table:" +msgstr "" -msgid "Append to current selection" -msgstr "Agregar a selección actual" +#contributors: +msgid "Delete" +msgstr "Eliminar" -msgid "Type 2a" -msgstr "Tipo 2a" +#contributors: +msgid "Delete Variable(s)" +msgstr "Eliminar Variable(s)" -msgid "Specify manually" -msgstr "Especificar manualmente" +#contributors: +msgid "Delta Factor:" +msgstr "Factor Delta:" -msgid "ESRI File Geodatabase (*.gdb)|*.gdb" -msgstr "Geodatabase archivos ESRI (*.gdb)|*.gdb" +#contributors: +msgid "Dendrogram" +msgstr "Dendograma" -msgid "Move Up" -msgstr "Arriba" +#contributors: +msgid "Dependent Var (y-axis)" +msgstr "Var. Dependiente (eje-y)" -msgid "Unicode (UTF-16LE)" -msgstr "Unicode (UTF-16LE)" +#contributors: +msgid "Dependent Var Y" +msgstr "Variable Dependiente Y" -msgid "Other (up to 99999)" -msgstr "Otro (superior a 99999)" +#contributors: +msgid "Dependent Variable" +msgstr "Variable dependiente" -msgid "Spatial Lag" -msgstr "Retardo Espacial" +#contributors: +msgid "Descending order" +msgstr "Orden Descendente" -msgid "DBF File Information" -msgstr "Información Archivo DBF" +#contributors: +msgid "Description" +msgstr "Descripción" -msgid "2nd Variable (Y)" -msgstr "2ª Variable (Y)" +#contributors: +msgid "Diagonal weights = 1" +msgstr "pesos Diagonal = 1" -msgid "Encode" -msgstr "Codificación" +#contributors: +msgid "Diff Values" +msgstr "Valores en Difer." -msgid "199 Permutations" -msgstr "199 Permutaciones" +#contributors: +msgid "Difference-in-Means Test:" +msgstr "Test de Diferencia de Medias:" -msgid "Save Selection" -msgstr "Guardar Selección" +#contributors: +msgid "Differential Local Moran's I" +msgstr "I Local de Moran Diferencial" -msgid "View Original Data" -msgstr "Ver Datos Originales" +#contributors: +msgid "Differential Moran Variable Settings" +msgstr "Configuración de Variable de Moran Diferencial" -msgid "Check Updates" -msgstr "Comprobar Actualizaciones" +#contributors: +msgid "Differential Moran's I" +msgstr "I de Moran Diferencial" -msgid "Move Down" -msgstr "Abajo" +#contributors: +msgid "Differential Moran's I (%s): %s - %s" +msgstr "I de Moran Diferencial (%s): %s - %s" -msgid "Select All Undefined" -msgstr "Seleccionar Todo Celdas en Blanco" +#contributors: +msgid "Differential Moran's I tests whether the change in a variable over time is spatially correlated.\n\nPlease first group variables by time period: Select Time --> Time Editor." +msgstr "" -msgid "Use inverse distance?" -msgstr "¿Usar distancia inversa?" +#contributors: +msgid "Disable auto upgrade:" +msgstr "Desactivar actualización automática" -msgid "skater" -msgstr "skater" +#contributors: +msgid "Disable crash detection for bug report:" +msgstr "Desactivar detección de fallos para informe de errores" -msgid "current table key" -msgstr "Clave de la tabla activa" +#contributors: +msgid "Display Axes Scale Values" +msgstr "Mostrar Valores de Escala Ejes " -msgid "Stack" -msgstr "Agregar" +#contributors: +msgid "Display Centroids" +msgstr "Mostrar Centroides" -msgid "Sort" -msgstr "Ordenar" +#contributors: +msgid "Display Mean Centers" +msgstr "Mostrar Centros Medios" -msgid "Average" -msgstr "Promedio" +#contributors: +msgid "Display Slope Values" +msgstr "Mostrar Valores de Pendiente" -msgid "choose a variable" -msgstr "Elegir una variable" +#contributors: +msgid "Display Statistics" +msgstr "Mostrar Estadísticos" -msgid "Status Bar" -msgstr "Barra de Estado" +#contributors: +msgid "Display Thiessen Polygons" +msgstr "Mostrar Polígonos Thiessen" -msgid "Weights Manager" -msgstr "Gestor de pesos" +#contributors: +msgid "Displayed decimal places" +msgstr "Mostrar lugares decimales" -msgid "Continue" -msgstr "Continuar" +#contributors: +msgid "Displayed decimals" +msgstr "Mostrar decimales" -msgid "Database Type" -msgstr "Tipo Base de Datos" +#contributors: +msgid "Displayed decimals places" +msgstr "Lugares decimales mostrados" -msgid "Order of contiguity" -msgstr "Orden de contigüidad" +#contributors: +msgid "Dissolve" +msgstr "" -msgid "View" -msgstr "Vista" +#contributors: +msgid "Dissolve - " +msgstr "" -msgid "2 Iteration" -msgstr "Iteración 2" +#contributors: +msgid "Dissolve does not work with Table only datasource." +msgstr "" -msgid "Grid Size" -msgstr "Tamaño de Rejilla" +#contributors: +msgid "Dissolve only works on polygon dataset." +msgstr "" -msgid "Y-coord" -msgstr "Coord-Y" +#contributors: +msgid "Distance" +msgstr "Distancia" -msgid "Shape Centers" -msgstr "Centros de Forma" +#contributors: +msgid "Distance Function:" +msgstr "Función de Distancia:" -msgid "99 Permutations" -msgstr "99 Permutaciones" +#contributors: +msgid "Distance Weight" +msgstr "Pesos de Distancias" -msgid "DBF Viewer 0.8 (July 29, 2011)" -msgstr "DBF Viewer 0.8 (Julio 29, 2011)" +#contributors: +msgid "Distance band" +msgstr "Banda de Distancia" -msgid "3 Iteration" -msgstr "Iteración 3" +#contributors: +msgid "Distance function:\t" +msgstr "" -msgid "Apply" -msgstr "Aplicar" +#contributors: +msgid "Distance metric: " +msgstr "" -msgid "Map Themes" -msgstr "Temas de Mapa" +#contributors: +msgid "Distance:" +msgstr "" -msgid "499 Permutations" -msgstr "499 Permutaciones" +#contributors: +msgid "Do Means Differ? (ANOVA)" +msgstr "" -msgid "Include Variable Names" -msgstr "Incluir Nombres de Variables" +#contributors: +msgid "Do you want to save the results of Diff-in-Diff test?\n\nNote: the results can only be saved into an external data file, due to the change of cross-sectional observations in a space-time context." +msgstr "" -msgid "Local Geary Maps" -msgstr "Mapas Geary Local" +#contributors: +msgid "Do you want to save your data?" +msgstr "¿Desea guardar sus datos?" -msgid "Hebrew (Windows-1255)" -msgstr "Hebreo (Windows-1255)" +#contributors: +msgid "Don't show Recent/Sample Data panel again" +msgstr "No mostrar Recientes/Datos de Ejemplo de nuevo" -msgid "LOWESS Smoother" -msgstr "Alisado LOWESS" +#contributors: +msgid "Don't show this dialog again (You can always change this setting using menu: File->Preferences)" +msgstr "No mostrar este cuadro de nuevo (Esta configuración siempre se puede cambiar en el menú: Archivo->Preferencias)" -msgid "Diagonal weights = 1" -msgstr "pesos Diagonal = 1" +#contributors: +msgid "Donate" +msgstr "" -msgid "Select key:" -msgstr "Seleccionar clave" +#contributors: +msgid "Down" +msgstr "" -msgid "West European Latin-1 (ISO-8859-1)" -msgstr "Europeo Occidental Latín-1 (ISO-8859-1)" +#contributors: +msgid "Download OSM Roads" +msgstr "" -msgid "Bug Report" -msgstr "Informe de Errores" +#contributors: +msgid "Downloading updates..." +msgstr "Descargando actualizaciones..." -msgid "redcap" -msgstr "REDCAP" +#contributors: +msgid "Duplicate IDs" +msgstr "IDs Duplicados" -msgid "Nokia Day" -msgstr "Nokia Día" +#contributors: +msgid "Duplicate Thiessen Polygons Found" +msgstr "Encontrados Polígonos Thiesen duplicados" -msgid "Outlines Visible" -msgstr "Contornos Visibles" +#contributors: +msgid "Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Please try to export current dataset without duplicates." +msgstr "" -msgid "Change Map Transparency" -msgstr "Cambiar Transparencia del Mapa" +#contributors: +msgid "Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Press OK to save duplicate polygon ids to Table." +msgstr "" -msgid "Number of Categories" -msgstr "Número de Categorías" +#contributors: +msgid "Duplicate variable names specified." +msgstr "" -msgid "file size:" -msgstr "tamaño de archivo:" +#contributors: +msgid "E&xplore" +msgstr "Explorar" -msgid "New project file:" -msgstr "Nuevo archivo de proyecto" +#contributors: +msgid "ESRI File Geodatabase (*.gdb)|*.gdb" +msgstr "Geodatabase archivos ESRI (*.gdb)|*.gdb" -msgid "Save Table As CSV File" -msgstr "Guardar Tabla como CSV" +#contributors: +msgid "ESRI Personal Geodatabase (*.mdb)|*.mdb" +msgstr "Geodatabase Personal ESRI (*.mdb)|*.mdb" -msgid "year:" -msgstr "año" +#contributors: +msgid "ESRI Shapefile (*.shp)|*.shp" +msgstr "Archivo ESRI (*.shp)|*.shp" -msgid "Unicode (UTF-8)" -msgstr "Unicode (UTF-8)" +#contributors: +msgid "Edit" +msgstr "Editar" -msgid "Set Number Separators" -msgstr "Fijar Separadores de Números" +#contributors: +msgid "Edit Custom Breaks" +msgstr "Editar Cortes Personalizados" -msgid "day:" -msgstr "día:" +#contributors: +msgid "Edit LOWESS Parameters" +msgstr "Editar Parámetros LOWESS" +#contributors: msgid "Edit Title" msgstr "Editar Título" -msgid "Chinese Simplified (GB2312)" -msgstr "Chino Simplificado (GB2312)" +#contributors: +msgid "Edit Variable Properties" +msgstr "Editar Propiedades de Variables" -msgid "Don't show Recent/Sample Data panel again" -msgstr "No mostrar Recientes/Datos de Ejemplo de nuevo" +#contributors: +msgid "Emp Bayes Rate Std Moran's I (%s): %s / %s" +msgstr "I de Moran Std. en Tasa de Bayes Empírico (%s): %s / %s" -msgid "About DBF Viewer" -msgstr "Sobre DBF Viewer" +#contributors: +msgid "Empirical Bayes" +msgstr "Empírico Bayes" -msgid "Set Display Precision of Y-Axis" -msgstr "Fijar Posiciones Decimales en Eje-Y" +#contributors: +msgid "Empirical Bayes Rate Standardization Variables" +msgstr "Variables Estandarizadas de Tasas de Bayes Empírico" -msgid "Adaptive bandwidth" -msgstr "Ancho de Banda Adaptativo" +#contributors: +msgid "Empirical Bayes Smoothed Variable Settings" +msgstr "Configuración Variable Alisada de Bayes Empírico" -msgid "Width in pixels" -msgstr "Ancho en píxeles" +#contributors: +msgid "Empirical Spatial Rate Smoothed Variable Settings" +msgstr "Configuración de Variable Alisada de Tasa Empírica Espacial" -msgid "Edit Custom Breaks" -msgstr "Editar Cortes Personalizados" +#contributors: +msgid "Enable High DPI/Retina support (Mac only):" +msgstr "" -msgid "4 Iteration" -msgstr "Iteración 4" +#contributors: +msgid "Enable User Defined Value Range of Y-Axis" +msgstr "Permitir Definicion de Rango de Valores del Eje Y" -msgid "Open Document Spreadsheet (*.ods)|*.ods" -msgstr "OpenDocument Hoja de Cálculo (*.ods)|*.ods" +#contributors: +msgid "Enable transparency setup of category color in map (Windows only):" +msgstr "" -msgid "Use Specified Seed" -msgstr "Usar Semilla Específica" +#contributors: +msgid "Encode" +msgstr "Codificación" -msgid "mean" -msgstr "media" +#contributors: +msgid "Enter a seed value" +msgstr "Introducir valor de semilla" -msgid "Don't show this dialog again (You can always change this setting using menu: File->Preferences)" -msgstr "No mostrar este cuadro de nuevo (Esta configuración siempre se puede cambiar en el menú: Archivo->Preferencias)" +#contributors: +msgid "Enter a seed value for random number generator:" +msgstr "" -msgid "Differential Local Moran's I" -msgstr "I Local de Moran Diferencial" +#contributors: +msgid "Enter new ID variable name:" +msgstr "Introduzca nombre nueva variable ID" -msgid "Select ID Variable" -msgstr "Seleccionar Variable ID" +#contributors: +msgid "Equal Intervals" +msgstr "Intervalos Iguales" -msgid "Distance" -msgstr "Distancia" +#contributors: +msgid "Equal Intervals Map" +msgstr "Mapa de Intervalos Iguales" -msgid "Regression Report" -msgstr "Informe de Regresión" +#contributors: +msgid "Error" +msgstr "Error" -msgid "Quantile" -msgstr "Cuantiles" +#contributors: +msgid "Error while opening project:\n\n" +msgstr "" -msgid "Convert ASCII to SHP" -msgstr "Convertir ASCII a SHP" +#contributors: +msgid "Error: " +msgstr "Error: " -msgid "numeric" -msgstr "numérico" +#contributors: +msgid "Error: Base values contain non-positive numbers which will result in undefined values." +msgstr "Error: Valores de la base con números negativos, que dan lugar a valores indefinidos." -msgid "Rates-Calculated Map" -msgstr "Mapa de Tasas Calculadas" +#contributors: +msgid "Error: Chosen theme requires more cateogries than observations." +msgstr "Error: el tema seleccionado tiene más categorías que observaciones." -msgid "Raw Rate" -msgstr "Tasa Cruda" +#contributors: +msgid "Error: Due to restrictions on the DBF file format, the particular combination of length and decimals entered is not valid. Based on your current choices, we recommend length = %d and decimals = %d" +msgstr "Error: debido a restricciones en el formato del archivo DBF, la combinación concreta de longitud y decimales introducida no es válida. En base a su elección actual, recomendamos longitud = %d y decimales = %d" -msgid "Save Connectivity To Table" -msgstr "Guardar Conectividad a Tabla" +#contributors: +msgid "Error: Maximum number of neighbors %d exceeded." +msgstr "Error: Excedido el máximo número de vecinos %d" -msgid "Panning Mode" -msgstr "Modo Arrastrado" +#contributors: +msgid "Error: The table variable name is empty." +msgstr "Error: El nombre de la variable de la tabla está vacío." -msgid "Cyrillic (ISO-8859-5)" -msgstr "Cirílico (ISO-8859-5)" +#contributors: +msgid "Error: \"%s\" already exists in Table, please specify a different name." +msgstr "Error: \"%s\" existente en la Tabla, especificar un nombre diferente." -msgid "Result" -msgstr "Resultado" +#contributors: +msgid "Error: \"%s\" is an invalid variable name. The first character must be alphabetic, and the remaining characters can be either alphanumeric or underscores. For DBF table, a valid variable name is between one and ten characters long." +msgstr "Error: \"%s\" no es un nombre de variable válido. El 1º carácter debe ser alfabético y los restantes pueden ser alfanuméricos o guiones bajos. En una tabla DBF, un nombre válido debe tener entre uno y 10 caracteres de largo." -msgid "Save Duplicate Thiessen Polygons to Table" -msgstr "Guardar Duplicado de Polígonos Thiessen a Tabla" +#contributors: +msgid "Error: \"%s\" not found." +msgstr "Error: \"%s\" no encontrado." -msgid "Equal Intervals Map" -msgstr "Mapa de Intervalos Iguales" +#contributors: +msgid "Error: no records found in data source." +msgstr "Error: no hay registros en la fuente de datos" -msgid "ESRI Personal Geodatabase (*.mdb)|*.mdb" -msgstr "Geodatabase Personal ESRI (*.mdb)|*.mdb" +#contributors: +msgid "Error: the inverse matrix is ill-conditioned." +msgstr "Error: la matriz inversa está mal-condicionada" -msgid "weights:" -msgstr "pesos" +#contributors: +msgid "Estimated Pairs:" +msgstr "" -msgid "Reset to default" -msgstr "Restaurar predeterminado" +#contributors: +msgid "Euclidean Distance" +msgstr "" -msgid "Key" -msgstr "Clave" +#contributors: +msgid "Event Variable" +msgstr "Variable de Eventos" -msgid "Map Movie" -msgstr "Vídeo de Mapa" +#contributors: +msgid "Excess Risk" +msgstr "Riesgo atribuible" -msgid "Selected =" -msgstr "Seleccionados" +#contributors: +msgid "Excess Risk Map Variable Settings" +msgstr "Configuración Variable de Mapa de Riesgo Excesivo" + +#contributors: +msgid "Exclude" +msgstr "Excluir" -msgid "Hinge" -msgstr "Bisagra" +#contributors: +msgid "Existing Variables" +msgstr "Variables Existentes" -msgid "Nokia Satellite" -msgstr "Nokia Satélite" +#contributors: +msgid "Exit" +msgstr "Salir" -msgid "Options" -msgstr "Opciones" +#contributors: +msgid "Exit with unsaved changes?" +msgstr "¿Salir sin guardar cambios?" -msgid "Delete" -msgstr "Eliminar" +#contributors: +msgid "Exit?" +msgstr "¿Salir?" -msgid "Keyhole Markup Language (*.kml)|*.kml" -msgstr "Lenguaje de Marcado Keyhole (*.kml|*.kml" +#contributors: +msgid "Explore" +msgstr "Explorar" -msgid "Copy Image To Clipboard" -msgstr "Copiar Imagen al Portapapeles " +#contributors: +msgid "Export or save layer to" +msgstr "Exportar o guardar capa para" -msgid "Use max knn distance as bandwidth" -msgstr "Usar distancia máx. k-vecinos como ancho banda" +#contributors: +msgid "Exporting Shape to Boundary" +msgstr "Exportar Shape to Boundary" -msgid "Calculator" -msgstr "Calculadora" +#contributors: +msgid "Expression" +msgstr "Expresión" -msgid "Zooming Mode" -msgstr "Modo de Zoom" +#contributors: +msgid "Extent" +msgstr "" -msgid "Models" -msgstr "Modelos" +#contributors: +msgid "Fail in reading the Boundary file: at polygon-%d" +msgstr "Error de lectura del fichero Boundary: en polígono-%d" -msgid "Shape" -msgstr "Formas" +#contributors: +msgid "Failed to create the weights file." +msgstr "Error al crear archivo de pesos." -msgid "Co-location Map" -msgstr "Mapa de Co-localización" +#contributors: +msgid "Failed to open data source. Please check the data/datasource and check if the data type/format is supported by GeoDa.\n\nTip: you can set up the necessary GeoDa driver by following the instructions at:\n http://geodacenter.github.io/formats.html" +msgstr "" -msgid "Select" -msgstr "Seleccionar" +#contributors: +msgid "False Discovery Rate:" +msgstr "Tasa de Falso Descubrimiento" -msgid "Averages Chart" -msgstr "Gráfico de Medias" +#contributors: +msgid "February" +msgstr "" -msgid "Display Axes Scale Values" -msgstr "Mostrar Valores de Escala Ejes " +#contributors: +msgid "Field (%s) already exited." +msgstr "" -msgid "Parallel Coordinate Plot" -msgstr "Gráfico de Coordenadas Paralelas" +#contributors: +msgid "File" +msgstr "Archivo" -msgid "Legend Background Color" -msgstr "Color de Fondo de Leyenda" +#contributors: +msgid "File Path" +msgstr "Ruta del Archivo" -msgid "Choose Intervals" -msgstr "Elegir Intervalos" +#contributors: +msgid "File doesn't exist!" +msgstr "¡Fichero no existente!" -msgid "Central European (CP852)" -msgstr "Centroeuropeo (CP852)" +#contributors: +msgid "File merged into Table successfully." +msgstr "Archivo unido con éxito a la Tabla." -msgid "Y-coordinate" -msgstr "coordenada-Y" +#contributors: +msgid "Fill Color" +msgstr "" -msgid "Display Mean Centers" -msgstr "Mostrar Centros Medios" +#contributors: +msgid "Fill Color for Category" +msgstr "" -msgid "Rates" -msgstr "Tasas" +#contributors: +msgid "Fill Opacity for Category" +msgstr "" -msgid "Decimal:" -msgstr "Decimal:" +#contributors: +msgid "Finished" +msgstr "Terminado" -msgid "Contiguity Weight" -msgstr "Pesos de Contigüidad" +#contributors: +msgid "First Variable (X)" +msgstr "Primera Variable (X)" -msgid "0x03 (dBASE III+)" -msgstr "0x03 (dBASE III+)" +#contributors: +msgid "First Variable (X/Longitude)" +msgstr "Primera Variable (X/Longitud)" -msgid "custom" -msgstr "Personalizado" +#contributors: +msgid "First line of CSV is variable names?" +msgstr "¿Primera Línea de CSV esn nombre de variables?" -msgid "Display Centroids" -msgstr "Mostrar Centroides" +#contributors: +msgid "First row of CSV file" +msgstr "Primera fila de archivo CSV" -msgid "fields:" -msgstr "campos:" +#contributors: +msgid "Fit-To-Window Mode" +msgstr "" -msgid "Save Centroids" -msgstr "Guardar Centroides" +#contributors: +msgid "Fixed Aspect Ratio Mode" +msgstr "Modo Ratio de Aspecto Fijo" -msgid "Gi cluster map, pseudo p-val" -msgstr "Mapa de clústers Gi; pseudo p-val" +#contributors: +msgid "Fixed scale over time" +msgstr "Escala fija en el tiempo" -msgid "Ascending order" -msgstr "Orden ascendente" +#contributors: +msgid "Fixed x-axis scale over time" +msgstr "Escala de eje-x fija en el tiempo" -msgid "No Basemap" -msgstr "Sin Mapa Base" +#contributors: +msgid "Fixed y-axis scale over time" +msgstr "Escala fija del eje-y en el tiempo" -msgid "Map Color Classification" -msgstr "Clasificación Colores Mapa" +#contributors: +msgid "Fourth Variable" +msgstr "Cuarta Variable" -msgid "Edit LOWESS Parameters" -msgstr "Editar Parámetros LOWESS" +#contributors: +msgid "Frequency" +msgstr "Frecuencia" -msgid "Connectivity" -msgstr "Conectividad" +#contributors: +msgid "Full Extent" +msgstr "Ver Todo" -msgid "Use row-standardized weights" -msgstr "Usar pesos estandarizados por filas" +#contributors: +msgid "GAL files (*.gal)|*.gal" +msgstr "Archivos GAL (*.gal)|*.gal" -msgid "Data" -msgstr "Datos" +#contributors: +msgid "GWT files (*.gwt)|*.gwt" +msgstr "Ficheros GWT (*.gwt)|*.gwt" -msgid "Cyrillic (KOI8-R)" -msgstr "Cirílico (KOI8-R)" +#contributors: +msgid "GeoDa Bug Report Dialog" +msgstr "Cuadro de Informes de Errores de GeoDa" -msgid "Database" -msgstr "Base de Datos" +#contributors: +msgid "GeoDa CSV File Configuration" +msgstr "Configuración del Fichero CSV de GeoDa" -msgid "Selection Variable" -msgstr "Variable de Selección" +#contributors: +msgid "GeoDa Help" +msgstr "Ayuda de GeoDa" -msgid "Vertical Bins Breaks" -msgstr "Cortes Intervalos Verticales" +#contributors: +msgid "GeoDa Preference Setup" +msgstr "Preferencias de GeoDa" -msgid "Zoom Out" -msgstr "Zoom -" +#contributors: +msgid "GeoDa Project (*.gda)|*.gda" +msgstr "Proyecto de GeoDa (*.gda)|*.gda" -msgid "Help" -msgstr "Ayuda" +#contributors: +msgid "GeoDa Project File (*.gda)|*.gda" +msgstr "Archivo de Proyecto GeoDa (*.gda)|*.gda" -msgid "Append To Current Selection" -msgstr "Anexar a Selección Actual" +#contributors: +msgid "GeoDa Project File to Open" +msgstr "Abrir Archivo de Proyecto de GeoDa" -msgid "Zoom : press right-mouse button" -msgstr "Zoom: presionar botón derecho del ratón" +#contributors: +msgid "GeoDa Project to Save As" +msgstr "Guardar Como Proyecto de GeoDa" -msgid "Publish to GeoDa-Web" -msgstr "Publicar a la Web de GeoDa" +#contributors: +msgid "GeoDa Update Dialog" +msgstr "Cuadro de Actualización de GeoDa" -msgid "Manual Resize Column" -msgstr "Cambio Ancho Manual de Columna" +#contributors: +msgid "GeoDa can not get valid spatial reference from input data source. Please try another data source." +msgstr "" -msgid "Displayed decimals" -msgstr "Mostrar decimales" +#contributors: +msgid "GeoDa can not open the input data source. Please try another data source." +msgstr "" -msgid "Select from current selection" -msgstr "Seleccionar de selección actual" +#contributors: +msgid "GeoDa can't change the variable type to DATE/TIME. Please select another type." +msgstr "GeoDa no puede cambiar el tipo de variable a FECHA/HORA. Seleccionar otro tipo." -msgid "(Leave empty for undefined values)" -msgstr "Dejar en blanco los valores no seleccionados" +#contributors: +msgid "GeoDa can't create a layer." +msgstr "" -msgid "Variable Settings" -msgstr "Configuración de Variable" +#contributors: +msgid "GeoDa can't load dataset with duplicate field names." +msgstr "" -msgid "Connect" -msgstr "Conectar" +#contributors: +msgid "GeoDa can't read data from datasource. \n\nDetails: Datasource is empty." +msgstr "" -msgid "observation:" -msgstr "observación" +#contributors: +msgid "GeoDa can't save a Table-only data source as a Geometry enabled data source. Please try to add a geometry layer and then use File->Save As." +msgstr "Imposible guardar una fuente de datos con una única Tabla como fuente de datos Geométricos. Intentar añadir capa geométrica y utilizar Fichero->Guardar Como." -msgid "Variables" -msgstr "Variables" +#contributors: +msgid "GeoDa can't save changes to this datasource. Please try to use File->Export." +msgstr "Imposible guardar cambios en esta fuente de datos. Intentar utilizar Archivo->Exportar." -msgid "Geography Markup Language (*.gml)|*.gml" -msgstr "Lenguaje de Marcado Geográfico (*.gml)|*.gml" +#contributors: +msgid "GeoDa cannot find proper projection or geographic coordinate system information to add a basemap. Please update this information (e.g. in .prj file)." +msgstr "GeoDa no puede encontrar la proyección adecuada o la información sobre coordenadas geográficas para añadir al mapa base. Actualizar esta información (p.e. con un archivo .prj)" -msgid "Reset" -msgstr "Borrar" +#contributors: +msgid "GeoDa could not find the required weights file." +msgstr "Geoda no puede encontrar el archivo de pesos" -msgid "Grouped Variables" -msgstr "Variables Agrupadas" +#contributors: +msgid "GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager." +msgstr "" -msgid "3rd Variable (Z)" -msgstr "3ª Variable (Z)" +#contributors: +msgid "GeoDa could not load this layer. Please check if the datasource is valid and not table only." +msgstr "" -msgid "Show Linear Smoother" -msgstr "Mostrar Alisado Lineal" +#contributors: +msgid "GeoDa does not support creating data of %s. Please try to 'Export' to other supported data source format." +msgstr "" -msgid "Full Extent" -msgstr "Ver Todo" +#contributors: +msgid "GeoDa does not support datasource with line data at this time. Please choose a datasource with either point or polygon data." +msgstr "" -msgid "Type 1" -msgstr "Tipo 1" +#contributors: +msgid "GeoDa has run into a problem and will close." +msgstr "GeoDa ha encontrado un problema y se cerrará." -msgid "Animation" -msgstr "Animación" +#contributors: +msgid "GeoDa maj.min.bld (type), day month year" +msgstr "GeoDa maj.min.bld (tipo), día mes año" -msgid "Clusters" -msgstr "Clúster" +#contributors: +msgid "GeoDa was unable to save the file." +msgstr "GeoDa no puede guardar el fichero." + +#contributors: +msgid "GeoJSON (*.geojson;*.json)|*.geojson;*.json" +msgstr "GeoJSON (*.geojson;*,json)|*.geojson;*,json" +#contributors: msgid "GeoJson URL" msgstr "URL de GeoJson" -msgid "Pan" -msgstr "Arrastrar" - -msgid "Power" -msgstr "Potencia" - -msgid "SELECTED" -msgstr "SELECCIONADO" +#contributors: +msgid "GeoPackage (*.gpkg)|*.gpkg" +msgstr "GeoPackage (*.gpkg)|*.gpkg" -msgid "" -"Select whether to use periods or commas as separators in numeric fields. E.g., by default, GeoDa uses commas to\n" -"separate thousands and periods\n" -"for decimals (1,000.00)." -msgstr "Seleccionar si usar puntos o comas como separadores en campos numéricos. P.e., por defecto, GeoDa usa comas para separar miles and puntos para decimales (1,000.00)." +#contributors: +msgid "Geography Markup Language (*.gml)|*.gml" +msgstr "Lenguaje de Marcado Geográfico (*.gml)|*.gml" -msgid "category 1" -msgstr "Categoría 1" +#contributors: +msgid "Geometric centroids" +msgstr "" -msgid "Set Number Separators in Table" -msgstr "Fijar Separadores de Números en Tabla" +#contributors: +msgid "Geometries have been added to existing Table-only data source. Do you want to save them as a new datasource?" +msgstr "" -msgid "Input file (text file)" -msgstr "Abrir archivo (texto)" +#contributors: +msgid "Geometries not saved" +msgstr "Geometrías no guardadas" -msgid "3D Scatter Plot" -msgstr "Diagrama de Dispersión 3D" +#contributors: +msgid "Get a free Carto account: " +msgstr "Obtener una cuenta Carto gratis" -msgid "=" -msgstr "=" +#contributors: +msgid "Get a free GeoDa-Web account: " +msgstr "Obtener una cuenta de GeoDa-Web gratis" -msgid "Time Setup" -msgstr "Asistente de Tiempo" +#contributors: +msgid "Get a free Nokia/HERE account: " +msgstr "Obtener una cuenta gratis de Nokia/HERE" -msgid "App Key" -msgstr "Clave App" +#contributors: +msgid "Getis-Ord" +msgstr "" -msgid "Time Player" -msgstr "Reproductor de Tiempo" +#contributors: +msgid "Gi cluster map, pseudo p-val" +msgstr "Mapa de clústers Gi; pseudo p-val" -msgid "4th Variable" -msgstr "4ª Variable" +#contributors: +msgid "Gi* cluster map, pseudo p-val" +msgstr "Gi* mapa de clústers, pseudo p-val." -msgid "Show Axes Through Origin" -msgstr "Mostrar Ejes sobre el Origen" +#contributors: +msgid "Greedy" +msgstr "" -msgid "User name" -msgstr "Nombre usuario" +#contributors: +msgid "Greek (ISO-8859-7)" +msgstr "Griego (ISO-8859-7)" -msgid "min:" -msgstr "mín." +#contributors: +msgid "Grid Bounding Box" +msgstr "Cuadro Delimitador de Rejilla" -msgid "Queen contiguity" -msgstr "Contigüidad Reina" +#contributors: +msgid "Grid Size" +msgstr "Tamaño de Rejilla" -msgid "About GeoDa" -msgstr "Acerca de GeoDa" +#contributors: +msgid "Grid file was successfully created." +msgstr "Archivo de rejilla creado con éxito." -msgid "Bivariate Local Join Count" -msgstr "Join Count Local Bivariante" +#contributors: +msgid "Group" +msgstr "" -msgid "max:" -msgstr "máx." +#contributors: +msgid "Group 1:" +msgstr "Grupo 1:" -msgid "Fixed scale over time" -msgstr "Escala fija en el tiempo" +#contributors: +msgid "Group 2:" +msgstr "Grupo 2:" -msgid "Greek (ISO-8859-7)" -msgstr "Griego (ISO-8859-7)" +#contributors: +msgid "Group Variable:" +msgstr "" -msgid "Change Edge Thickness" -msgstr "Cambiar Grosor del Borde" +#contributors: +msgid "Grouped Variables" +msgstr "Variables Agrupadas" -msgid "Set Display Precision on Axes" -msgstr "Mostrar Pantalla de Precisión de Ejes" +#contributors: +msgid "Groups:" +msgstr "Grupos:" -msgid "Fixed Aspect Ratio Mode" -msgstr "Modo Ratio de Aspecto Fijo" +#contributors: +msgid "HDBScan" +msgstr "" -msgid "Event Variable" -msgstr "Variable de Eventos" +#contributors: +msgid "HDBScan Cluster Map (%d clusters)" +msgstr "" -msgid "Add Variable" -msgstr "Añadir Variable" +#contributors: +msgid "HDBScan Clustering Settings" +msgstr "" -msgid "Show Graph" -msgstr "Mostrar Grafo" +#contributors: +msgid "HERE App ID" +msgstr "" -msgid "Save to File" -msgstr "Guardar en Archivo" +#contributors: +msgid "HERE App Key" +msgstr "" -msgid "Spectral" -msgstr "Espectral" +#contributors: +msgid "Has Colocation" +msgstr "Tiene colocación" -msgid "Web" -msgstr "Web" +#contributors: +msgid "Hebrew (ISO-8859-8-1)" +msgstr "Hebreo (ISO-8859-8-1)" -msgid "Data Source Overview/Help: " -msgstr "Revisión Fuente de Datos/Ayuda" +#contributors: +msgid "Hebrew (Windows-1255)" +msgstr "Hebreo (Windows-1255)" -msgid "Save Selected As" -msgstr "Guardar Selección como" +#contributors: +msgid "Height:" +msgstr "Height:" -msgid "Covariates" -msgstr "Explicativas" +#contributors: +msgid "Help" +msgstr "Ayuda" -msgid "Nokia Hybrid" -msgstr "Nokia Híbrido" +#contributors: +msgid "Hide Map" +msgstr "Ocultar Mapa" -msgid "Significance Map" -msgstr "Mapa de Significación" +#contributors: +msgid "Hide system table in Postgresql connection:" +msgstr "Ocultar tabla de sistema en conexión de Postgresql:" -msgid "Target Variable" -msgstr "Variable Objetivo" +#contributors: +msgid "Hide system table in SQLITE connection:" +msgstr "Ocultar tabla de sistema en conexión SQLITE:" -msgid "New From Recent" -msgstr "Nuevo desde Reciente" +#contributors: +msgid "Hierachical Map does not work with Table only datasource." +msgstr "" -msgid "Local Moran's I with EB Rate" -msgstr "I de Moran Local con Tasas EB" +#contributors: +msgid "Hierachical Map: " +msgstr "" -msgid "Moran Scatter Plot" -msgstr "Diagrama de Dispersión de Moran" +#contributors: +msgid "Hierarchical" +msgstr "Jerárquico" -msgid "POLY&ID" -msgstr "POLY&ID" +#contributors: +msgid "Hierarchical Clustering Settings" +msgstr "Configuración Clúster Jerárquico" -msgid "Exporting Shape to Boundary" -msgstr "Exportar Shape to Boundary" +#contributors: +msgid "Hierarchical Map" +msgstr "" -msgid "GeoDa Project File (*.gda)|*.gda" -msgstr "Archivo de Proyecto GeoDa (*.gda)|*.gda" +#contributors: +msgid "High" +msgstr "Alto" -msgid "Cluster Maps" -msgstr "Mapas de Clústers" +#contributors: +msgid "High-High" +msgstr "Alto-Alto" -msgid "Grid Bounding Box" -msgstr "Cuadro Delimitador de Rejilla" +#contributors: +msgid "High-Low" +msgstr "Alto-Bajo" -msgid "Percentile" -msgstr "Percentiles" +#contributors: +msgid "Highlight Color" +msgstr "Destacar Color" -msgid "Spatial Empirical Bayes" -msgstr "Empírico Bayes Espacial" +#contributors: +msgid "Hinge" +msgstr "Bisagra" -msgid "Create Custom Breaks" -msgstr "Crear Cortes Personalizados" +#contributors: +msgid "Hinge=1.5" +msgstr "Bisagra=1.5" -msgid "Linear Smoother" -msgstr "Alisado Lineal" +#contributors: +msgid "Hinge=3.0" +msgstr "Bisagra=3.0" -msgid "Carto Light" -msgstr "Carto Claro" +#contributors: +msgid "Histogram" +msgstr "Histograma" -msgid "show normal distribution p-val maps" -msgstr "Mostrar mapas de p-val. de distribución normal" +#contributors: +msgid "Histogram Classification" +msgstr "Clasificación Histograma" -msgid "Thousands:" -msgstr "Miles" +#contributors: +msgid "Histogram Variable" +msgstr "Variable de Histograma" -msgid "Box Map (Hinge=3.0)" -msgstr "Mapa de Caja (Bisagra=3.0)" +#contributors: +msgid "Histogram: " +msgstr "Histograma: " -msgid "Automatic Labels" -msgstr "Etiquetas Automáticas" +#contributors: +msgid "Horizontal Bins Breaks" +msgstr "Cortes Intervalos Horizontales" -msgid "Produce bounding-box file?" -msgstr "¿Crear archivo de cuadro delimitador?" +#contributors: +msgid "Horizontal Cells" +msgstr "Celdas Horizontales" -msgid "Vietnamese (Windows-1258)" -msgstr "Vietnamita (Windows-1258)" +#contributors: +msgid "Http connection timeout (seconds) for e.g. WFS, Geojson etc.:" +msgstr "Conexión http terminada (segundos) para p.e. WFS, Geojson, etc.:" -msgid "Display" -msgstr "Mostrar" +#contributors: +msgid "ID is not specified!" +msgstr "ID no especificado" -msgid "Project to Z-Y" -msgstr "Proyectar a Z-Y" +#contributors: +msgid "Image Dimension Settings" +msgstr "" -msgid "Insert before" -msgstr "Insertar antes" +#contributors: +msgid "Improve Cartogram" +msgstr "Mejorar Cartograma" -msgid "Get a free Carto account: " -msgstr "Obtener una cuenta Carto gratis" +#contributors: +msgid "Include" +msgstr "Incluir" -msgid "Equal Intervals" -msgstr "Intervalos Iguales" +#contributors: +msgid "Include Variable Names" +msgstr "Incluir Nombres de Variables" -msgid "Output file (*.shp)" -msgstr "Arhivo de Resultados (*.shp)" +#contributors: +msgid "Include diagonal of weights matrix" +msgstr "Incluir diagonal de matriz de pesos" -msgid "Set Number of Permutation" -msgstr "Fijar Número de Permutaciones" +#contributors: +msgid "Include lower orders" +msgstr "Incluir órdenes inferiores" -msgid "Convert Boundary to Shape Datasource" -msgstr "Convertir Boundary a Fuente de Datos Shape" +#contributors: +msgid "Incomplete Group Variable" +msgstr "" -msgid "Dependent Variable" -msgstr "Variable dependiente" +#contributors: +msgid "Independent Var (x-axis)" +msgstr "Var. Independiente (eje-x)" -msgid "Central European (Windows-1250)" -msgstr "Centroeuropeo (Windows-1250)" +#contributors: +msgid "Independent Var X" +msgstr "Var X Independiente" -msgid "Cluster Map " -msgstr "Mapa de Clústers" +#contributors: +msgid "Inference Settings" +msgstr "Configuración de Inferencia" -msgid "White Test" -msgstr "Test de White" +#contributors: +msgid "Inference Settings (%d perm)" +msgstr "Configuración Inferencia (%d perm)" -msgid "Copyright (C) year-year by Luc Anselin" -msgstr "Copyright (C) año-año por Luc Anselin" +#contributors: +msgid "Info" +msgstr "Info" -msgid "Create" -msgstr "Crear" +#contributors: +msgid "Information" +msgstr "Información" -msgid "K Medoids" -msgstr "K Medoids" +#contributors: +msgid "Initial Groups:" +msgstr "Grupos Iniciales:" -msgid "Regression" -msgstr "Regresión" +#contributors: +msgid "Initial groups:\t" +msgstr "" -msgid "Show As Conditional Map" -msgstr "Mostrar como Mapa Condicional" +#contributors: +msgid "Initialization Method:" +msgstr "Método de inicialización:" -msgid "New datasource:" -msgstr "Nueva fuente de datos" +#contributors: +msgid "Initialization Re-runs:" +msgstr "Iniciando repeticiones:" -msgid "Precision threshold" -msgstr "Precisión umbral" +#contributors: +msgid "Initialization method:\t" +msgstr "" + +#contributors: +msgid "Initialization re-runs:\t" +msgstr "" -msgid "User Defined" -msgstr "Definido por Usuario" +#contributors: +msgid "Input" +msgstr "Abrir" -msgid "Project to X-Y" -msgstr "Proyectar a X-Y" +#contributors: +msgid "Input ASCII file" +msgstr "Introducir archivo ASCII" -msgid "Include" -msgstr "Incluir" +#contributors: +msgid "Input data source" +msgstr "" -msgid "Run" -msgstr "Ejecutar" +#contributors: +msgid "Input datasource" +msgstr "Fuente de Datos de Entrada" -msgid "show normal distribution p-val map" -msgstr "Mostrar mapa de p-val. de distribución normal" +#contributors: +msgid "Input file " +msgstr "Abrir Archivo" -msgid "Breaks" -msgstr "Cortes" +#contributors: +msgid "Input file (text file)" +msgstr "Abrir archivo (texto)" -msgid "K-Nearest neighbors" -msgstr "K-vecinos Más Cercanos" +#contributors: +msgid "Input is duplicated." +msgstr "Entrada duplicada." -msgid "Hierarchical" -msgstr "Jerárquico" +#contributors: +msgid "Input is not valid." +msgstr "Entrada no válida" -msgid "Aggregate" -msgstr "Agregar" +#contributors: +msgid "Input is required" +msgstr "Se necesita una Entrada" -msgid "Select Neighborless Observations" -msgstr "Seleccionar Observaciones sin Vecinos" +#contributors: +msgid "Input significance:" +msgstr "Introducir significación:" -msgid "Natural Breaks" -msgstr "Cortes Naturales" +#contributors: +msgid "Input:" +msgstr "Entrada:" -msgid "Target" -msgstr "Objetivo" +#contributors: +msgid "Insert before" +msgstr "Insertar antes" -msgid "Weights" -msgstr "pesos" +#contributors: +msgid "Insufficient Random Sampling" +msgstr "Muestreo Aleatorio insuficiente" -msgid "Length (max 254)" -msgstr "Tamaño (máx. 254)" +#contributors: +msgid "Internal Error: Add new field (%s) failed.\n\nDetails:%s" +msgstr "" -msgid "Exclude" -msgstr "Excluir" +#contributors: +msgid "Internal Error: Delete field failed.\n\nDetails:" +msgstr "" -msgid "Load time definition from project file." -msgstr "Cargar definición temporal de archivo de proyecto" +#contributors: +msgid "Internal Error: can't update an in-memory cell." +msgstr "Error Interno: no puede actualizar una celda en memoria" -msgid "Delete Variable(s)" -msgstr "Eliminar Variable(s)" +#contributors: +msgid "Intervals" +msgstr "Intervalos" +#contributors: msgid "Intervals in the Histogram" msgstr "Intervalos en el Histograma" -msgid "Cancel" -msgstr "Cancelar" +#contributors: +msgid "Invalid Variable" +msgstr "Variable no Válida" -msgid "Get a free GeoDa-Web account: " -msgstr "Obtener una cuenta de GeoDa-Web gratis" +#contributors: +msgid "Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager to define a valid weights file." +msgstr "" -msgid "Quantile Map" -msgstr "Mapa de Cuantiles" +#contributors: +msgid "Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file." +msgstr "" -msgid "Bubble Chart" -msgstr "Gráfico de Burbujas" +#contributors: +msgid "Invalid layer association has been detected, which will cause infinite highlighting loop. Please try to reset highlight association between layers." +msgstr "" -msgid "File" -msgstr "Archivo" +#contributors: +msgid "Invert Select" +msgstr "Invertir Selección" -msgid "Yes" -msgstr "Sí" +#contributors: +msgid "Invert Selection" +msgstr "Invertir Selección" -msgid "Significance Filter" +#contributors: +msgid "It looks like GeoDa has been terminated abnormally. \nDo you want to send a crash report to GeoDa team? \n\n(Optional) Please leave your email address,\nso we can send a follow-up email once we have a fix." msgstr "" -msgid "Table" -msgstr "Tabla" - -msgid "using row-standardized weights" -msgstr "usando pesos estandarizados por filas" - -msgid "Cartogram" -msgstr "Cartograma" +#contributors: +msgid "Iterations:" +msgstr "Iteraciones:" -msgid "Assign To Target" +#contributors: +msgid "January" msgstr "" -msgid "Displayed decimal places" -msgstr "Mostrar lugares decimales" +#contributors: +msgid "Japanese (EUC-JP)" +msgstr "Japonés (EUC-JP)" -msgid "Clear Selection" -msgstr "Borrar Selección" +#contributors: +msgid "Japanese (Shift&JIS)" +msgstr "Japonés (Shift&JIS)" -msgid "Edit Variable Properties" -msgstr "Editar Propiedades de Variables" +#contributors: +msgid "Japanese (Shift_JIS)" +msgstr "" -msgid "Adaptive kernel" -msgstr "Kernel adaptativo" +#contributors: +msgid "Join Operation:" +msgstr "" -msgid "Themeless Map" -msgstr "Mapa de un Color" +#contributors: +msgid "Join Variable:" +msgstr "" -msgid "Fit-To-Window Mode" +#contributors: +msgid "July" msgstr "" +#contributors: +msgid "June" +msgstr "" + +#contributors: +msgid "K Means" +msgstr "K Means" + +#contributors: msgid "K Medians" msgstr "K Medians" -msgid "Adjust Value Range of Y-Axis" -msgstr "Ajustar Rango de Valores al Eje Y" +#contributors: +msgid "K Medoids" +msgstr "K Medoids" -msgid "Rectangle" -msgstr "Rectángulo" +#contributors: +msgid "K-Nearest neighbors" +msgstr "K-vecinos Más Cercanos" -msgid "Adjust Value Range of Y Axis" -msgstr "Ajustar Rango de Valores al Eje Y" +#contributors: +msgid "KMeans Clustering Settings" +msgstr "" -msgid "GeoDa could not find the required weights file." -msgstr "Geoda no puede encontrar el archivo de pesos" +#contributors: +msgid "KMedians Clustering Settings" +msgstr "" -msgid "Base Map " -msgstr "Mapa Base" +#contributors: +msgid "KMedoids Clustering Settings" +msgstr "" -msgid "Coeff. Var. Mat." -msgstr "Mat. Var. Coef." +#contributors: +msgid "KWT files (*.kwt)|*.kwt" +msgstr "Ficheros KWT (*.kwt)|*.kwt" -msgid "Spatial Error" -msgstr "Error Espacial" +#contributors: +msgid "Kernel function" +msgstr "Función Kernel" -msgid "Highlight Color" -msgstr "Destacar Color" +#contributors: +msgid "Key" +msgstr "Clave" -msgid "Thiessen Polygons" -msgstr "Polígonos Thiessen" +#contributors: +msgid "Keyhole Markup Language (*.kml)|*.kml" +msgstr "Lenguaje de Marcado Keyhole (*.kml|*.kml" -msgid "Box Plot" -msgstr "Diagrama de Caja" +#contributors: +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" -msgid "Output file (text file)" -msgstr "Archivo de resultados (texto)" +#contributors: +msgid "LISA" +msgstr "" -msgid "Type 2" -msgstr "Tipo 2" +#contributors: +msgid "LOWESS Smoother" +msgstr "Alisado LOWESS" -msgid "Change Fill Color of Neighbors" -msgstr "Cambiar Color de Relleno de Vecinos" +#contributors: +msgid "LOWESS Smoother Help" +msgstr "Ayuda de Alisado LOWESS" -msgid "New selection" -msgstr "Nueva Selección" +#contributors: +msgid "LOWESS Smoother Parameters" +msgstr "Parámetros de Alisado LOWESS" -msgid "Assign Values to Currently Selected / Unselected" -msgstr "Asignar Valores a Actual Selección / No Selección" +#contributors: +msgid "Language" +msgstr "Idioma" -msgid "Show Selection and Neighbors" -msgstr "Mostrar Selección y Vecinos" +#contributors: +msgid "Language:" +msgstr "Idioma:" -msgid "to define weights." -msgstr "pendiente definición de pesos." +#contributors: +msgid "Latitude/Y:" +msgstr "" -msgid "Connect to Data Source" -msgstr "Conectarse a la fuente de datos" +#contributors: +msgid "Layer names" +msgstr "Nombres de capa" -msgid "K Means" -msgstr "K Means" +#contributors: +msgid "Left" +msgstr "" -msgid "X-coord" -msgstr "Coord-X" +#contributors: +msgid "Legend Background Color" +msgstr "Color de Fondo de Leyenda" -msgid "value" -msgstr "Valor" +#contributors: +msgid "Length (max 254)" +msgstr "Tamaño (máx. 254)" -msgid "Show LOWESS Smoother" -msgstr "Mostrar Alisado LOWESS" +#contributors: +msgid "Light" +msgstr "Fino" -msgid "row-standardized" -msgstr "estandarizada por filas" +#contributors: +msgid "Limited date/time type recognition can be done for Date (YYYY-MM-DD), Time (HH:MM:SS+nn) and DateTime (YYYY-MM-DD HH:MM:SS+nn) in configuration.\n\nPlease try to load customized date/time type as string and covert it using Table->Edit Variable Property" +msgstr "" -msgid "Stable Version and Bug Fixes Only" -msgstr "Versión Estable y Sólo Corrección de Errores" +#contributors: +msgid "Line" +msgstr "Línea" -msgid "import table key" -msgstr "Clave de tabla importada" +#contributors: +msgid "Linear Smoother" +msgstr "Alisado Lineal" -msgid "Open" -msgstr "Abrir" +#contributors: +msgid "List of existing ungrouped variables. To group variables by time, move them to the list on the right.\n\nFor example, to group Pop80 and Pop90, select them on the left and move them to the right." +msgstr "" + +#contributors: +msgid "Load" +msgstr "" + +#contributors: +msgid "Load CRS from a data source" +msgstr "" + +#contributors: +msgid "Load Layer Failed." +msgstr "" + +#contributors: +msgid "Load time definition from project file." +msgstr "Cargar definición temporal de archivo de proyecto" + +#contributors: +msgid "Loading data..." +msgstr "Cargando datos..." +#contributors: msgid "Local G" msgstr "G Local" -msgid "Upper-right corner" -msgstr "Esquina superior derecha" +#contributors: +msgid "Local G Maps" +msgstr "Mapas Locales G" -msgid "Save to Table" -msgstr "Guardar en Tabla" +#contributors: +msgid "Local G Statistics Maps" +msgstr "Mapas de Estadísticos G Locales" -msgid "Spatial Rate" -msgstr "Tasa Espacial" +#contributors: +msgid "Local G*" +msgstr "G* Local" + +#contributors: +msgid "Local Geary" +msgstr "" + +#contributors: +msgid "Local Geary Maps" +msgstr "Mapas Geary Local" + +#contributors: +msgid "Local Join Count " +msgstr "" + +#contributors: +msgid "Local Moran's I Maps" +msgstr "Mapas del I de Moran Local" + +#contributors: +msgid "Local Moran's I with EB Rate" +msgstr "I de Moran Local con Tasas EB" + +#contributors: +msgid "Local Search:" +msgstr "Búsqueda Local" -msgid "Korean (EUC-KR)" -msgstr "Coreano (EUC-KR)" +#contributors: +msgid "Local search:" +msgstr "" -msgid "Randomization" -msgstr "Aleatorización" +#contributors: +msgid "Locale for numbers has been setup successfully. Please re-open current project to enable this locale." +msgstr "Realizada con éxito la configuración local numérica. Reabrir el proyecto actual para activar esta configuración." -msgid "Carto" -msgstr "Carto" +#contributors: +msgid "Loop" +msgstr "Bucle" -msgid "Input datasource" -msgstr "Fuente de Datos de Entrada" +#contributors: +msgid "Low" +msgstr "Bajo" -msgid "Max value of Y axis" -msgstr "Valor Máx. del eje Y" +#contributors: +msgid "Low-High" +msgstr "Bajo-Alto" -msgid "binary" -msgstr "binario" +#contributors: +msgid "Low-Low" +msgstr "Bajo-Bajo" -msgid "Regression Line Color" -msgstr "Color Línea de Regresión" +#contributors: +msgid "Lower outlier" +msgstr "Atípico superior" -msgid "Basemap Configuration" -msgstr "Configuración de Mapa Base" +#contributors: +msgid "Lower-left corner" +msgstr "Esquina inferior izquierda" -msgid "Univariate Moran's I" -msgstr "I de Morán Univariante" +#contributors: +msgid "MDS" +msgstr "MDS" -msgid "Variable / Constant" -msgstr "Variable / Constante" +#contributors: +msgid "MDS Plot" +msgstr "Gráfico MDS" -msgid "1st Variable (X)" -msgstr "1ª Variable (X)" +#contributors: +msgid "MDS Plot - " +msgstr "Gráfico MDS - " -msgid "Resize" -msgstr "Redimensionar" +#contributors: +msgid "MDS Settings" +msgstr "Configuración MDS" -msgid "Set Display Precision" -msgstr "Fijar Pantalla de Precisión" +#contributors: +msgid "MS Excel (*.xls)|*.xls" +msgstr "MS Excel (*.xls)|*.xls" -msgid "ESRI Shapefile (*.shp)|*.shp" -msgstr "Archivo ESRI (*.shp)|*.shp" +#contributors: +msgid "Make selection from expression " +msgstr "Realizar selección de la expresión" + +#contributors: +msgid "Manual Resize Column" +msgstr "Cambio Ancho Manual de Columna" +#contributors: msgid "Map" msgstr "Mapa" -msgid "Unselected =" -msgstr "No Seleccionados" +#contributors: +msgid "Map Color Classification" +msgstr "Clasificación Colores Mapa" -msgid "Y" -msgstr "y" +#contributors: +msgid "Map Layer Settings" +msgstr "" -msgid "All Rights Reserved" -msgstr "Todos los Derechos Reservados" +#contributors: +msgid "Map Layout Preview" +msgstr "Map Layout Preview" -msgid "Min value of Y axis" -msgstr "Valor mín. del eje Y" +#contributors: +msgid "Map Movie" +msgstr "Vídeo de Mapa" -msgid "Select All..." -msgstr "Seleccionar Todo..." +#contributors: +msgid "Map Theme" +msgstr "Tema de Mapa" -msgid "Scatter Plot" -msgstr "Diagrama de Dispersión" +#contributors: +msgid "Map Themes" +msgstr "Temas de Mapa" -msgid "Selection Mode" -msgstr "Modo de Selección" +#contributors: +msgid "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" +msgstr "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" -msgid "Multivariate Local Geary" -msgstr "Geary Local Multivariante" +#contributors: +msgid "Maps To Open" +msgstr "Mapas para Abrir" -msgid "Save Image As" -msgstr "Guardar Imagen Como" +#contributors: +msgid "Maps and Rates" +msgstr "Mapas y Tasas" -msgid "Points from Table" -msgstr "Puntos de una Tabla" +#contributors: +msgid "Maps:" +msgstr "Mapas:" -msgid "Add Neighbors To Selection" -msgstr "Añadir Vecinos a Selección" +#contributors: +msgid "March" +msgstr "" -msgid "Rename Variable" -msgstr "Renombrar Variable" +#contributors: +msgid "Max" +msgstr "Máx." -msgid "Variable Name" -msgstr "Nombre de la Variable" +#contributors: +msgid "Max Distance:" +msgstr "" -msgid "show significance maps" -msgstr "Mostrar mapas de significación" +#contributors: +msgid "Max value of Y axis" +msgstr "Valor Máx. del eje Y" -msgid "Bivariate Local Moran's I" -msgstr "I de Moran Local Bivariante" +#contributors: +msgid "Max-p Settings" +msgstr "Configuración MaxP" -msgid "Invert Select" -msgstr "Invertir Selección" +#contributors: +msgid "Maximum # of regions:" +msgstr "Máximo nº de regiones:" -msgid "X-coordinate" -msgstr "coordenada-X" +#contributors: +msgid "Maximum Iterations:" +msgstr "Iteraciones máximas:" -msgid "X Variable" -msgstr "Variable X" +#contributors: +msgid "Maximum iterations:\t" +msgstr "" -msgid "Variable Setting" -msgstr "Configuración de Variable" +#contributors: +msgid "May" +msgstr "" -msgid "Invert Selection" -msgstr "Invertir Selección" +#contributors: +msgid "Mean" +msgstr "" -msgid "Project to X-Z" -msgstr "Proyectar a X-Z" +#contributors: +msgid "Merge" +msgstr "Combinar" -msgid "Custom Breaks" -msgstr "Cortes Personalizados" +#contributors: +msgid "Merge - " +msgstr "Unir - " -msgid "Specify bandwidth" -msgstr "Especificar ancho de banda" +#contributors: +msgid "Merge by key values" +msgstr "Combinar por valores clave" -msgid "Selectable Fill Color" -msgstr "Seleccionable Color de Relleno" +#contributors: +msgid "Merge by record order" +msgstr "Combinar por orden de registros" -msgid "Make selection from expression " -msgstr "Realizar selección de la expresión" +#contributors: +msgid "Merge error: Geometric type of selected datasource has to be the same with current datasource." +msgstr "Error de anexión: el tipo de geometría de la fuente de datos seleccionada y la activa debe ser la misma." -msgid "Kernel function" -msgstr "Función Kernel" +#contributors: +msgid "Message area" +msgstr "Ãrea de Mensajes" -msgid "Point Color" -msgstr "Color de Puntos" +#contributors: +msgid "Meta-data" +msgstr "" -msgid "Display Statistics" -msgstr "Mostrar Estadísticos" +#contributors: +msgid "Method" +msgstr "Método" -msgid "Local G*" -msgstr "G* Local" +#contributors: +msgid "Method of selecting clusters:" +msgstr "" -msgid "Save Results" -msgstr "Guardar Resultados" +#contributors: +msgid "Method:" +msgstr "Método:" -msgid "Unique Values" -msgstr "Valores Individuales" +#contributors: +msgid "Method:\t" +msgstr "" -msgid "Clean Basemap Cache" -msgstr "Borrar Mapa Base de Caché" +#contributors: +msgid "Min" +msgstr "Mín." -msgid "Add ID Variable..." -msgstr "Añadir Variable ID" +#contributors: +msgid "Min # per Region:" +msgstr "Mín. nº por Región:" -msgid "Input file " -msgstr "Abrir Archivo" +#contributors: +msgid "Min Region Size:" +msgstr "Mín. Tamaño Región" -msgid "Create New Custom" -msgstr "Crear Nuevo Personalizado" +#contributors: +msgid "Min cluster size:" +msgstr "" -msgid "Japanese (EUC-JP)" -msgstr "Japonés (EUC-JP)" +#contributors: +msgid "Min samples:" +msgstr "" -msgid "Japanese (Shift&JIS)" -msgstr "Japonés (Shift&JIS)" +#contributors: +msgid "Min value of Y axis" +msgstr "Valor mín. del eje Y" -msgid "Welcome to GeoDa 1.8.16" -msgstr "Bienvenidos a GeoDa 1.8.16" +#contributors: +msgid "Minimum Bound:" +msgstr "Valor Cota Mín." -msgid "Column Number (from 0)" -msgstr "Número de Columna (desde 0)" +#contributors: +msgid "Minimum bound:\t" +msgstr "" -msgid "Add/Remove Variables" -msgstr "Añadir/Eliminar Variables" +#contributors: +msgid "Minimum cluster size should be greater than one." +msgstr "" -msgid "OK" -msgstr "Aceptar" +#contributors: +msgid "Minimum region size:\t" +msgstr "" -msgid "Open Project" -msgstr "Abrir Proyecto" +#contributors: +msgid "Minimum samples should be greater than zero." +msgstr "" -msgid "Save Space-Time Table/Weights" -msgstr "Guardar Tabla Espacio-Tiempo/pesos" +#contributors: +msgid "Models" +msgstr "Modelos" -msgid "Add Centroids to Table" -msgstr "Añadir Centroides a Tabla" +#contributors: +msgid "Moran Scatter Plot" +msgstr "Diagrama de Dispersión de Moran" -msgid "Create a project file?" -msgstr "¿Crear un archivo de proyecto?" +#contributors: +msgid "Moran scatter plot is not supported when isolates are present in weights. Do you want to continue by removing the isolates when compute Moran's I?" +msgstr "" -msgid "Distance Weight" -msgstr "Pesos de Distancias" +#contributors: +msgid "Moran's I (%s): %s" +msgstr "I de Moran (%s): %s" -msgid "5 of 5 variables needed" -msgstr "5 de 5 variables necesitadas" +#contributors: +msgid "Moran's I with EB Rate" +msgstr "I de Moran con Tasa EB" -msgid "Parameters" -msgstr "Parámetros" +#contributors: +msgid "Move Down" +msgstr "Abajo" -msgid "Show Status Bar" -msgstr "Mostrar Barra de Estado" +#contributors: +msgid "Move Selected to Top" +msgstr "Mover Seleccionados Arriba" -msgid "Apply kernel to diagonal weights" -msgstr "Aplicar kernel a pesos diagonal" +#contributors: +msgid "Move Up" +msgstr "Arriba" -msgid "Sum" -msgstr "Suma" +#contributors: +msgid "Multi-Variable Settings" +msgstr "Configuración Multi-Variable" + +#contributors: +msgid "Multivariate Local Geary" +msgstr "Geary Local Multivariante" + +#contributors: +msgid "Name" +msgstr "Nombre" + +#contributors: +msgid "Natural Breaks" +msgstr "Cortes Naturales" + +#contributors: +msgid "Natural Breaks Map" +msgstr "Mapa de Cortes Naturales" -msgid "Gi* cluster map, pseudo p-val" -msgstr "Gi* mapa de clústers, pseudo p-val." +#contributors: +msgid "Negative" +msgstr "Negativo" -msgid "X" -msgstr "X" +#contributors: +msgid "Neighborless" +msgstr "Sin vecinos" -msgid "Input" -msgstr "Abrir" +#contributors: +msgid "Neighbors of Cores" +msgstr "Vecinos y Centros" +#contributors: msgid "New" msgstr "Nuevo" -msgid "Name" -msgstr "Nombre" +#contributors: +msgid "New Categories Title" +msgstr "Título de Nueva Categoría" -msgid "Cores and Neighbors" -msgstr "Centros y Vecinos" +#contributors: +msgid "New Custom Categories Title:" +msgstr "Nuevo Título de Categorías Personalizado" -msgid "month:" -msgstr "mes:" +#contributors: +msgid "New From Recent" +msgstr "Nuevo desde Reciente" -msgid "version:" -msgstr "versión:" +#contributors: +msgid "New Group Details" +msgstr "Nombrar Nuevo Grupo" -msgid "Category Editor" -msgstr "Editor de Categorías" +#contributors: +msgid "New Map Coordinates" +msgstr "Nuevo Mapa de Coordenadas" -msgid "6 Iteration" -msgstr "Iteración 6" +#contributors: +msgid "New Project Filename" +msgstr "Nuevo Nombre de Proyecto" -msgid "Method" -msgstr "Método" +#contributors: +msgid "New Selection" +msgstr "Nueva Selección" -msgid "Include lower orders" -msgstr "Incluir órdenes inferiores" +#contributors: +msgid "New datasource:" +msgstr "Nueva fuente de datos" -msgid "Type 1a" -msgstr "Tipo 1a" +#contributors: +msgid "New project file:" +msgstr "Nuevo archivo de proyecto" -msgid "Select, hold CTRL for brushing" -msgstr "Seleccionar, mantener CTRL para brushing" +#contributors: +msgid "New selection" +msgstr "Nueva Selección" -msgid "X-coordinate variable" -msgstr "Variable coordenada-X" +#contributors: +msgid "New space-time variable name" +msgstr "Nuevo nombre de variable espacio-temporal" -msgid "Preferences..." -msgstr "Preferencias..." +#contributors: +msgid "New variable name" +msgstr "Nuevo nombre de variable" -msgid "Percentile Map" -msgstr "Mapa de Percentiles" +#contributors: +msgid "No Basemap" +msgstr "Sin Mapa Base" -msgid "Use existing field name" -msgstr "Usar nombre existente de campo" +#contributors: +msgid "No Colocation" +msgstr "Sin colocación" -msgid "MS Excel (*.xls)|*.xls" -msgstr "MS Excel (*.xls)|*.xls" +#contributors: +msgid "No Weights Found" +msgstr "No se encontraron Pesos" -msgid "999 Permutations" -msgstr "999 Permutaciones" +#contributors: +msgid "No clusters can be found using current parameters." +msgstr "" -msgid "Cores" -msgstr "Centros" +#contributors: +msgid "No field chosen for first and second variable." +msgstr "" -msgid "Weights File Creation" -msgstr "Creación Archivo de Pesos" +#contributors: +msgid "No field chosen for first variable." +msgstr "" -msgid "Color Scheme" -msgstr "Paleta de Colores" +#contributors: +msgid "No field chosen for fourth variable." +msgstr "" -msgid "Loop" -msgstr "Bucle" +#contributors: +msgid "No field chosen for second variable." +msgstr "" -msgid "Please click to choose a highlighting style in GeoDa:" -msgstr "Haga click para elegir un estilo de resaltado en GeoDa" +#contributors: +msgid "No field chosen for third variable." +msgstr "" -msgid "Weights File" -msgstr "Fichero de pesos" +#contributors: +msgid "No layer has been selected. Please select a layer." +msgstr "No se ha seleccionado ninguna capa. Seleccionar capa" -msgid "Weight" -msgstr "Pesos" +#contributors: +msgid "No layer was found in the selected data source." +msgstr "Capa no encontrada en la fuente de datos seleccionada" -msgid "Display Slope Values" -msgstr "Mostrar Valores de Pendiente" +#contributors: +msgid "No layer was found in this datasource." +msgstr "" -msgid "max-p" -msgstr "MaxP" +#contributors: +msgid "No numeric variables found in table." +msgstr "No hay variables numéricas en la tabla." -msgid "What windows to open?" -msgstr "Qué ventana abrir" +#contributors: +msgid "No numeric variables found." +msgstr "" -msgid "Get a free Nokia/HERE account: " -msgstr "Obtener una cuenta gratis de Nokia/HERE" +#contributors: +msgid "No rates currently calculated to save." +msgstr "No hay tasas calculadas para guardar." -msgid "Merge" -msgstr "Combinar" +#contributors: +msgid "No update required" +msgstr "Ninguna actualización necesaria" -msgid "First line of CSV is variable names?" -msgstr "¿Primera Línea de CSV esn nombre de variables?" +#contributors: +msgid "No weights file was created due to all observations being isolates for the specified threshold value. Increase the threshold to create a non-empty weights file." +msgstr "No se creó el archivo de pesos porque todas las observaciones están aisladas para el valor umbral especificado. Aumente el umbral para crear un archivo de pesos no vacío" -msgid "5 Iteration" -msgstr "Iteración 5" +#contributors: +msgid "None of your observations have neighbors. This could be related to digitizing problems, which can be fixed by adjusting the precision threshold." +msgstr "Ninguna de las observaciones tiene vecinos. Esto podría deberse a problemas de digitalización, que podrían resolverse ajustando el umbral de precisión." -msgid "Cumulative" -msgstr "Acumulado" +#contributors: +msgid "Nordic Latin-6 (ISO-8859-10)" +msgstr "Nórdico Latín-6 (ISO-8859-10)" -msgid "Existing Variables" -msgstr "Variables Existentes" +#contributors: +msgid "Normal" +msgstr "Normal" -msgid "Move Selected to Top" -msgstr "Mover Seleccionados Arriba" +#contributors: +msgid "Not Clustered" +msgstr "" -msgid "Add" -msgstr "Añadir" +#contributors: +msgid "Not Significant" +msgstr "No Significativo" -msgid "Statistics" -msgstr "Estadísticos" +#contributors: +msgid "Not enough memory!" +msgstr "¡Memoria insuficiente!" -msgid "Show Vertical Axis" -msgstr "Mostrar Eje Vertical" +#contributors: +msgid "Notice" +msgstr "Advertencia" -msgid "Comma Separated Value (*.csv)|*.csv" -msgstr "Valor Separado por Comas (*.csv)|*.csv" +#contributors: +msgid "November" +msgstr "" -msgid "Curve Color" -msgstr "Color de la Curva" +#contributors: +msgid "Null geometry was detected in dataset. GeoDa can't create weights with NULL geometry. Please try to save as records with valid geometries and try again." +msgstr "" -msgid "User Name" -msgstr "Nombre Usuario" +#contributors: +msgid "Number Bins:" +msgstr "" -msgid "Bivariate Moran's I" -msgstr "I de Morán Bivariante" +#contributors: +msgid "Number of Box Plots" +msgstr "" -msgid "Database Port" -msgstr "Base de Datos Puerto" +#contributors: +msgid "Number of Categories" +msgstr "Número de Categorías" -msgid "Normal" -msgstr "Normal" +#contributors: +msgid "Number of Clusters:" +msgstr "Número de Clústers:" -msgid "Nokia/HERE App Key" -msgstr "Nokia/HERE Clave de la APP" +#contributors: +msgid "Number of Columns" +msgstr "Número de Columnas" -msgid "1 Iteration" -msgstr "Iteración 1" +#contributors: +msgid "Number of Neighbors" +msgstr "Número de Vecinos" -msgid "Conditional Map" -msgstr "Mapa Condicional" +#contributors: +msgid "Number of Rows" +msgstr "Número de Filas" -msgid "Select From Current Selection" -msgstr "Seleccionar de Selección Actual" +#contributors: +msgid "Number of clusters:\t" +msgstr "" -msgid "Show Axes" -msgstr "Mostrar Ejes" +#contributors: +msgid "Number of neighbors" +msgstr "Número de vecinos" -msgid "Save Project" -msgstr "Guardar Proyecto" +#contributors: +msgid "Number of not clustered observations: " +msgstr "" -msgid "Chinese Traditional (Big5)" -msgstr "Chino Tradicional (Big5)" +#contributors: +msgid "OGR failed to create field.\n\nDetails:" +msgstr "" -msgid "New Group Details" -msgstr "Nombrar Nuevo Grupo" +#contributors: +msgid "OK" +msgstr "Aceptar" -msgid "Variable" -msgstr "Variable" +#contributors: +msgid "OK to Exit?" +msgstr "¿De acuerdo en Salir?" -msgid "Title of Visualization" -msgstr "Título de Visualización" +#contributors: +msgid "OLS Model has been selected." +msgstr "El Modelo MCO ha sido seleccionado." -msgid "Background Color" -msgstr "Color de Fondo" +#contributors: +msgid "OLS Model with White test has been selected." +msgstr "Se ha seleccionado un Modelo MCO con test de White." -msgid "Axis Selection" -msgstr "Selección de Eje" +#contributors: +msgid "Obs." +msgstr "" -msgid "Set Display Precision:" -msgstr "Mostrar Pantalla de Precisión" +#contributors: +msgid "October" +msgstr "" -msgid "New Selection" -msgstr "Nueva Selección" +#contributors: +msgid "Ok" +msgstr "Aceptar" -msgid "Number of neighbors" -msgstr "Número de vecinos" +#contributors: +msgid "On line %d of weights file, observation id %d encountered which does not exist in field \"%s\" of the Table." +msgstr "%d en línea del fichero de pesos, encontrado id de obs. %d que no existe en el campo \"%s\" de la Tabla." -msgid "Z" -msgstr "Z" +#contributors: +msgid "On line %d of weights file, observation id %d encountered which is out of allowed observation range of 1 through %d." +msgstr "En la fila %d del fichero de pesos, encontrada observación con id %d fuera del rango de permitido entre 1 y %d." -msgid "Type" -msgstr "Tipo" +#contributors: +msgid "Once you have grouped variables, you can save a new space-time table and weights: To add a spatial ID to your space-time table and create space-time weights, you need to have an active weights file (Tools-Weights Manager)." +msgstr "Una vez agrupadas las variables, debe guardar una nueva tabla y pesos espacio-temporales: Para añadir el ID espacial a su tabla y crear pesos espacio-temporales, debe tener un fichero activo de pesos (Herramientas-Gestor de Pesos)" -msgid "Displayed decimals places" -msgstr "Lugares decimales mostrados" +#contributors: +msgid "Only 'gal', 'gwt', 'kwt', 'mat' and 'swm' weights files supported." +msgstr "Sólo se admiten ficheros de pesos 'gal', 'gwt', 'kwt', 'mat' y 'swm'" -msgid "WFS URL" -msgstr "URL de WFS" +#contributors: +msgid "Only Map Boundary" +msgstr "Only Map Boundary" -msgid "Local G Statistics Maps" -msgstr "Mapas de Estadísticos G Locales" +#contributors: +msgid "Oops. GeoDa was unable to submit a bug report. Please try again or create it here instead: https://github.com/GeoDaCenter/geoda/issues Thanks!" +msgstr "Oops. GeoDa no pudo enviar el informe de errores. Intentarlo de nuevo o desde aquí: https://github.com/GeoDaCenter/geoda/issues ¡Gracias!" -msgid "maximum" -msgstr "máximo" +#contributors: +msgid "Open" +msgstr "Abrir" -msgid "value:" -msgstr "valor:" +#contributors: +msgid "Open Datasource:" +msgstr "Fuente de Datos Abierta:" -msgid "Project Information" -msgstr "Información de Proyecto" +#contributors: +msgid "Open Document Spreadsheet (*.ods)|*.ods" +msgstr "OpenDocument Hoja de Cálculo (*.ods)|*.ods" -msgid "Empirical Bayes" -msgstr "Empírico Bayes" +#contributors: +msgid "Open Layer:" +msgstr "Abrir Capa:" -msgid "Add Mean Centers to Table" -msgstr "Añadir Centros Medios a Tabla" +#contributors: +msgid "Open data source progress dialog" +msgstr "Abrir diálogo de progreso de fuente de datos" -msgid "Close" -msgstr "Cerrar" +#contributors: +msgid "Open file" +msgstr "" -msgid "Neighbors of Cores" -msgstr "Vecinos y Centros" +#contributors: +msgid "Open project file:" +msgstr "Abrir archivo de proyecto" -msgid "Recent" -msgstr "Reciente" +#contributors: +msgid "Open weights file" +msgstr "Abrir archivo de pesos" -msgid "Use Scientific Notation" -msgstr "Usar Notación Científica" +#contributors: +msgid "Operation requires a valid field name or constant." +msgstr "Operación que requiere de un nombre de campo válido o constante." -msgid "Number of Columns" -msgstr "Número de Columnas" +#contributors: +msgid "Operator" +msgstr "Operador" -msgid "Use the bounding box of shape datasource" -msgstr "Usar el cuadro delimitador de la fuente de datos shape" +#contributors: +msgid "Options" +msgstr "Opciones" -msgid "Conditional Plot" -msgstr "Gráfico Condicional" +#contributors: +msgid "Options > Change Parameters" +msgstr "" -msgid "CSV Contains Variable Names?" -msgstr "¿CSV Contiene Nombres de Variables?" +#contributors: +msgid "Options:" +msgstr "" -msgid "Local Moran's I Maps" -msgstr "Mapas del I de Moran Local" +#contributors: +msgid "Order of contiguity" +msgstr "Orden de contigüidad" -msgid "Excess Risk" -msgstr "Riesgo atribuible" +#contributors: +msgid "Other (up to 99999)" +msgstr "Otro (superior a 99999)" -msgid "Distance band" -msgstr "Banda de Distancia" +#contributors: +msgid "Other Pos" +msgstr "Otra Pos." -msgid "Description" -msgstr "Descripción" +#contributors: +msgid "Other Positive" +msgstr "Otro Positivo" -msgid "Univariate Local Join Count" -msgstr "Join Count Local Univariante" +#contributors: +msgid "Outline Color" +msgstr "" -msgid "Max" -msgstr "Máx." +#contributors: +msgid "Outline Color for Category" +msgstr "" -msgid "Central European Latin-2 (ISO-8859-2)" -msgstr "Centroeuropeo Latín-2 (ISO-8859-2)" +#contributors: +msgid "Outline Visible" +msgstr "Outline Visible" -msgid "Background" -msgstr "Fondo" +#contributors: +msgid "Outlines Visible" +msgstr "Contornos Visibles" -msgid "Table Name" -msgstr "Nombre de Tabla" +#contributors: +msgid "Output file (*.shp)" +msgstr "Arhivo de Resultados (*.shp)" -msgid "Ungrouped Variables" -msgstr "Variables Sin Agrupar" +#contributors: +msgid "Output file (text file)" +msgstr "Archivo de resultados (texto)" -msgid "No Weights Found" -msgstr "No se encontraron Pesos" +#contributors: +msgid "Output:" +msgstr "Resultados:" -msgid "Password" -msgstr "Contraseña" +#contributors: +msgid "Overwrite?" +msgstr "¿Sobrescribir?" -msgid "Specify Seed..." -msgstr "Especificar Semilla..." +#contributors: +msgid "PCA" +msgstr "ACP" -msgid "Carto Dark (No Labels)" -msgstr "Carto Oscuro (Sin Etiquetas)" +#contributors: +msgid "PCA Settings" +msgstr "Configuración de ACP" -msgid "Reverse" -msgstr "Marcha Atrás" +#contributors: +msgid "POLY&ID" +msgstr "POLY&ID" -msgid "Save Categories" -msgstr "Guardar Categorías" +#contributors: +msgid "Pan" +msgstr "Arrastrar" -msgid "Save Mean Centers" -msgstr "Guardar Centros Medios" +#contributors: +msgid "Panning Mode" +msgstr "Modo Arrastrado" -msgid "Edit" -msgstr "Editar" +#contributors: +msgid "Parallel Coordinate Plot" +msgstr "Gráfico de Coordenadas Paralelas" -msgid "Standard Deviation Map" -msgstr "Mapa de Desviación Estándar" +#contributors: +msgid "Parallel Coordinate Plot: " +msgstr "Gráfico de Coordenadas Paralelas: " -msgid "Moran's I with EB Rate" -msgstr "I de Moran con Tasa EB" +#contributors: +msgid "Parameters" +msgstr "Parámetros" -msgid "Database Name/Instance" -msgstr "Nombre Base de Datos/Instancia" +#contributors: +msgid "Parameters:" +msgstr "Parámetros:" -msgid "SQLite/SpatiaLite (*.sqlite)|*.sqlite" -msgstr "SQLite/SpatiaLite (*.sqlite)|*.sqlite" +#contributors: +msgid "Password" +msgstr "Contraseña" -msgid "Standard Deviation" -msgstr "Desviación Estándar" +#contributors: +msgid "Paste" +msgstr "Pegar" -msgid "Cyrillic/Russian (CP866)" -msgstr "Cirílico/Ruso (CP866)" +#contributors: +msgid "Percentile" +msgstr "Percentiles" -msgid "Please specify weights in Tools > Weights Manager." -msgstr "Especifique pesos en Herramientas > Gestor de Pesos" +#contributors: +msgid "Percentile Map" +msgstr "Mapa de Percentiles" -msgid "Univariate Local Geary" -msgstr "Geary Local Univariante" +#contributors: +msgid "Period 1" +msgstr "" -msgid "Change Current Map Type" -msgstr "Cambiar Tipo Actual de Mapa" +#contributors: +msgid "Period 1:" +msgstr "Período 1:" -msgid "Rook contiguity" -msgstr "Contigüidad Torre" +#contributors: +msgid "Period 2" +msgstr "" -msgid "Basemap" -msgstr "Mapa Base" +#contributors: +msgid "Period 2:" +msgstr "Período 2:" -msgid "thematic" -msgstr "temática" +#contributors: +msgid "Please briefly describe what went wrong." +msgstr "Describir brevemente lo que no ha funcionado." -msgid "Add New ID Variable" -msgstr "Añadir Nueva Variable ID" +#contributors: +msgid "Please check input values are valid" +msgstr "" -msgid "Rates-Calculated Maps" -msgstr "Mapas de Ratios Calculados" +#contributors: +msgid "Please check the selected variables are all valid." +msgstr "Comprobar la validez de las variables seleccionadas." -msgid "Color" -msgstr "Color" +#contributors: +msgid "Please check your network connection, or contact GeoDa support team." +msgstr "Revisar conexión a la red o contactar con el equipo de soporte de GeoDa" -msgid "Speed" -msgstr "Velocidad" +#contributors: +msgid "Please choose Period 1 first." +msgstr "Elegir primero el Periodo 1" -msgid "Open weights file" -msgstr "Abrir archivo de pesos" +#contributors: +msgid "Please choose Period 1." +msgstr "Seleccionar Período 1." -msgid "Select fields:" -msgstr "Seleccionar campos" +#contributors: +msgid "Please choose Period 2 first." +msgstr "Seleccionar antes el Período 2." -msgid "Change Edge Color" -msgstr "Cambiar Color del Borde" +#contributors: +msgid "Please choose Period 2." +msgstr "Seleccionar Período 2." -msgid "time" -msgstr "tiempo" +#contributors: +msgid "Please choose Periods first." +msgstr "Seleccionar antes los Períodos." -msgid "Enable User Defined Value Range of Y-Axis" -msgstr "Permitir Definicion de Rango de Valores del Eje Y" +#contributors: +msgid "Please choose a Result field." +msgstr "Seleccionar un campo de Resultados." -msgid "False Discovery Rate:" -msgstr "Tasa de Falso Descubrimiento" +#contributors: +msgid "Please click to choose a highlighting style in GeoDa:" +msgstr "Haga click para elegir un estilo de resaltado en GeoDa" -msgid "Histogram Classification" -msgstr "Clasificación Histograma" +#contributors: +msgid "Please describe steps you took before something went wrong." +msgstr "Describir los pasos realizados antes de tener problemas." -msgid "Chow test for sel/unsel regression subsets: " -msgstr "Test de Chow para regresiones de subgrupos de sel/no sel." +#contributors: +msgid "Please enter a field name for saving clustering results." +msgstr "Introducir un nombre de campo para guardar resultados de clústers" -msgid "Publish Maps and Plots to GeoDa-Web" -msgstr "Publicar Mapas y Gráficos para GeoDa-Web" +#contributors: +msgid "Please enter a valid number of cluster." +msgstr "" -msgid "This field name already exists (non-float type). Please input a unique name." -msgstr "Nombre de campo ya existe (tipo no flotante). Introducir un nombre no existente." +#contributors: +msgid "Please enter a valid number of clusters." +msgstr "" -msgid "Skater Settings" -msgstr "Configuración Skater" +#contributors: +msgid "Please enter a valid positive integer" +msgstr "" -msgid "Cyrillic\\/Russian (CP866)" -msgstr "Cirílico\\/Ruso (CP866)" +#contributors: +msgid "Please enter iteration number" +msgstr "Introducir nº de iteración" -msgid "Can't connect to datasource: " -msgstr "No se puede conectar con fuente de datos:" +#contributors: +msgid "Please enter maximum number of regions." +msgstr "Introducir máximo nº de regiones." -msgid "Please check your network connection, or contact GeoDa support team." -msgstr "Revisar conexión a la red o contactar con el equipo de soporte de GeoDa" +#contributors: +msgid "Please enter minimum bound value" +msgstr "Introducir el valor de la cota mínima" -msgid "Variable \\/ Constant" -msgstr "Variable \\/ Constante" +#contributors: +msgid "Please enter minimum number of observations per regions, or use minimum bound instead." +msgstr "Introducir nº mínimo de observaciones por regiones o utilizar la cota mínima." -msgid " Categories" -msgstr "Categorías" +#contributors: +msgid "Please enter number of regions" +msgstr "Introducir nº de regiones" -msgid "Remove Time" -msgstr "Elimine el Tiempo" +#contributors: +msgid "Please enter values of bounding box." +msgstr "" -msgid "Warning: %d observations is neighborless." -msgstr "Aviso: %d observaciones sin vecinos." +#contributors: +msgid "Please first select observations in one of the other data or map views." +msgstr "Seleccionar primero observaciones en una de las otras vistas de datos o mapa." -msgid "Error" -msgstr "Error" +#contributors: +msgid "Please fix the grid bounding box." +msgstr "Por favor, ajustar cuadro delimitador de la rejilla" -msgid "Scatter Plot Variables" -msgstr "Variables Diagrama de Dispersión" +#contributors: +msgid "Please input Carto App Key." +msgstr "Introducir Clave de App de Carto." -msgid "Exit?" -msgstr "¿Salir?" +#contributors: +msgid "Please input Carto User Name." +msgstr "Introducir Nombre de Usuario de Carto." -msgid "Stopping criterion for power iteration:" -msgstr "Criterio de parada para iteración de potencia" +#contributors: +msgid "Please input a valid url address." +msgstr "Introducir dirección url válida." -msgid "GeoDa Project to Save As" -msgstr "Guardar Como Proyecto de GeoDa" +#contributors: +msgid "Please input a valid url." +msgstr "Introducir una url válida." -msgid "KMedians Dialog" -msgstr "Cuadro de KMedianas" +#contributors: +msgid "Please input database host." +msgstr "Introducir base de datos anfitrión." -msgid "Add OGR column error. Field type is unknown." -msgstr "Añadir columna de error OGR. Tipo de campo desconocido" +#contributors: +msgid "Please input database name." +msgstr "Introducir nombre de base de datos" -msgid "Co-location Settings" -msgstr "Configuración de Co-localización" +#contributors: +msgid "Please input database port." +msgstr "Introducir puerto de base de datos." -msgid "Change title \"%s\" to" -msgstr "Cambiar título\"%s\" a" +#contributors: +msgid "Please input minimum bound value." +msgstr "Introducir un valor para cota mínima." -msgid "Save Cluster in Field:" -msgstr "Guardar Clúster en Campo:" +#contributors: +msgid "Please input password." +msgstr "Introducir contraseña." -msgid "Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data." -msgstr "Variable %s ya no está en la Tabla. Cerrar y reabrir este cuadro de diálogo para sincronizar con datos de la Tabla" +#contributors: +msgid "Please input table name." +msgstr "Introducir el nombre de la tabla" -msgid "(K-Means)" -msgstr "(K Medias)" +#contributors: +msgid "Please input user name." +msgstr "Introducir nombre de usuario." -msgid "No layer has been selected. Please select a layer." -msgstr "No se ha seleccionado ninguna capa. Seleccionar capa" +#contributors: +msgid "Please load another layer using map window to apply Spatial Join." +msgstr "" -msgid "Bivariate" -msgstr "Bivariante" +#contributors: +msgid "Please open a data file rather than a project file (*.gda)." +msgstr "Reabrir un archivo de datos en lugar de un archivo de proyecto (*.gda)." -msgid "Connectivity Map" -msgstr "Mapa de conectividad" +#contributors: +msgid "Please provide paths for both Project file and Datasource." +msgstr "Proporcionar rutas para fichero de Proyecto y Fuente de Datos" -msgid "Current field name:" -msgstr "Nombre de campo actual" +#contributors: +msgid "Please restart GeoDa to apply the language setup." +msgstr "Reiniciar GeoDa para solicitar el asistente de idioma." -msgid "Variable %s is specified. " -msgstr "Se ha especificado variable %s." +#contributors: +msgid "Please restart GeoDa to finish installing updates." +msgstr "Reiniciar GeoDa para terminar de instalar actualizaciones." -msgid "Please enter minimum bound value" -msgstr "Introducir el valor de la cota mínima" +#contributors: +msgid "Please right-click or use
" +msgstr "" -msgid "CL" -msgstr "CL" +#contributors: +msgid "Please select Join Operation with Join Variable." +msgstr "" -msgid "Please select at least %d variables." -msgstr "Seleccionar, al menos, %d variables." +#contributors: +msgid "Please select a binary variable for Local Join Count." +msgstr "" -msgid "Ok" -msgstr "Aceptar" +#contributors: +msgid "Please select a map layer to apply spatial join to current map (%s):" +msgstr "" -msgid "CreateWeights()" -msgstr "CrearPesos()" +#contributors: +msgid "Please select a results field." +msgstr "Seleccionar un campo de resultados" -msgid " Local Geary Cluster Map" -msgstr "Mapa de Clúster Geary Local" +#contributors: +msgid "Please select a time variable first, and make sure more than one time steps have been defined." +msgstr "Seleccionar antes una variable de tiempo y definir más de un período temporal." -msgid " already exists. OK to overwrite?" -msgstr "ya existe. ¿Aceptar sobrescribir?" +#contributors: +msgid "Please select a weights type." +msgstr "Seleccionar tipo de matriz de pesos." -msgid "Successful aggregation." -msgstr "Agregación realizada con éxito" +#contributors: +msgid "Please select an Base field." +msgstr "Seleccionar un campo Base" -msgid " Local Geary Significance Map" -msgstr "Mapa de Significación Geary Local" +#contributors: +msgid "Please select an Event field." +msgstr "" -msgid "Error: the inverse matrix is ill-conditioned." -msgstr "Error: la matriz inversa está mal-condicionada" +#contributors: +msgid "Please select an Variable field." +msgstr "Seleccionar un campo de Variable." -msgid " with Time Control" -msgstr "con el Control de Tiempo" +#contributors: +msgid "Please select another variable with values more suitable for computing a correlogram." +msgstr "Seleccionar otra variable con valores más adecuados para el cálculo del correlograma." -msgid "Maps To Open" -msgstr "Mapas para Abrir" +#contributors: +msgid "Please select at least %d variables." +msgstr "Seleccionar, al menos, %d variables." -msgid "Save As progress dialog" -msgstr "Diálogo de progreso Guardar Como" +#contributors: +msgid "Please select at least 2 variables." +msgstr "Seleccionar al menos 2 variables" -msgid "Use selected as specified alpha level" -msgstr "Utilizar seleccionados como nivel alfa especificado" +#contributors: +msgid "Please select at least one variable." +msgstr "" -msgid "New Custom Categories Title:" -msgstr "Nuevo Título de Categorías Personalizado" +#contributors: +msgid "Please select binary variables for Co-location Join Count." +msgstr "" -msgid "Conditional Local Geary Map" -msgstr "Mapa Condicional Geary Local" +#contributors: +msgid "Please select features first." +msgstr "Seleccionar 1º las características." -msgid "Saving data..." -msgstr "Guardando datos..." +#contributors: +msgid "Please select the layer name to connect:" +msgstr "Seleccionar el nombre de capa a conectar:" -msgid "Select color scheme:" -msgstr "Seleccionar paleta de colores" +#contributors: +msgid "Please select two binary variables for Bivariate Local Join Count." +msgstr "" -msgid "Select Variables (Multi-Selection)" -msgstr "Seleccionar Variables (Multi-Selección)" +#contributors: +msgid "Please setup co-locations first." +msgstr "Establecer antes las co-localizaciones." -msgid "Suggested field name:" -msgstr "Nombre de campo sugerido" +#contributors: +msgid "Please specify a Weights matrix." +msgstr "Especificar una matriz de pesos." -msgid "The connectivity of selected spatial weights is incomplete, please adjust the spatial weights." -msgstr "La conectividad de los pesos espaciales seleccionados está incompleta; arreglar matriz de pesos." +#contributors: +msgid "Please specify a valid data source name." +msgstr "Especificar un nombre válido de fuente de datos." -msgid "Data source (%s) doesn't exist. Please check the project configuration file." -msgstr "La fuente de datos (%s) no existe. Comprobar el fichero de configuración del proyecto." +#contributors: +msgid "Please specify distance metric." +msgstr "" -msgid "Once you have grouped variables, you can save a new space-time table and weights: To add a spatial ID to your space-time table and create space-time weights, you need to have an active weights file (Tools-Weights Manager)." -msgstr "Una vez agrupadas las variables, debe guardar una nueva tabla y pesos espacio-temporales: Para añadir el ID espacial a su tabla y crear pesos espacio-temporales, debe tener un fichero activo de pesos (Herramientas-Gestor de Pesos)" +#contributors: +msgid "Please specify the p-value to be used in tests; \ndefault: p-value = 0.01" +msgstr "" -msgid "(Please save results to see the summary report.)" -msgstr "(Guardar resultados para ver el informe de resultados)." +#contributors: +msgid "Please specify weights in Tools > Weights Manager." +msgstr "Especifique pesos en Herramientas > Gestor de Pesos" -msgid "(Optional) You can change the data type for a field:" -msgstr "(Opcional) Vd. puede cambiar el tipo de datos del campo:" +#contributors: +msgid "Please use
Options > Change Variable
to specify a variable." +msgstr "Utilizar
Opciones > Cambiar Variable
a especificar una variable." -msgid "GeoDa cannot find proper projection or geographic coordinate system information to add a basemap. Please update this information (e.g. in .prj file)." -msgstr "GeoDa no puede encontrar la proyección adecuada o la información sobre coordenadas geográficas para añadir al mapa base. Actualizar esta información (p.e. con un archivo .prj)" +#contributors: +msgid "Plots:" +msgstr "Gráficos:" -msgid "Saving to data source (%s) failed.\n" -msgstr "Error en guardando a fuente de datos (%s).\n" +#contributors: +msgid "Point Color" +msgstr "Color de Puntos" -msgid "Min Region Size:" -msgstr "Mín. Tamaño Región" +#contributors: +msgid "Point Radius:" +msgstr "Point Radius:" -msgid "Error: Due to restrictions on the DBF file format, the particular combination of length and decimals entered is not valid. Based on your current choices, we recommend length = %d and decimals = %d" -msgstr "Error: debido a restricciones en el formato del archivo DBF, la combinación concreta de longitud y decimales introducida no es válida. En base a su elección actual, recomendamos longitud = %d y decimales = %d" +#contributors: +msgid "Points from Table" +msgstr "Puntos de una Tabla" -msgid "Database\\/Instance Name" -msgstr "Base Datos\\/Nombre Instancia" +#contributors: +msgid "Positive" +msgstr "Positivo" -msgid "Nokia\\/HERE App Key" -msgstr "Nokia\\/HERE Clave APP" +#contributors: +msgid "Power" +msgstr "Potencia" -msgid "Variable Type Error" -msgstr "Error Tipo de Variable" +#contributors: +msgid "Precision threshold" +msgstr "Precisión umbral" -msgid "Save Rates - %s over %s" -msgstr "Guardar Tasas - %s sobre %s" +#contributors: +msgid "Pred. Val. and Res." +msgstr "Val. Pred. y Res." -msgid "Max-p Settings" -msgstr "Configuración MaxP" +#contributors: +msgid "Preferences..." +msgstr "Preferencias..." -msgid "Before you can modify the variable %s, please close the %d view(s) that depend on it." -msgstr "Antes de modificar la variable %s, cerrar la(s) %d vista(s) que dependen de ella" +#contributors: +msgid "Produce bounding-box file?" +msgstr "¿Crear archivo de cuadro delimitador?" -msgid "Reset to system locale successfully. Please re-open current project with system locale." -msgstr "Restaurado con éxito a configuración local del sistema. Reabrir el proyecto actual con la configuración local." +#contributors: +msgid "Progress" +msgstr "Progreso" -msgid "Send Crash Report" -msgstr "Enviar Informe de Errores" +#contributors: +msgid "Project Information" +msgstr "Información de Proyecto" -msgid "Http connection timeout (seconds) for e.g. WFS, Geojson etc.:" -msgstr "Conexión http terminada (segundos) para p.e. WFS, Geojson, etc.:" +#contributors: +msgid "Project file path is empty." +msgstr "Ruta vacía de archivo de proyecto." -msgid "Weights file \"%s\" created successfully." -msgstr "Archivo de pesos \"%s\" creado con éxito." +#contributors: +msgid "Project filename not specified." +msgstr "Nombre archivo de proyecto no especificado." -msgid " BiLISA Cluster Map" -msgstr "BiLISA Mapa de Clústers" +#contributors: +msgid "Project to X-Y" +msgstr "Proyectar a X-Y" -msgid "Please open a data file rather than a project file (*.gda)." -msgstr "Reabrir un archivo de datos en lugar de un archivo de proyecto (*.gda)." +#contributors: +msgid "Project to X-Z" +msgstr "Proyectar a X-Z" -msgid "In GdaFrame::OnCheckTestMode():" -msgstr "En GdaMarco::OnCheckTestMode():" +#contributors: +msgid "Project to Z-Y" +msgstr "Proyectar a Z-Y" -msgid "Conditional Local Geary Map Variables" -msgstr "Variables del Mapa de Geary Local Condicional" +#contributors: +msgid "Property" +msgstr "" -msgid "Undo" -msgstr "Deshacer" +#contributors: +msgid "Publish Maps and Plots to GeoDa-Web" +msgstr "Publicar Mapas y Gráficos para GeoDa-Web" -msgid "Paste" -msgstr "Pegar" +#contributors: +msgid "Publish to GeoDa-Web" +msgstr "Publicar a la Web de GeoDa" -msgid "Save Details" -msgstr "Guardar Detalles" +#contributors: +msgid "Quantile" +msgstr "Cuantiles" -msgid "Can't get datasource type from: %s\n" -msgstr "No puede obtener el tipo de fuente de datos desde: %s\n" +#contributors: +msgid "Quantile Map" +msgstr "Mapa de Cuantiles" -msgid "Bubble Chart Variables" -msgstr "Variables de Gráfico de Burbujas" +#contributors: +msgid "Queen contiguity" +msgstr "Contigüidad Reina" -msgid "Open data source progress dialog" -msgstr "Abrir diálogo de progreso de fuente de datos" +#contributors: +msgid "REDCAP Settings" +msgstr "Configuración de REDCAP" -msgid "Exit with unsaved changes?" -msgstr "¿Salir sin guardar cambios?" +#contributors: +msgid "Random Gaussian dist with mean=%s, sd=%s" +msgstr "Dist. aleatoria gaussiana con media=%s, DT=%s" -msgid "Run Diff-in-Diff Test" -msgstr "Ejecutar Test de dif-en-dif" +#contributors: +msgid "Random Sample" +msgstr "" -msgid "Tabu length for Tabu Search algorithm has to be an integer number larger than 1 (e.g. 85)." -msgstr "Distancia tabú para el algoritmo Búsqueda Tabú debe ser un número entero mayor que 1 (ej. 85)" +#contributors: +msgid "Random uniform dist on unit interval" +msgstr "Distrib. uniforme aleatoria en intervalo unidad" -msgid "Number of Neighbors" -msgstr "Número de Vecinos" +#contributors: +msgid "Randomization" +msgstr "Aleatorización" -msgid "Please restart GeoDa to apply the language setup." -msgstr "Reiniciar GeoDa para solicitar el asistente de idioma." +#contributors: +msgid "Rate calculation successful." +msgstr "Tasa calculada con éxito." -msgid "This file type is not supported." -msgstr "ESte tipo de archivo no está admitido" +#contributors: +msgid "Rates" +msgstr "Tasas" -msgid "This view currently supports data with at most 1000 observations. The Spatial Correlogram Scatterplot plots distances between all pairs of observations. The current data set has %d observations and %d unordered pairs of observations." -msgstr "Esta vista suele admitir datos hasta 1000 observaciones. El Diagrama del Correlograma Espacial representa distancias entre todos los pares de observaciones. La base de datos activa tiene %d observaciones y %d pares desordenados de observaciones." +#contributors: +msgid "Rates Variable Settings" +msgstr "Configuración Variable de Tasas" -msgid "CSV Configuration Warning" -msgstr "Aviso de Configuración CSV" +#contributors: +msgid "Rates-Calculated Map" +msgstr "Mapa de Tasas Calculadas" -msgid "All" -msgstr "Todo" +#contributors: +msgid "Rates-Calculated Maps" +msgstr "Mapas de Ratios Calculados" -msgid "Second Variable (Y)" -msgstr "Segunda Variable (y)" +#contributors: +msgid "Raw Rate" +msgstr "Tasa Cruda" -msgid "GeoDa CSV File Configuration" -msgstr "Configuración del Fichero CSV de GeoDa" +#contributors: +msgid "Raw Rate Smoothed Variable Settings" +msgstr "Configuración Variable Alisada Tasa Cruda" -msgid "Error: there was a problem reading the field names from the text file." -msgstr "Error: se produjo un problema al leer los nombres de los campos del fichero de texto" +#contributors: +msgid "Re&set" +msgstr "" -msgid "LOWESS Smoother Parameters" -msgstr "Parámetros de Alisado LOWESS" +#contributors: +msgid "Read from an ASCII file" +msgstr "Leer de un Archivo ASCII" -msgid "Specified id field (%s) not found in currently loaded Table." -msgstr "Campo id especificado (%s) no se encuentra en la Tabla activa" +#contributors: +msgid "Recent" +msgstr "Reciente" -msgid "Histogram: " -msgstr "Histograma: " +#contributors: +msgid "Record order specified, but found minimum and maximum observation values of %d and %d which is incompatible with number of observations specified in first line of weights file: %d ." +msgstr "Orden de registro especificado, pero se encontraron valores de obs. mín. y máx. de %d y %d que son incompatibles con el nº de observaciones especificadas en la 1ª línea del archivo de pesos: %d ." -msgid "Add\\/Remove Variables" -msgstr "Añadir\\/Eliminar Variables" +#contributors: +msgid "Rectangle" +msgstr "Rectángulo" -msgid "First Variable (X)" -msgstr "Primera Variable (X)" +#contributors: +msgid "Redo" +msgstr "Repetir" -msgid "Save" -msgstr "Guardar" +#contributors: +msgid "Refresh" +msgstr "Actualizar" -msgid "Please input user name." -msgstr "Introducir nombre de usuario." +#contributors: +msgid "Regimes Regression" +msgstr "Regresión" -msgid "GeoDa Project (*.gda)|*.gda" -msgstr "Proyecto de GeoDa (*.gda)|*.gda" +#contributors: +msgid "Regression" +msgstr "Regresión" -msgid "enumerate as 1, 2, 3, ..." -msgstr "Numerar como 1, 2, 3, ..." +#contributors: +msgid "Regression Line Color" +msgstr "Color Línea de Regresión" -msgid "Aggregate - " -msgstr "Agregar - " +#contributors: +msgid "Regression Output Text File" +msgstr "Archivo de Texto Resultados de la Regresión" -msgid "Set number of CPU cores manually:" -msgstr "Establecer manualmente el número de núcleos de CPU" +#contributors: +msgid "Regression Report" +msgstr "Informe de Regresión" -msgid "Not Significant" -msgstr "No Significativo" +#contributors: +msgid "Remove" +msgstr "" -msgid "A newer version of GeoDa is found. Do you want to update to version " -msgstr "Existe una nueva versión de GeoDa. ¿Desea actualizar a la versión ?" +#contributors: +msgid "Remove Time" +msgstr "Elimine el Tiempo" -msgid "Export or save layer to" -msgstr "Exportar o guardar capa para" +#contributors: +msgid "Rename Space-Time Variable" +msgstr "Renombrar Variable Espacio-Temporal" -msgid "Conditional LISA Map" -msgstr "Mapa LISA Condicional" +#contributors: +msgid "Rename Variable" +msgstr "Renombrar Variable" -msgid "Inference Settings (%d perm)" -msgstr "Configuración Inferencia (%d perm)" +#contributors: +msgid "Reset" +msgstr "Borrar" -msgid "Please choose Period 1 first." -msgstr "Elegir primero el Periodo 1" +#contributors: +msgid "Reset to default" +msgstr "Restaurar predeterminado" -msgid "<" -msgstr "<" +#contributors: +msgid "Reset to system locale information" +msgstr "Información de restauración a configuración local del sistema" -msgid "Please input table name." -msgstr "Introducir el nombre de la tabla" +#contributors: +msgid "Reset to system locale successfully. Please re-open current project with system locale." +msgstr "Restaurado con éxito a configuración local del sistema. Reabrir el proyecto actual con la configuración local." -msgid "Please select an option." -msgstr "Seleccionar una opción." +#contributors: +msgid "Resize" +msgstr "Redimensionar" -msgid "Neighborless" -msgstr "Sin vecinos" +#contributors: +msgid "Resolution(dpi):" +msgstr "Resolution(dpi):" -msgid "Minimum Bound:" -msgstr "Valor Cota Mín." +#contributors: +msgid "Result" +msgstr "Resultado" -msgid "No weights file was created due to all observations being isolates for the specified threshold value. Increase the threshold to create a non-empty weights file." -msgstr "No se creó el archivo de pesos porque todas las observaciones están aisladas para el valor umbral especificado. Aumente el umbral para crear un archivo de pesos no vacío" +#contributors: +msgid "Reverse" +msgstr "Marcha Atrás" -msgid "Space-time variables with duplicate name \"%s\" found." -msgstr "Encontradas variables Espacio-temporales con el nombre \"%s\" duplicado" +#contributors: +msgid "Right" +msgstr "" -msgid "Please input a valid url." -msgstr "Introducir una url válida." +#contributors: +msgid "Rook contiguity" +msgstr "Contigüidad Torre" -msgid "Upper outlier" -msgstr "Atípico superior" +#contributors: +msgid "Root Variable:" +msgstr "" -msgid "Record order specified, but found minimum and maximum observation values of %d and %d which is incompatible with number of observations specified in first line of weights file: %d ." -msgstr "Orden de registro especificado, pero se encontraron valores de obs. mín. y máx. de %d y %d que son incompatibles con el nº de observaciones especificadas en la 1ª línea del archivo de pesos: %d ." +#contributors: +msgid "Run" +msgstr "Ejecutar" -msgid "Stop" -msgstr "Parar" +#contributors: +msgid "Run Diff-in-Diff Test" +msgstr "Ejecutar Test de dif-en-dif" -msgid "Success \\/ Warning" -msgstr "Éxito \\/ Aviso" +#contributors: +msgid "S.D" +msgstr "" -msgid "Y-Axis" -msgstr "Eje-Y" +#contributors: +msgid "SELECTED" +msgstr "SELECCIONADO" -msgid "There was a problem associating the weights file." -msgstr "Se ha producido un problema al asociar el archivo de pesos" +#contributors: +msgid "SQLite/SpatiaLite (*.sqlite)|*.sqlite" +msgstr "SQLite/SpatiaLite (*.sqlite)|*.sqlite" + +#contributors: +msgid "SVD will be automatically used for PCA since the number of rows is less than the number of columns." +msgstr "SDV será utilizado automáticmente por APC porque el nº de filas es menor que el nº de columnas." -msgid "Synchronize " -msgstr "Sincronizar" +#contributors: +msgid "Sample Autocorrelation" +msgstr "Autocorrelación muestral" -msgid "Please enter a field name for saving clustering results." -msgstr "Introducir un nombre de campo para guardar resultados de clústers" +#contributors: +msgid "Sample Data" +msgstr "Datos de Ejemplo" -msgid "Variable:" -msgstr "Variable" +#contributors: +msgid "Sample Size:" +msgstr "" -msgid "No update required" -msgstr "Ninguna actualización necesaria" +#contributors: +msgid "Save" +msgstr "Guardar" -msgid "Save Image to File" -msgstr "Guardar Imagen a Archivo" +#contributors: +msgid "Save " +msgstr "Guardar " -msgid "Specified key value field \"%s\" on first line of weights file is not an integer type in the currently loaded Table." -msgstr "El campo especificado para el valor clave \"%s\" de la 1ª línea del archivo de pesos no es de tipo entero en la tabla activa." +#contributors: +msgid "Save As" +msgstr "Guardar como" -msgid "Circle Size" -msgstr "Tamaño del Círculo" +#contributors: +msgid "Save As Datasource" +msgstr "Guardar Como Fuente Datos" -msgid "Please input database name." -msgstr "Introducir nombre de base de datos" +#contributors: +msgid "Save As has been cancelled." +msgstr "Guardar Como ha sido cancelado." -msgid "Variable Properties - " -msgstr "Propiedades de la Variable - " +#contributors: +msgid "Save Categories" +msgstr "Guardar Categorías" -msgid "Export shape to boundary successfully." -msgstr "Exportado shape to boundary con éxito" +#contributors: +msgid "Save Categories to Table" +msgstr "Guardar Categorías en Tabla" -msgid "Error: number of fields must be > 2." -msgstr "Error: el nº de campos debe ser > 2." +#contributors: +msgid "Save Centroids" +msgstr "Guardar Centroides" -msgid "The data source is read only. Please try to save as other data source." -msgstr "La fuente de datos sólo se ha leído. Guardar como otra fuente de datos" +#contributors: +msgid "Save Cluster in Field:" +msgstr "Guardar Clúster en Campo:" -msgid "row:\n" -msgstr "fila:\n" +#contributors: +msgid "Save Connectivity To Table" +msgstr "Guardar Conectividad a Tabla" -msgid "KMeans Dialog" -msgstr "Cuadro de KMeans" +#contributors: +msgid "Save Details" +msgstr "Guardar Detalles" -msgid "# Neighors:" -msgstr "Nº Vecinos" +#contributors: +msgid "Save Diff-in-Diff Test Results" +msgstr "Guardar Resultados del Test de Dif-en-Dif" -msgid "Rates Variable Settings" -msgstr "Configuración Variable de Tasas" +#contributors: +msgid "Save Dummy" +msgstr "Guardar Ficticia" -msgid "Error: no records found in data source." -msgstr "Error: no hay registros en la fuente de datos" +#contributors: +msgid "Save Duplicate Thiessen Polygon Ids" +msgstr "Guardar Ids de Polígonos Thiessen Duplicados" -msgid "Specified key value field \"%s\" on first line of weights file not found in currently loaded Table." -msgstr "Campo especificado de valor clave \"%s\" de la 1ª línea del archivo de pesos no está en la Tabla activa" +#contributors: +msgid "Save Duplicate Thiessen Polygons to Table" +msgstr "Guardar Duplicado de Polígonos Thiessen a Tabla" -msgid "Change variable type for \"%s\" has failed. Please check all values are valid for conversion." -msgstr "Error en el cambio de tipo de variable por \"%s\". Comprobar la validez de todos los valores en la conversión." +#contributors: +msgid "Save Image As" +msgstr "Guardar Imagen Como" -msgid "Latitude\\/Y:" -msgstr "Latitud\\/Y:" +#contributors: +msgid "Save Image to File" +msgstr "Guardar Imagen a Archivo" -msgid "The geometries will not be saved when exporting to a Table-only data source.\n" -msgstr "Las geometrías no se guardarán tras la exportación a fuente de datos sólo-Tabla.\n" +#contributors: +msgid "Save Mean Centers" +msgstr "Guardar Centros Medios" -msgid "choice:" -msgstr "elección:" +#contributors: +msgid "Save OSM roads file" +msgstr "" -msgid "GeoDa can't change the variable type to DATE/TIME. Please select another type." -msgstr "GeoDa no puede cambiar el tipo de variable a FECHA/HORA. Seleccionar otro tipo." +#contributors: +msgid "Save OSM roads to file successfully." +msgstr "" -msgid "Horizontal Cells" -msgstr "Celdas Horizontales" +#contributors: +msgid "Save Project" +msgstr "Guardar Proyecto" -msgid "Geometries not saved" -msgstr "Geometrías no guardadas" +#contributors: +msgid "Save Project File As..." +msgstr "Guardar Fichero de Proyecto Como..." -msgid "Select an existing *.gdb directory, or create an New Folder named *.gdb" -msgstr "Seleccionar un directorio *.gdb existente o crear una Nueva Carpeta llamada *.gdb" +#contributors: +msgid "Save Projet File As" +msgstr "Guardar Archivo de Proyecto Como" -msgid "wrong model number" -msgstr "nº equivocado de modelo" +#contributors: +msgid "Save Rates" +msgstr "Guardar Tasas" -msgid "Other Pos" -msgstr "Otra Pos." +#contributors: +msgid "Save Rates - %s over %s" +msgstr "Guardar Tasas - %s sobre %s" -msgid "Map Theme" -msgstr "Tema de Mapa" +#contributors: +msgid "Save Regression Results" +msgstr "Guardar Resultados de Regresión" -msgid "GeoDa Update Dialog" -msgstr "Cuadro de Actualización de GeoDa" +#contributors: +msgid "Save Results" +msgstr "Guardar Resultados" -msgid "There is at least one neighborless observation. Check the weights histogram and linked map to see if the islands are real or not. If not, adjust the distance threshold (points) or the precision threshold (polygons)." -msgstr "Hay al menos una observación sin vecinos. Comprobar el histograma de pesos y el mapa adjunto para ver si las islas son reales o no. Si no lo son, ajuste la distancia umbral (puntos) o el umbral de precisión (polígonos)." +#contributors: +msgid "Save Results to Table: " +msgstr "" -msgid "Conditional Scatter Plot" -msgstr "Diagrama de Dispersión Condicional" +#contributors: +msgid "Save Results: HDBScan (Core Distances/Probabilities/Outliers)" +msgstr "" -msgid "Both are significant, Spatial Lag Model has been selected." -msgstr "Ambos son significativos, se selecciona el Modelo del Retardo Espacial" +#contributors: +msgid "Save Results: Local Join Count stats, " +msgstr "" -msgid "Please enter Google key(s)." -msgstr "Introducir clave(s) de Google" +#contributors: +msgid "Save Results: LocalGeary" +msgstr "Guardar Resultados: GearyLocal" -msgid "Spatial lag and error regressions require symmetric weights (not KNN). You can still use KNN weights to obtain spatial diagnostics for classic regressions." -msgstr "Los modelos del retardo y del error espacial necesitan pesos simétricos (no KNN). Los pesos KNN pueden utilizarse para calcular tests espaciales en el modelo básico." +#contributors: +msgid "Save Results: MDS" +msgstr "" -msgid "Use specified seed:" -msgstr "Utilizar semilla especificada" +#contributors: +msgid "Save Results: Moran's I" +msgstr "Guardar Resultados: I de Moran" -msgid "Please check the selected variables are all valid." -msgstr "Comprobar la validez de las variables seleccionadas." +#contributors: +msgid "Save Selected As" +msgstr "Guardar Selección como" -msgid "Open project file:" -msgstr "Abrir archivo de proyecto" +#contributors: +msgid "Save Selection" +msgstr "Guardar Selección" -msgid "Low-High" -msgstr "Bajo-Alto" +#contributors: +msgid "Save Space-Time Table/Weights" +msgstr "Guardar Tabla Espacio-Tiempo/pesos" -msgid "obs#" -msgstr "nº obs." +#contributors: +msgid "Save Spanning Tree" +msgstr "Guardar Ãrbol de Expansión" -msgid "Univariate" -msgstr "Univariante" +#contributors: +msgid "Save Spanning Tree to a Weights File" +msgstr "Guardar Ãrbol de Expansión a un Fichero de Pesos" -msgid "Tabu Length:" -msgstr "Distancia Tabú" +#contributors: +msgid "Save Statistics file" +msgstr "Guardar archivo de Estadísticas" -msgid "Group 2:" -msgstr "Grupo 2:" +#contributors: +msgid "Save Table As CSV File" +msgstr "Guardar Tabla como CSV" -msgid "Error: " -msgstr "Error: " +#contributors: +msgid "Save Test Results" +msgstr "Guardar Resultados del Test" -msgid "Parameters:" -msgstr "Parámetros:" +#contributors: +msgid "Save Thiessen Polygons" +msgstr "Guardar Polígonos Thiessen" -msgid "Output:" -msgstr "Resultados:" +#contributors: +msgid "Save as data source (%s) failed.\n\nDetails:" +msgstr "" -msgid "Vertical Cells" -msgstr "Celdas Verticales" +#contributors: +msgid "Save data source progress dialog" +msgstr "Diálogo de progreso de guardar fuente de datos" -msgid "Set transparency of unhighlighted objects in selection:" -msgstr "Fijar transparencia de objetos sin resaltar en la selección" +#contributors: +msgid "Save is not supported on current data source type: %s. Please try to use \"File->Save As\" other data source. However, the project file can still be saved as other project file." +msgstr "No es posible Guardar en el tipo de fuente de datos activo: %s. Intentar utilizar \"Archivo->Guardar Como\" otra fuente de datos. No obstante, el archivo de proyecto puede ser guardado con otro nombre." -msgid "Please specify the p-value to be used in tests; \n" -msgstr "Especifiar el p-valor a utilizar en los tests; \n" +#contributors: +msgid "Save to File" +msgstr "Guardar en Archivo" -msgid "Standardized Data" -msgstr "Datos estandarizados" +#contributors: +msgid "Save/Show Map" +msgstr "" -msgid "Duplicate Thiessen Polygons Found" -msgstr "Encontrados Polígonos Thiesen duplicados" +#contributors: +msgid "Saved successfully." +msgstr "Guardado con éxito" -msgid "datasource.type %s unknown.." -msgstr "fuentedatos.tipo %n desconocido.." +#contributors: +msgid "Saving data source cancelled." +msgstr "Cancelado el guardado de fuente de datos." -msgid "Chosen field is not a numeric type. Please select a numeric type field." -msgstr "El campo escogido no es numérico. Seleccionar un campo de tipo numérico." +#contributors: +msgid "Saving data..." +msgstr "Guardando datos..." -msgid "Cooling rate for Simulated Annealing algorithm has to be a float number between 0 and 1 (e.g. 0.85)." -msgstr "La tasa de enfriamiento para algoritmo de Recocido Simulado ha de ser un nº flotante entre 0 y 1 (ej. 0.85)." +#contributors: +msgid "Saving failed: GeoDa can't save as empty datasource." +msgstr "Error en Guardando: GeoDa no puede guardar fuentes de datos vacías." -msgid "Cooling Rate:" -msgstr "Tasa de Enfriamiento" +#contributors: +msgid "Saving to data source (%s) failed.\n\nDetails: %s" +msgstr "" -msgid "There was a problem requesting the weights file." -msgstr "Se ha producido un problema al llamar al fichero de pesos" +#contributors: +msgid "Scale Basemap" +msgstr "" -msgid "selected:" -msgstr "seleccionado:" +#contributors: +msgid "Scale Options" +msgstr "Opciones de Escala" -msgid "ID is not specified!" -msgstr "ID no especificado" +#contributors: +msgid "Scatter Plot" +msgstr "Diagrama de Dispersión" -msgid "Column Name" -msgstr "Nombre de Columna" +#contributors: +msgid "Scatter Plot - x: %s, y: %s" +msgstr "Diagrama de Dispersión - x: %s, y: %s" -msgid "There is a view could not be closed. Please manually close and try again." -msgstr "No se puede cerrar una vista. Cerrarla manualmente e intentarlo de nuevo." +#contributors: +msgid "Scatter Plot Matrix" +msgstr "Matriz de Diagramas de Dispersión" -msgid "Please enter iteration number" -msgstr "Introducir nº de iteración" +#contributors: +msgid "Scatter Plot Matrix Help" +msgstr "Ayuda Matriz de Gráficos de Dispersión" -msgid "Layer names" -msgstr "Nombres de capa" +#contributors: +msgid "Scatter Plot Matrix Variables Add/Remove" +msgstr "Añadir/Eliminar Variables Matriz Gráficos de Dispersión" -msgid "Current Transparency: %.2f" -msgstr "Transparencia actual: %.2f" +#contributors: +msgid "Scatter Plot Variables" +msgstr "Variables Diagrama de Dispersión" -msgid "Save Spanning Tree" -msgstr "Guardar Ãrbol de Expansión" +#contributors: +msgid "Scatter Plot- x: %s, y: %s" +msgstr "Diagrama de Dispersión- x: %s, y: %s" -msgid "Please provide paths for both Project file and Datasource." -msgstr "Proporcionar rutas para fichero de Proyecto y Fuente de Datos" +#contributors: +msgid "Second Variable (Y)" +msgstr "Segunda Variable (y)" -msgid "Database port is empty. Please input one." -msgstr "Puerto de base de datos vacío. Introducir uno." +#contributors: +msgid "Second Variable (Y/Latitude)" +msgstr "Segunda Variable (Y/Latitud)" -msgid "Please select an Base field." -msgstr "Seleccionar un campo Base" +#contributors: +msgid "Select" +msgstr "Seleccionar" -msgid "Saved successfully." -msgstr "Guardado con éxito" +#contributors: +msgid "Select All" +msgstr "Seleccionar Todo" -msgid "Failed to open data source. Please check the data/datasource and check if the data type/format is supported by GeoDa.\n" -msgstr "Error al abrir fuente de datos. Comprobar si el tipo/formato de los datos/fuente de datos está admitido en Geoda.\n" +#contributors: +msgid "Select All In Range" +msgstr "Seleccionar Todo en Intervalo" -msgid "Histogram Variable" -msgstr "Variable de Histograma" +#contributors: +msgid "Select All Undefined" +msgstr "Seleccionar Todo Celdas en Blanco" -msgid "Disable crash detection for bug report:" -msgstr "Desactivar detección de fallos para informe de errores" +#contributors: +msgid "Select All..." +msgstr "Seleccionar Todo..." -msgid "No layer was found in the selected data source." -msgstr "Capa no encontrada en la fuente de datos seleccionada" +#contributors: +msgid "Select From Current Selection" +msgstr "Seleccionar de Selección Actual" -msgid "Unselected" -msgstr "Desmarcado" +#contributors: +msgid "Select ID Variable" +msgstr "Seleccionar Variable ID" -msgid " and two time periods: " -msgstr " y 2 períodos de tiempo: " +#contributors: +msgid "Select ID Variable (Optional)" +msgstr "" -msgid "There is an error during PCA calculation. Please check if the data is valid." -msgstr "Error durante el cálculo del ACP. Comprobar que los datos son válidos." +#contributors: +msgid "Select Neighborless Observations" +msgstr "Seleccionar Observaciones sin Vecinos" -msgid "The length of field name should be between 1 and %d.\n" -msgstr "La longitud del nombre de campo debería estar entre 1 y %d.\n" +#contributors: +msgid "Select Variables" +msgstr "Selección de Variables" -msgid "Connectivity Graph" -msgstr "Gráfico de Conectividad" +#contributors: +msgid "Select Variables (Multi-Selection)" +msgstr "Seleccionar Variables (Multi-Selección)" -msgid "Number of columns has to be more than 2. \n" -msgstr "El nº de columnas debe ser mayor que 2. \n" +#contributors: +msgid "Select a file:" +msgstr "" -msgid "Variable Properties" -msgstr "Propiedades de Variable" +#contributors: +msgid "Select an existing *.gdb directory, or create an New Folder named *.gdb" +msgstr "Seleccionar un directorio *.gdb existente o crear una Nueva Carpeta llamada *.gdb" -msgid "Please select a field with addresses." -msgstr "Seleccionar un campo con direcciones." +#contributors: +msgid "Select color scheme:" +msgstr "Seleccionar paleta de colores" -msgid "Save Dummy" -msgstr "Guardar Ficticia" +#contributors: +msgid "Select datasource" +msgstr "Seleccionar fuente de datos" -msgid "KWT files (*.kwt)|*.kwt" -msgstr "Ficheros KWT (*.kwt)|*.kwt" +#contributors: +msgid "Select encoding (optional): " +msgstr "" -msgid "Special" -msgstr "Especial" +#contributors: +msgid "Select field is not integer type. Default record order will be used instead." +msgstr "" -msgid "Welcome to GeoDa" -msgstr "Bienvenidos a GeoDa" +#contributors: +msgid "Select fields:" +msgstr "Seleccionar campos" -msgid "Unknow exception. Please contact GeoDa support." -msgstr "Excepción desconocida. Contactar con el soporte de GeoDa." +#contributors: +msgid "Select from current selection" +msgstr "Seleccionar de selección actual" -msgid "Check Bug Report on Github" -msgstr "Consulte el Informe de Errores en Github" +#contributors: +msgid "Select key:" +msgstr "Seleccionar clave" -msgid "PCA Settings" -msgstr "Configuración de ACP" +#contributors: +msgid "Select layer" +msgstr "Select layer" -msgid "Input is not valid." -msgstr "Entrada no válida" +#contributors: +msgid "Select the language" +msgstr "Seleccionar idioma" -msgid "Connectivity Histogram" -msgstr "Histograma de Conectividades" +#contributors: +msgid "Select variable " +msgstr "Seleccionar variable " -msgid "Please enter a sigma value." -msgstr "Introducir el valor de sigma." +#contributors: +msgid "Select variable for dissolving:" +msgstr "" -msgid "Invalid Weights Information:\n" -msgstr "Información de Pesos inválida:\n" +#contributors: +msgid "Select variables to delete " +msgstr "Seleccionar variables a eliminar" -msgid "First Variable (X/Longitude)" -msgstr "Primera Variable (X/Longitud)" +#contributors: +msgid "Select variables:" +msgstr "" -msgid "Low-Low" -msgstr "Bajo-Bajo" +#contributors: +msgid "Select, hold CMD for brushing" +msgstr "" -msgid "Differential Moran Variable Settings" -msgstr "Configuración de Variable de Moran Diferencial" +#contributors: +msgid "Select, hold CTRL for brushing" +msgstr "Seleccionar, mantener CTRL para brushing" -msgid "Bubble Size" -msgstr "Tamaño de Burbuja" +#contributors: +msgid "Selectable Fill Color" +msgstr "Seleccionable Color de Relleno" -msgid "%s (Weights: %s)" -msgstr "%s (Pesos: %s)" +#contributors: +msgid "Selected" +msgstr "Seleccionado" -msgid "Date\\/Time formats (using comma to separate formats):" -msgstr "Formatos de Fecha\\/Hora (coma utilizada para separar formatos)" +#contributors: +msgid "Selected =" +msgstr "Seleccionados" -msgid "Categories \"%s\" is currently in use by another view. Please close or change all views using this custom categories before deleting." -msgstr "Categorías \"%s\" está actualmente en uso por otra vista. Cerrar/cambiar las vistas utilizando estas categorías personalizadas antes de borrar." +#contributors: +msgid "Selected vs. Unselected" +msgstr "Seleccionado vs. Desmarcado" -msgid "Please select a results field." -msgstr "Seleccionar un campo de resultados" +#contributors: +msgid "Selection" +msgstr "Selección" -msgid "Scatter Plot - x: %s, y: %s" -msgstr "Diagrama de Dispersión - x: %s, y: %s" +#contributors: +msgid "Selection Mode" +msgstr "Modo de Selección" -msgid "Negative" -msgstr "Negativo" +#contributors: +msgid "Selection Shape" +msgstr "Selección Forma" -msgid "Conditional Local Join Count Map" -msgstr "Mapa Joint Count Local Condicional" +#contributors: +msgid "Selection Tool" +msgstr "Herramienta de Selección" -msgid "Add a name for your group of variables. \n" -msgstr "Añadir un nombre a su grupo de variables. \n" +#contributors: +msgid "Selection Variable" +msgstr "Variable de Selección" -msgid "Please input minimum bound value." -msgstr "Introducir un valor para cota mínima." +#contributors: +msgid "Send Crash Report" +msgstr "Enviar Informe de Errores" -msgid "Inference Settings" -msgstr "Configuración de Inferencia" +#contributors: +msgid "September" +msgstr "" -msgid "SQLite\\/SpatiaLite (*.sqlite)|*.sqlite" -msgstr "SQLite\\/SpatiaLite (*.sqlite)|*.sqlite" +#contributors: +msgid "Set Association Dialog" +msgstr "Set Association Dialog" -msgid "Maps:" -msgstr "Mapas:" +#contributors: +msgid "Set Display Precision" +msgstr "Fijar Pantalla de Precisión" -msgid "Excess Risk Map Variable Settings" -msgstr "Configuración Variable de Mapa de Riesgo Excesivo" +#contributors: +msgid "Set Display Precision of Y-Axis" +msgstr "Fijar Posiciones Decimales en Eje-Y" -msgid "Inserting new column %s into Table" -msgstr "Insertando nueva columna %n en Tabla" +#contributors: +msgid "Set Display Precision on Axes" +msgstr "Mostrar Pantalla de Precisión de Ejes" -msgid "Use geometric centroids" -msgstr "Utilizar centroides geométricos" +#contributors: +msgid "Set Display Precision:" +msgstr "Mostrar Pantalla de Precisión" -msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name. The first character must be a letter, and the remaining characters can be either letters, numbers or underscores. For DBF table, a valid variable name is between one and ten characters long." -msgstr "El nombre de variable \"%s\" está dupliado o no es válido. Introducir nombre alternativo no duplicado. El primer carácter debe ser una letra y el resto pueden ser letras, números o guiones bajos. Un nombre válido para las tablas DFB debe tener entre uno y diez caracteres de largo." +#contributors: +msgid "Set Highlight Association" +msgstr "Set Highlight Association" -msgid "Bonferroni bound:" -msgstr "Límite de Bonferroni" +#contributors: +msgid "Set Number Separators" +msgstr "Fijar Separadores de Números" -msgid "Your Email address (Optional):" -msgstr "Dirección de correo electrónico (Opcional):" +#contributors: +msgid "Set Number Separators in Table" +msgstr "Fijar Separadores de Números en Tabla" -msgid "ds:" -msgstr "ds" +#contributors: +msgid "Set Number of Permutation" +msgstr "Fijar Número de Permutaciones" -msgid "Please restart GeoDa to finish installing updates." -msgstr "Reiniciar GeoDa para terminar de instalar actualizaciones." +#contributors: +msgid "Set number of CPU cores manually:" +msgstr "Establecer manualmente el número de núcleos de CPU" -msgid "Method:" -msgstr "Método:" +#contributors: +msgid "Set seed for randomization:" +msgstr "Fijar semilla para aleatorización:" -msgid "Save data source progress dialog" -msgstr "Diálogo de progreso de guardar fuente de datos" +#contributors: +msgid "Set the threshold to bridge the gap between disconnected polygons (often caused by digitizing errors). The value depends on your measurement unit (e.g. 1 foot or 0.0000001 degrees). Use the weights histogram to detect neighborless observations." +msgstr "Fijar el umbral para acortar distancias entre polígonos desconectados (a veces por errores de digitalización). El valor depende de la unidad de medida (ej., 0,3 metros ó 0,0000001 grados. Utilizar histograma de pesos para detectar observaciones sin vecinos." -msgid "Output Shp file" -msgstr "Fichero Shp de resultados" +#contributors: +msgid "Set transparency of highlighted objects in selection:" +msgstr "Fijar transparencia de objetos resaltados en la selección:" -msgid "Y-Coordinates" -msgstr "Coordenadas-Y" +#contributors: +msgid "Set transparency of unhighlighted objects in selection:" +msgstr "Fijar transparencia de objetos sin resaltar en la selección" -msgid "Unable to overwrite " -msgstr "No se puede sobrescribir" +#contributors: +msgid "Set value to cell failed." +msgstr "" -msgid "The number of observations specified in chosen weights file is %d, but the number in the current Table is %d, which is incompatible." -msgstr "El nº de observaciones especificadas in el fichero de pesos elegido es %d, pero el nº en la Tabla activa es %d, lo que es incompatible." +#contributors: +msgid "Setup Locale of GeoDa Table" +msgstr "Configuración Local de Tablas de GeoDa" -msgid "Summary" -msgstr "Resumen" +#contributors: +msgid "Setup co-locations:" +msgstr "Establecer colocalizaciones:" -msgid "Dendrogram" -msgstr "Dendograma" +#contributors: +msgid "Shape" +msgstr "Formas" -msgid "Second Variable (Y/Latitude)" -msgstr "Segunda Variable (Y/Latitud)" +#contributors: +msgid "Shape Centers" +msgstr "Centros de Forma" -msgid "Conditional Histogram" -msgstr "Histograma Condicional" +#contributors: +msgid "Show As Conditional Map" +msgstr "Mostrar como Mapa Condicional" -msgid "Number of Clusters:" -msgstr "Número de Clústers:" +#contributors: +msgid "Show Axes" +msgstr "Mostrar Ejes" -msgid "Weighting:" -msgstr "Ponderación:" +#contributors: +msgid "Show Axes Through Origin" +msgstr "Mostrar Ejes sobre el Origen" -msgid "High" -msgstr "Alto" +#contributors: +msgid "Show CSV Configuration in Merge Data Dialog:" +msgstr "Mostrar Formato CSV en Cuadro de Unión de Tablas" -msgid "space-time variable found with no name" -msgstr "Variable espacio-temporal encontrada sin nombre" +#contributors: +msgid "Show Graph" +msgstr "Mostrar Grafo" -msgid "Synchronize %s with Time Control" -msgstr "Sincronizar %n with Control de Tiempo" +#contributors: +msgid "Show LOWESS Smoother" +msgstr "Mostrar Alisado LOWESS" -msgid "Specified key (%d) not found in currently loaded Table." -msgstr "No se encuentra la clave especificada (%d) en la Tabla activa" +#contributors: +msgid "Show Legend" +msgstr "Show Legend" -msgid "Variable name is either a duplicate or is invalid. Please\n" -msgstr "El nombre de la variable no es válido o está duplicado. Por favor\n" +#contributors: +msgid "Show Linear Smoother" +msgstr "Mostrar Alisado Lineal" -msgid "GeoDa Project File to Open" -msgstr "Abrir Archivo de Proyecto de GeoDa" +#contributors: +msgid "Show Map Boundary" +msgstr "" -msgid "KMedoids Dialog" -msgstr "Cuadro de KMedoids" +#contributors: +msgid "Show Recent/Sample Data panel in Connect Datasource Dialog:" +msgstr "" -msgid "This format is not supported." -msgstr "Formato no admitido" +#contributors: +msgid "Show Selection and Neighbors" +msgstr "Mostrar Selección y Vecinos" -msgid "Enter your Google API keys (one key per line)" -msgstr "Introducir claves de API de Google (una clave por línea)" +#contributors: +msgid "Show Status Bar" +msgstr "Mostrar Barra de Estado" -msgid "Chosen field is not a numeric type. Please select a numeric type field." -msgstr "El campo elegido no es numérico. Seleccionar un campo numérico." +#contributors: +msgid "Show Vertical Axis" +msgstr "Mostrar Eje Vertical" -msgid "MDS Plot" -msgstr "Gráfico MDS" +#contributors: +msgid "Show connect line" +msgstr "Show connect line" -msgid "(Field name is not valid)" -msgstr "(Nombre de campo no válido)" +#contributors: +msgid "Significance Filter" +msgstr "" -msgid "Please specify a valid data source name." -msgstr "Especificar un nombre válido de fuente de datos." +#contributors: +msgid "Significance Map" +msgstr "Mapa de Significación" -msgid "(Optional) First record has field names? " -msgstr "(Opcional) ¿El primer dato tiene nombre de campo?" +#contributors: +msgid "Simulated Annealing" +msgstr "" -msgid "var name:" -msgstr "nombre var.:" +#contributors: +msgid "Skater Settings" +msgstr "Configuración Skater" -msgid "Difference-in-Means Test:" -msgstr "Test de Diferencia de Medias:" +#contributors: +msgid "Smoother" +msgstr "Alisado" -msgid "No rates currently calculated to save." -msgstr "No hay tasas calculadas para guardar." +#contributors: +msgid "Some calculated values were undefined and this is most likely due to neighborless observations in the weight matrix. Rate calculation successful for observations with neighbors." +msgstr "Algunos valores calculados están sin definir y esto se debe muy probablemente a observaciones sin vecinos en la matriz de pesos. Cálculo de tasas correcto para obs. con vecinos." -msgid "Undefined" -msgstr "Sin definir" +#contributors: +msgid "Sort" +msgstr "Ordenar" -msgid "Conditional LISA Map Variables" -msgstr "Variables del Mapa LISA Condicional" +#contributors: +msgid "South European Latin-3 (ISO-8859-3)" +msgstr "Sur de Europa Latín-3 (ISO-8859-3)" -msgid "Change Categories Title" -msgstr "Cambiar Título de Categorías" +#contributors: +msgid "Space-time variables with duplicate name \"%s\" found." +msgstr "Encontradas variables Espacio-temporales con el nombre \"%s\" duplicado" -msgid "3D Plot" -msgstr "Gráfico 3D" +#contributors: +msgid "Spatial Constraint:" +msgstr "" -msgid "Date\\/Time" -msgstr "Fecha\\/Hora" +#contributors: +msgid "Spatial Correlogram" +msgstr "Correlograma Espacial" -msgid "Affinity with Kernel:" -msgstr "Afinidad con Kernel:" +#contributors: +msgid "Spatial Empirical Bayes" +msgstr "Empírico Bayes Espacial" -msgid "Has Colocation" -msgstr "Tiene colocación" +#contributors: +msgid "Spatial Error" +msgstr "Error Espacial" -msgid "The currently entered threshold value is not a valid number. Please move the slider, or enter a valid number." -msgstr "The valor umbral introducido no es un nº válido. Mover el control deslizante o introducir un número válido." +#contributors: +msgid "Spatial Join" +msgstr "Unión Espacial" -msgid "Change Seed" -msgstr "Cambiar semilla" +#contributors: +msgid "Spatial Join can not be applied on two points layers. Please select another layer." +msgstr "" -msgid "Limited date/time type recognition can be done for Date (YYYY-MM-DD), Time (HH:MM:SS+nn) and DateTime (YYYY-MM-DD HH:MM:SS+nn) in configuration.\n" -msgstr "Puede realizarse reconocimiento limitado de fecha/hora para Fecha (AAAA-MM-DD), Hora (HH:MM:SS+nn) y FechaHora (AAAA-MM-DD HH:MM:SS+nn) en la configuración.\n" +#contributors: +msgid "Spatial Join can not be applied on unknonwn layers. Please select another layer." +msgstr "" -msgid "There is at least one view open that depends on this matrix. Ok to close these views and remove?" -msgstr "Hay, al menos, una vista abierta que depende de esta matriz. ¿De acuerdo con cerrar y eliminar estas vistas?" +#contributors: +msgid "Spatial Join does not work with Table only datasource." +msgstr "" -msgid "Overwrite?" -msgstr "¿Sobrescribir?" +#contributors: +msgid "Spatial Lag" +msgstr "Retardo Espacial" -msgid "Add OGR column error. Field type is unknown or not supported." -msgstr "Añadir error de columna OGR. Tipo de campo desconocido o no admitido." +#contributors: +msgid "Spatial Rate" +msgstr "Tasa Espacial" -msgid "New variable name" -msgstr "Nuevo nombre de variable" +#contributors: +msgid "Spatial Rate Smoothed Variable Settings" +msgstr "Configuración Variable Alisada de Tasa Espacial" -msgid "The sample size for random sampling is too small.\n" -msgstr "Tamaño de la muestra para muestreo aleatorio demasiado pequeño.\n" +#contributors: +msgid "Spatial lag and error regressions require symmetric weights (not KNN). You can still use KNN weights to obtain spatial diagnostics for classic regressions." +msgstr "Los modelos del retardo y del error espacial necesitan pesos simétricos (no KNN). Los pesos KNN pueden utilizarse para calcular tests espaciales en el modelo básico." -msgid "Select All" -msgstr "Seleccionar Todo" +#contributors: +msgid "Special" +msgstr "Especial" -msgid "Warning" -msgstr "Aviso" +#contributors: +msgid "Specified id field (%s) not found in currently loaded Table." +msgstr "Campo id especificado (%s) no se encuentra en la Tabla activa" -msgid " LISA Cluster Map" -msgstr "Mapa de Clusters LISA" +#contributors: +msgid "Specified key (%d) not found in currently loaded Table." +msgstr "No se encuentra la clave especificada (%d) en la Tabla activa" -msgid "Create Weights" -msgstr "Crear Pesos" +#contributors: +msgid "Specified key (%s) not found in currently loaded Table." +msgstr "La clave especificada (%s) no se encuentra en la Tabla activa" -msgid "The set of values in the import key fields has no match in current table. Please choose keys with matching sets of values." -msgstr "Grupo de valores de campos clave importados sin coincidencia en la tabla activa. Buscar claves con grupos de valores coincidentes." +#contributors: +msgid "Specified key value field \"%s\" in weights file contains duplicate values in the currently loaded Table." +msgstr "El campo de valores clave especificado \"%s\" del fichero de pesos contiene valores duplicados en la Tabla activa." -msgid "The GeoDa project file cannot find one or more associated data sources.\n" -msgstr "El archivo de proyecto de GeoDa no encuentra una o más fuentes dse datos asociadas.\n" +#contributors: +msgid "Specified key value field \"%s\" on first line of weights file is not an integer type in the currently loaded Table." +msgstr "El campo especificado para el valor clave \"%s\" de la 1ª línea del archivo de pesos no es de tipo entero en la tabla activa." -msgid "Differential Moran's I (%s): %s - %s" -msgstr "I de Moran Diferencial (%s): %s - %s" +#contributors: +msgid "Specified key value field \"%s\" on first line of weights file not found in currently loaded Table." +msgstr "Campo especificado de valor clave \"%s\" de la 1ª línea del archivo de pesos no está en la Tabla activa" -msgid "Empirical Bayes Rate Standardization Variables" -msgstr "Variables Estandarizadas de Tasas de Bayes Empírico" +#contributors: +msgid "Specify Seed..." +msgstr "Especificar Semilla..." -msgid "No numeric variables found in table." -msgstr "No hay variables numéricas en la tabla." +#contributors: +msgid "Specify bandwidth" +msgstr "Especificar ancho de banda" -msgid "Save Space-Time Table\\/Weights" -msgstr "Guardar Tabla Espacio-Temporal\\/Pesos" +#contributors: +msgid "Specify manually" +msgstr "Especificar manualmente" -msgid "Update GeoDa completed" -msgstr "Actualización de GeoDa completada" +#contributors: +msgid "Spectral" +msgstr "Espectral" -msgid "Voronoi Contiguity Error" -msgstr "Error de Contigüidad de Voronoi" +#contributors: +msgid "Spectral Clustering Map (%d clusters)" +msgstr "" -msgid ">>" -msgstr ">>" +#contributors: +msgid "Spectral Clustering Settings" +msgstr "Configuración Clúster Espectral" -msgid "Set transparency of highlighted objects in selection:" -msgstr "Fijar transparencia de objetos resaltados en la selección:" +#contributors: +msgid "Speed" +msgstr "Velocidad" -msgid "Regression Output Text File" -msgstr "Archivo de Texto Resultados de la Regresión" +#contributors: +msgid "Stable Version and Bug Fixes Only" +msgstr "Versión Estable y Sólo Corrección de Errores" -msgid "Adjust Values of Y Axis" -msgstr "Ajustar Valores del Eje Y" +#contributors: +msgid "Stack" +msgstr "Agregar" -msgid "Weights:" -msgstr "Pesos:" +#contributors: +msgid "Standard Deviation" +msgstr "Desviación Estándar" -msgid "Data Preview - number of preview records:" -msgstr "Vista Previa de Datos - nº de datos en vista previa:" +#contributors: +msgid "Standard Deviation Color" +msgstr "Color Desviación Estándar" -msgid "GWT files (*.gwt)|*.gwt" -msgstr "Ficheros GWT (*.gwt)|*.gwt" +#contributors: +msgid "Standard Deviation Map" +msgstr "Mapa de Desviación Estándar" -msgid "Invalid Variable" -msgstr "Variable no Válida" +#contributors: +msgid "Standardized Data" +msgstr "Datos estandarizados" -msgid "Disable auto upgrade:" -msgstr "Desactivar actualización automática" +#contributors: +msgid "Statistics" +msgstr "Estadísticos" -msgid "Empirical Spatial Rate Smoothed Variable Settings" -msgstr "Configuración de Variable Alisada de Tasa Empírica Espacial" +#contributors: +msgid "Status Bar" +msgstr "Barra de Estado" -msgid "There was a problem reading the layer" -msgstr "Problema de lectura de la capa" +#contributors: +msgid "Stopping criterion for power iteration:" +msgstr "Criterio de parada para iteración de potencia" -msgid "Save Duplicate Thiessen Polygon Ids" -msgstr "Guardar Ids de Polígonos Thiessen Duplicados" +#contributors: +msgid "Strong" +msgstr "Grueso" -msgid "(Optional) Longitude\\/X:" -msgstr "(Opcional) Longitud\\/X:" +#contributors: +msgid "Submit Bug Error" +msgstr "Enviar Informe de Errores" -msgid " LISA Significance Map" -msgstr "Mapa de Significación LISA" +#contributors: +msgid "Submit Bug Report" +msgstr "Enviar Informe de Errores" -msgid "Internal Error: can't update an in-memory cell." -msgstr "Error Interno: no puede actualizar una celda en memoria" +#contributors: +msgid "Success" +msgstr "Éxito" -msgid "Details: " -msgstr "Detalles: " +#contributors: +msgid "Success / Warning" +msgstr "" -msgid "Enable High DPI\\/Retina support (Mac only):" -msgstr "Activar soporte para DPI\\/Retina alto (sólo Mac):" +#contributors: +msgid "Successful aggregation." +msgstr "Agregación realizada con éxito" -msgid "There was a problem generating voronoi contiguity neighbors. Please report this." -msgstr "Problema al generar vecinos de contigüidad voronoi. Enviar informe sobre esta cuestión." +#contributors: +msgid "Suggested field name:" +msgstr "Nombre de campo sugerido" -msgid "Please input a field name for saving latitude" -msgstr "Introducir nombre de campo para guardar latitud" +#contributors: +msgid "Sum" +msgstr "Suma" -msgid "Assign Values to Currently Selected \\/ Unselected" -msgstr "Asignar Valores a Actualmente Seleccionados\\/No Seleccionados" +#contributors: +msgid "Summary" +msgstr "Resumen" -msgid "Success" -msgstr "Éxito" +#contributors: +msgid "Synchronize %s with Time Control" +msgstr "Sincronizar %n with Control de Tiempo" -msgid "Only OGR datasource can be saved as." -msgstr "Sólo pueden guardarse fuentes de datos OGR." +#contributors: +msgid "System" +msgstr "Sistema" -msgid "Input ASCII file" -msgstr "Introducir archivo ASCII" +#contributors: +msgid "System:" +msgstr "Sistema:" -msgid "Internal Error: Add new field (%s) failed.\n" -msgstr "Error Interno: Fallo en añadir nuevo campo (%s).\n" +#contributors: +msgid "T&able" +msgstr "Tabla" -msgid "Fixed x-axis scale over time" -msgstr "Escala de eje-x fija en el tiempo" +#contributors: +msgid "Table" +msgstr "Tabla" -msgid "Scale Options" -msgstr "Opciones de Escala" +#contributors: +msgid "Table Name" +msgstr "Nombre de Tabla" -msgid "The length of an non-integral numeric field must be at least %d and at most %d. Keeping original value." -msgstr "La longitud de un campo numérico no entero debe ser al menos %d y como mucho %d. Mantener valor original." +#contributors: +msgid "Tabu Length:" +msgstr "Distancia Tabú" -msgid "Please select at least 2 variables." -msgstr "Seleccionar al menos 2 variables" +#contributors: +msgid "Tabu Search" +msgstr "" -msgid "Error: Wrong format." -msgstr "Error: formato equivocado." +#contributors: +msgid "Tabu length for Tabu Search algorithm has to be an integer number larger than 1 (e.g. 85)." +msgstr "Distancia tabú para el algoritmo Búsqueda Tabú debe ser un número entero mayor que 1 (ej. 85)" -msgid "(Gaussian) Sigma:" -msgstr "Sigma (Gaussiano):" +#contributors: +msgid "Tabu length:" +msgstr "" -msgid "Save is not supported on current data source type: %s. Please try to use \"File->Save As\" other data source. However, the project file can still be saved as other project file." -msgstr "No es posible Guardar en el tipo de fuente de datos activo: %s. Intentar utilizar \"Archivo->Guardar Como\" otra fuente de datos. No obstante, el archivo de proyecto puede ser guardado con otro nombre." +#contributors: +msgid "Target" +msgstr "Objetivo" -msgid "Merge - " -msgstr "Unir - " +#contributors: +msgid "Target Variable" +msgstr "Variable Objetivo" -msgid "Convert Boundary to SHP" -msgstr "Convertir Boundary a SHP" +#contributors: +msgid "Thank you for helping us improve GeoDa with your bug report! \n\nYou can track our response and add screenshots or details here (or email us at spatial@uchicago.edu):" +msgstr "" -msgid "Positive" -msgstr "Positivo" +#contributors: +msgid "The GeoDa project file cannot find one or more associated data sources.\n\nDetails: GeoDa is looking for: %s\n\nTip: You can open the .gda project file in a text editor to modify the path(s) of the data source associated with your project." +msgstr "" -msgid "Categories title \"%s\" already exists. Please choose a different title." -msgstr "Título de categorías \"%s\" existente. Seleccionar un título diferente." +#contributors: +msgid "The Table should always be open, although somtimes it is hidden while the project is open. This condition has been violated. Please report this to the program developers." +msgstr "" -msgid "Please first select observations in one of the other data or map views." -msgstr "Seleccionar primero observaciones en una de las otras vistas de datos o mapa." +#contributors: +msgid "The between-cluster sum of squares:\t" +msgstr "" -msgid "OLS Model has been selected." -msgstr "El Modelo MCO ha sido seleccionado." +#contributors: +msgid "The categories of the selected variables do not overlap in space. Please select other variables." +msgstr "Las categorías de las variables seleccionadas no se superponen en el espacio. Seleccionar otras variables." -msgid "Emp Bayes Rate Std Moran's I (%s): %s / %s" -msgstr "I de Moran Std. en Tasa de Bayes Empírico (%s): %s / %s" +#contributors: +msgid "The connectivity of selected spatial weights is incomplete, please adjust the spatial weights." +msgstr "La conectividad de los pesos espaciales seleccionados está incompleta; arreglar matriz de pesos." -msgid "Affinity with K-NN:" -msgstr "Afinidad con K-NN:" +#contributors: +msgid "The currently entered threshold value is not a valid number. Please move the slider, or enter a valid number." +msgstr "The valor umbral introducido no es un nº válido. Mover el control deslizante o introducir un número válido." -msgid "Nokia\\/HERE App ID" -msgstr "Nokia\\/HERE App ID" +#contributors: +msgid "The currently entered threshold value is not a valid number. Please move the slider, or enter a valid number." +msgstr "" -msgid "Please select features first." -msgstr "Seleccionar 1º las características." +#contributors: +msgid "The currently entered threshold value of %f is less than %f which is the minimum value for which there will be no neighborless observations (isolates). \n\nPress Yes to proceed anyhow, press No to abort." +msgstr "" -msgid "There is at least one view could not be closed. Please manually close and try again." -msgstr "Al menos una vista no puede ser cerrada. Cerrarla manualmente e intentarlo de nuevo." +#contributors: +msgid "The data source is read only. Please try to save as other data source." +msgstr "La fuente de datos sólo se ha leído. Guardar como otra fuente de datos" -msgid "Some calculated values were undefined and this is most likely due to neighborless observations in the weight matrix. Rate calculation successful for observations with neighbors." -msgstr "Algunos valores calculados están sin definir y esto se debe muy probablemente a observaciones sin vecinos en la matriz de pesos. Cálculo de tasas correcto para obs. con vecinos." +#contributors: +msgid "The first line should have comma separated number of rows and ID name!" +msgstr "¡La 1ª línea debería tener un nº de filas separadas por comas y nombre de ID!" -msgid "Click RegressionDlg::OnSaveToTxtFileClick" -msgstr "Teclear RegressionDlg::OnSaveToTxtFileClick" +#contributors: +msgid "The geometries will not be saved when exporting to a Table-only data source.\n\nDo you want to continue?" +msgstr "" -msgid "Before proceed with operation (add/remove, move, or rename), please close %d views that depend on it." -msgstr "Antes de proceder con la operación (añadir/eliminar, mover o renombrar), cerrar las %d vistas que dependen de ella." +#contributors: +msgid "The last seed used by the pseudo random\nnumber generator was " +msgstr "" -msgid "Save " -msgstr "Guardar " +#contributors: +msgid "The length of a string field must be at least %d and at most %d. Keeping original value." +msgstr "El tamaño de un campo de carácter debe ser, al menos, %d y como mucho, %d. Mantener valor original." -msgid "Grid file was successfully created." -msgstr "Archivo de rejilla creado con éxito." +#contributors: +msgid "The length of an integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "El tamaño de un campo numérico entero debe ser, al menos, %d y como mucho, %d. Mantener valor original." -msgid "GeoDa has run into a problem and will close." -msgstr "GeoDa ha encontrado un problema y se cerrará." +#contributors: +msgid "The length of an non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "La longitud de un campo numérico no entero debe ser al menos %d y como mucho %d. Mantener valor original." -msgid "Save As has been cancelled." -msgstr "Guardar Como ha sido cancelado." +#contributors: +msgid "The length of field name should be between 1 and %d.\nCurrent field length (%d) is not valid" +msgstr "" -msgid "Third Variable (Z)" -msgstr "Tercera Variable (Z)" +#contributors: +msgid "The new theme chosen will no longer include rates smoothing. Please use the Rates submenu to choose a theme with rates again." +msgstr "" -msgid "Saving failed: GeoDa can't save as empty datasource." -msgstr "Error en Guardando: GeoDa no puede guardar fuentes de datos vacías." +#contributors: +msgid "The number of covariates should be more than the number of observations." +msgstr "El nº de covariables debería ser superior al nº de observaciones." -msgid "Project file path is empty." -msgstr "Ruta vacía de archivo de proyecto." +#contributors: +msgid "The number of decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "El nº de lugares decimales de un campo numérico no entero debe ser, al menos, %d y como mucho, %d. Mantener valor original." -msgid "Empirical Bayes Smoothed Variable Settings" -msgstr "Configuración Variable Alisada de Bayes Empírico" +#contributors: +msgid "The number of displayed decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "El nº de lugares decimales mostrados para un campo numérico no entero debe ser, al menos, %d y como mucho, %d. Mantener el valor original." -msgid "csv file:" -msgstr "fichero csv:" +#contributors: +msgid "The number of identified clusters is less than " +msgstr "El nº de clústers identificados es menor que " -msgid "Downloading updates..." -msgstr "Descargando actualizaciones..." +#contributors: +msgid "The number of observations specified in chosen weights file is %d, but the number in the current Table is %d, which is incompatible." +msgstr "El nº de observaciones especificadas in el fichero de pesos elegido es %d, pero el nº en la Tabla activa es %d, lo que es incompatible." -msgid "On line %d of weights file, observation id %d encountered which does not exist in field \"%s\" of the Table." -msgstr "%d en línea del fichero de pesos, encontrado id de obs. %d que no existe en el campo \"%s\" de la Tabla." +#contributors: +msgid "The number of observations specified in chosen weights file is incompatible with current Table." +msgstr "El nº de observaciones especificado en el archivo de pesos es incompatible con la Tabla activa." -msgid "Do you want to save your data?" -msgstr "¿Desea guardar sus datos?" +#contributors: +msgid "The number of records in current table is larger than the number of records in import table. Please choose import table >= %d records" +msgstr "El nº de datos de la tabla activa es mayor que el nº de datos de la tabla importada. Seleccionar importar tabla >= % datos" -msgid "Error: \"%s\" not found." -msgstr "Error: \"%s\" no encontrado." +#contributors: +msgid "The original datasource %s is not a valid file. GeoDa \"Save\" only works on file datasource." +msgstr "Fichero de fuente de datos original %s no válido. GeoDa \"Guardar\" sólo funciona con fuentes de datos de ficheros." -msgid "Please describe steps you took before something went wrong." -msgstr "Describir los pasos realizados antes de tener problemas." +#contributors: +msgid "The ratio of between to total sum of squares:\t" +msgstr "" -msgid "Delta Factor:" -msgstr "Factor Delta:" +#contributors: +msgid "The sample size for random sampling is too small.\nPlease increase the number of iterations." +msgstr "" -msgid "Before add/delete observations, please close the %d view(s) that depend on it." -msgstr "Antes de añadir/borrar observaciones, cerrar la(s) vista(s) %d que depende(n) de ellas." +#contributors: +msgid "The selected database driver is not supported on this platform. Please check GeoDa website for more information about database support and connection." +msgstr "Controlador de base de datos seleccionado no admitido en esta plataforma. Consulte la web de GeoDa para más información sobre bases de datos y conexiones admitidas." -msgid "Variable %s is a time-grouped variable. Please ungroup this variable to delete." -msgstr "La variable %s está temporalmente agrupada. Desagrupar esta variable para borrarla." +#contributors: +msgid "The selected group variable should contains %d items. Please modify the group variable in Time Editor, or select another variable." +msgstr "" -msgid "Do you want to save the results of Diff-in-Diff test?\n" -msgstr "¿Quiere guardar los resultados del test de Dif-en-Dif?\n" +#contributors: +msgid "The selected group variable should contains %d items. Please modify the group variable in Time->Time Editor, or select another variable." +msgstr "" -msgid "Variable %s is not valid. Please select another variable." -msgstr "Variable %s no válida. Seleccionar otra variable." +#contributors: +msgid "The selected variable %s is not valid. If it's a grouped variable, please modify it in Time->Time Editor. Or please select another variable." +msgstr "La variable seleccionada %s no es válida. Si es una variable agrupada, notificarlo en el Editor Tiempo->Time. O seleccionar otra variable." -msgid "Please input database port." -msgstr "Introducir puerto de base de datos." +#contributors: +msgid "The selected variable is not numeric. Please select another variable." +msgstr "La variable seleccionada no es numérica. Seleccionar otra variable." -msgid "Info" -msgstr "Info" +#contributors: +msgid "The set of values in the import key fields has no match in current table. Please choose keys with matching sets of values." +msgstr "Grupo de valores de campos clave importados sin coincidencia en la tabla activa. Buscar claves con grupos de valores coincidentes." -msgid "X-Axis" -msgstr "Eje-X" +#contributors: +msgid "The total sum of squares:\t" +msgstr "" -msgid "Local Search:" -msgstr "Búsqueda Local" +#contributors: +msgid "The total within-cluster sum of squares:\t" +msgstr "" -msgid "Please select the layer name to connect:" -msgstr "Seleccionar el nombre de capa a conectar:" +#contributors: +msgid "Themeless" +msgstr "Un Color" -msgid "Conditional GetisOrd Map" -msgstr "Mapa Condicional de GetisOrd" +#contributors: +msgid "Themeless Map" +msgstr "Mapa de un Color" -msgid "[Steps you took before something went wrong]" -msgstr "[Pasos realizados antes de tener problemas]" +#contributors: +msgid "There are spatial objects being counted more than once. Please check the results." +msgstr "" -msgid "File doesn't exist!" -msgstr "¡Fichero no existente!" +#contributors: +msgid "There are unsaved data source or weights/time definition changes." +msgstr "Sin guardar cambios en fuente de datos o definición de pesos/tiempo." -msgid "Input is duplicated." -msgstr "Entrada duplicada." +#contributors: +msgid "There is a view could not be closed. Please manually close and try again." +msgstr "No se puede cerrar una vista. Cerrarla manualmente e intentarlo de nuevo." -msgid "Select Variables" -msgstr "Selección de Variables" +#contributors: +msgid "There is an error during PCA calculation. Please check if the data is valid." +msgstr "Error durante el cálculo del ACP. Comprobar que los datos son válidos." -msgid "Insufficient Random Sampling" -msgstr "Muestreo Aleatorio insuficiente" +#contributors: +msgid "There is at least one neighborless observation. Check the islands in weights histogram and linked map." +msgstr "" -msgid "Var Calc Container" -msgstr "Contenedor de Var Calc" +#contributors: +msgid "There is at least one neighborless observation. Check the weights histogram and linked map to see if the islands are real or not. If not, adjust the distance threshold (points) or the precision threshold (polygons)." +msgstr "Hay al menos una observación sin vecinos. Comprobar el histograma de pesos y el mapa adjunto para ver si las islas son reales o no. Si no lo son, ajuste la distancia umbral (puntos) o el umbral de precisión (polígonos)." -msgid "This is the list of existing grouped variables. As new groups are created, they will appear on this list. You can open an existing .gda file and edit it here." -msgstr "Lista de variables agrupadas existentes. Al crear nuevos grupos, éstos aparecerán en esta lista. Puede abrir un fichero .gda existente y editarlo aquí." +#contributors: +msgid "There is at least one view could not be closed. Please manually close and try again." +msgstr "Al menos una vista no puede ser cerrada. Cerrarla manualmente e intentarlo de nuevo." -msgid "There was a problem reading the table" -msgstr "Problema de lectura de tabla" +#contributors: +msgid "There is at least one view open that depends on this matrix. Ok to close these views and remove?" +msgstr "Hay, al menos, una vista abierta que depende de esta matriz. ¿De acuerdo con cerrar y eliminar estas vistas?" -msgid "Operation requires a valid field name or constant." -msgstr "Operación que requiere de un nombre de campo válido o constante." +#contributors: +msgid "There is one other view open that depends on this matrix. Ok to close this view and remove?" +msgstr "Hay otra vista abierta que depende de esta matriz. ¿Está de acuerdo en cerrarla y eliminarla?" -msgid "Error: The table variable name is empty." -msgstr "Error: El nombre de la variable de la tabla está vacío." +#contributors: +msgid "There was a problem associating the weights file." +msgstr "Se ha producido un problema al asociar el archivo de pesos" -msgid "New space-time variable name" -msgstr "Nuevo nombre de variable espacio-temporal" +#contributors: +msgid "There was a problem generating voronoi contiguity neighbors. Please report this." +msgstr "Problema al generar vecinos de contigüidad voronoi. Enviar informe sobre esta cuestión." -msgid "Save Results: LocalGeary" -msgstr "Guardar Resultados: GearyLocal" +#contributors: +msgid "There was a problem reading the layer" +msgstr "Problema de lectura de la capa" -msgid "Google Places API" -msgstr "API de Google Places" +#contributors: +msgid "There was a problem reading the table" +msgstr "Problema de lectura de tabla" -msgid "Variable Choice" -msgstr "Elección de Variable" +#contributors: +msgid "There was a problem requesting the weights file." +msgstr "Se ha producido un problema al llamar al fichero de pesos" -msgid "Add Time" -msgstr "Añadir Tiempo" +#contributors: +msgid "These are the row numbers of the records without location information." +msgstr "Éstos son los nº de filas de los datos sin información de localización." -msgid "Scatter Plot Matrix Help" -msgstr "Ayuda Matriz de Gráficos de Dispersión" +#contributors: +msgid "Thiessen Polygons" +msgstr "Polígonos Thiessen" -msgid "Error: \"%s\" is an invalid variable name. The first character must be alphabetic, and the remaining characters can be either alphanumeric or underscores. For DBF table, a valid variable name is between one and ten characters long." -msgstr "Error: \"%s\" no es un nombre de variable válido. El 1º carácter debe ser alfabético y los restantes pueden ser alfanuméricos o guiones bajos. En una tabla DBF, un nombre válido debe tener entre uno y 10 caracteres de largo." +#contributors: +msgid "Third Variable (Z)" +msgstr "Tercera Variable (Z)" -msgid "Error: Maximum number of neighbors %d exceeded." -msgstr "Error: Excedido el máximo número de vecinos %d" +#contributors: +msgid "This datasource is not supported. Please export to other datasource that GeoDa supports first." +msgstr "Esta fuente de datos no está admitida. Exportar antes a una fuente de datos admitida por GeoDa." -msgid "Save Results: Moran's I" -msgstr "Guardar Resultados: I de Moran" +#contributors: +msgid "This field name already exists (non-integer type). Please input a unique name." +msgstr "El nombre del campo ya existe (tipo no entero). Introducir un campo único." -msgid "Initialization Method:" -msgstr "Método de inicialización:" +#contributors: +msgid "This format is not supported." +msgstr "Formato no admitido" -msgid "Oops. GeoDa was unable to submit a bug report. Please try again or create it here instead: https://github.com/GeoDaCenter/geoda/issues Thanks!" -msgstr "Oops. GeoDa no pudo enviar el informe de errores. Intentarlo de nuevo o desde aquí: https://github.com/GeoDaCenter/geoda/issues ¡Gracias!" +#contributors: +msgid "This is the list of existing grouped variables. As new groups are created, they will appear on this list. You can open an existing .gda file and edit it here." +msgstr "Lista de variables agrupadas existentes. Al crear nuevos grupos, éstos aparecerán en esta lista. Puede abrir un fichero .gda existente y editarlo aquí." -msgid "The number of displayed decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." -msgstr "El nº de lugares decimales mostrados para un campo numérico no entero debe ser, al menos, %d y como mucho, %d. Mantener el valor original." +#contributors: +msgid "This view currently supports data with at most 1000 observations. The Spatial Correlogram Scatterplot plots distances between all pairs of observations. The current data set has %d observations and %d unordered pairs of observations." +msgstr "Esta vista suele admitir datos hasta 1000 observaciones. El Diagrama del Correlograma Espacial representa distancias entre todos los pares de observaciones. La base de datos activa tiene %d observaciones y %d pares desordenados de observaciones." -msgid "Independent Var X" -msgstr "Var X Independiente" +#contributors: +msgid "Thousands:" +msgstr "Miles" -msgid "Selected" -msgstr "Seleccionado" +#contributors: +msgid "Tim&e" +msgstr "Tiempo" -msgid "Frequency" -msgstr "Frecuencia" +#contributors: +msgid "Time" +msgstr "Tiempo" -msgid "Choose Weights File" -msgstr "Elegir Archivo de Pesos" +#contributors: +msgid "Time Editor" +msgstr "Editor Tiempo" -msgid "Components:" -msgstr "Componentes:" +#contributors: +msgid "Time Player" +msgstr "Reproductor de Tiempo" -msgid "There is one other view open that depends on this matrix. Ok to close this view and remove?" -msgstr "Hay otra vista abierta que depende de esta matriz. ¿Está de acuerdo en cerrarla y eliminarla?" +#contributors: +msgid "Time Setup" +msgstr "Asistente de Tiempo" -msgid "Random uniform dist on unit interval" -msgstr "Distrib. uniforme aleatoria en intervalo unidad" +#contributors: +msgid "Time Variable Options" +msgstr "Opciones de Variable Temporal" -msgid "Merge error: Geometric type of selected datasource has to be the same with current datasource." -msgstr "Error de anexión: el tipo de geometría de la fuente de datos seleccionada y la activa debe ser la misma." +#contributors: +msgid "Time:" +msgstr "Tiempo:" -msgid "Submit Bug Error" -msgstr "Enviar Informe de Errores" +#contributors: +msgid "Title of Visualization" +msgstr "Título de Visualización" -msgid "Wrong number of rows!" -msgstr "¡Nº equivocado de columnas!" +#contributors: +msgid "Tools" +msgstr "Herramientas" -msgid "REDCAP Settings" -msgstr "Configuración de REDCAP" +#contributors: +msgid "Top" +msgstr "" -msgid "Please select a weights type." -msgstr "Seleccionar tipo de matriz de pesos." +#contributors: +msgid "Transformation:" +msgstr "Transformación:" -msgid "Click RegressionDlg::OnViewResultsClick" -msgstr "Teclear RegressionDlg::OnViewResultsClick" +#contributors: +msgid "Transformation: " +msgstr "" -msgid "Duplicate IDs" -msgstr "IDs Duplicados" +#contributors: +msgid "Transformation:\t" +msgstr "" -msgid "Set seed for randomization:" -msgstr "Fijar semilla para aleatorización:" +#contributors: +msgid "Travel Distances Tool" +msgstr "" -msgid "\n" -msgstr "\n" +#contributors: +msgid "Turkish (Windows-1254)" +msgstr "Turco (Windows-1254)" -msgid " Bivariate Local Geary Cluster Map" -msgstr "Mapa de Clústers Geary Local Bivariante" +#contributors: +msgid "Turkish Latin-5 (ISO-8859-9)" +msgstr "Turco Latín-5 (ISO-8859-9)" -msgid "Initial Groups:" -msgstr "Grupos Iniciales:" +#contributors: +msgid "Type" +msgstr "Tipo" -msgid "Show Recent\\/Sample Data panel in Connect Datasource Dialog:" -msgstr "Mostrar Reciente\\/Panel de Datos de Ejemplo en el Cuadro Conectarse a Fuente de Datos:" +#contributors: +msgid "Type 1" +msgstr "Tipo 1" -msgid "There was a problem generating the PostScript file." -msgstr "Problema producido al generar el archivo de PostScript." +#contributors: +msgid "Type 1a" +msgstr "Tipo 1a" -msgid "Colocation Cluster" -msgstr "Clúster de Colocaciones" +#contributors: +msgid "Type 2" +msgstr "Tipo 2" -msgid "Please enter minimum number of observations per regions, or use minimum bound instead." -msgstr "Introducir nº mínimo de observaciones por regiones o utilizar la cota mínima." +#contributors: +msgid "Type 2a" +msgstr "Tipo 2a" -msgid "These are the row numbers of the records without location information." -msgstr "Éstos son los nº de filas de los datos sin información de localización." +#contributors: +msgid "Unable to overwrite " +msgstr "No se puede sobrescribir" -msgid "X-Coordinates" -msgstr "Coordenadas-X" +#contributors: +msgid "Undefined" +msgstr "Sin definir" -msgid "Moran's I (%s): %s" -msgstr "I de Moran (%s): %s" +#contributors: +msgid "Undo" +msgstr "Deshacer" -msgid "# Iterations:" -msgstr "Nº Iteraciones:" +#contributors: +msgid "Ungrouped Variables" +msgstr "Variables Sin Agrupar" -msgid " has duplicate values. Please choose a different ID Variable.\n" -msgstr " tiene valores duplicados. Seleccionar una Variable ID distinta.\n" +#contributors: +msgid "Unicode (UTF-16LE)" +msgstr "Unicode (UTF-16LE)" -msgid "Values assigned to target field successfully." -msgstr "Valores asignados con éxito al campo de destino." +#contributors: +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" -msgid "OLS Model with White test has been selected." -msgstr "Se ha seleccionado un Modelo MCO con test de White." +#contributors: +msgid "Unique Values" +msgstr "Valores Individuales" -msgid "(Please note: Only supported for smaller datasets.)" -msgstr "(Sólo disponible para pequeñas bases de datos.)" +#contributors: +msgid "Unique Values Map" +msgstr "Mapa de Valores Individuales" -msgid "The number of records in current table is larger than the number of records in import table. Please choose import table >= %d records" -msgstr "El nº de datos de la tabla activa es mayor que el nº de datos de la tabla importada. Seleccionar importar tabla >= % datos" +#contributors: +msgid "Univariate" +msgstr "Univariante" -msgid "Lower outlier" -msgstr "Atípico superior" +#contributors: +msgid "Univariate Local Geary" +msgstr "Geary Local Univariante" -msgid "Specified key value field \"%s\" in weights file contains duplicate values in the currently loaded Table." -msgstr "El campo de valores clave especificado \"%s\" del fichero de pesos contiene valores duplicados en la Tabla activa." +#contributors: +msgid "Univariate Local Join Count" +msgstr "Join Count Local Univariante" -msgid "Hide system table in Postgresql connection:" -msgstr "Ocultar tabla de sistema en conexión de Postgresql:" +#contributors: +msgid "Univariate Local Moran's I" +msgstr "I de Moran Local Univariante" -msgid "Plots:" -msgstr "Gráficos:" +#contributors: +msgid "Univariate Moran's I" +msgstr "I de Morán Univariante" -msgid "Cut" -msgstr "Cortar" +#contributors: +msgid "Unknow exception. Please contact GeoDa support." +msgstr "Excepción desconocida. Contactar con el soporte de GeoDa." -msgid "Please enter number of regions" -msgstr "Introducir nº de regiones" +#contributors: +msgid "Unselected" +msgstr "Desmarcado" -msgid "Please enter maximum number of regions." -msgstr "Introducir máximo nº de regiones." +#contributors: +msgid "Unselected =" +msgstr "No Seleccionados" -msgid "Diff Values" -msgstr "Valores en Difer." +#contributors: +msgid "Up" +msgstr "" -msgid "Use classic yellow cross-hatching to highlight selection in maps:" -msgstr "Utilizar el típico entramado amarillo para destacar selecciones en mapas:" +#contributors: +msgid "Update GeoDa completed" +msgstr "Actualización de GeoDa completada" -msgid "Setup Locale of GeoDa Table" -msgstr "Configuración Local de Tablas de GeoDa" +#contributors: +msgid "Update GeoDa failed" +msgstr "Error de Actualización de GeoDa" -msgid "Can't get bounding box information from this datasource. Please try another datasource." -msgstr "No se puede obtener información del cuadro delimitador de la fuente de datos. Intentarlo con otra fuente de datos." +#contributors: +msgid "Update project information failed. \n\nDetails: The layer information defined in project file does no match opened datasource." +msgstr "" -msgid "Conditional Scatter Plot Variables" -msgstr "Variables Gráfico de Dispersión Condicional" +#contributors: +msgid "Upper outlier" +msgstr "Atípico superior" -msgid "The length of an integral numeric field must be at least %d and at most %d. Keeping original value." -msgstr "El tamaño de un campo numérico entero debe ser, al menos, %d y como mucho, %d. Mantener valor original." +#contributors: +msgid "Upper-right corner" +msgstr "Esquina superior derecha" -msgid "ID_DEFAULT_MENU_OPTIONS" -msgstr "OPCIONES_MENÚ_DEFECTO_ID" +#contributors: +msgid "Use GPU to Accelerate computation:" +msgstr "" -msgid "Hierarchical Clustering Settings" -msgstr "Configuración Clúster Jerárquico" +#contributors: +msgid "Use Power Iteration method:\tMax iterations=" +msgstr "" -msgid "Please input password." -msgstr "Introducir contraseña." +#contributors: +msgid "Use Power Iteration:" +msgstr "Utilizar Interación de Potencia:" -msgid "This field name already exists (non-integer type). Please input a unique name." -msgstr "El nombre del campo ya existe (tipo no entero). Introducir un campo único." +#contributors: +msgid "Use Scientific Notation" +msgstr "Usar Notación Científica" -msgid "Please choose Period 2." -msgstr "Seleccionar Período 2." +#contributors: +msgid "Use Specified Seed" +msgstr "Usar Semilla Específica" -msgid "Locale for numbers has been setup successfully. Please re-open current project to enable this locale." -msgstr "Realizada con éxito la configuración local numérica. Reabrir el proyecto actual para activar esta configuración." +#contributors: +msgid "Use Transparent Legend Background" +msgstr "Use Transparent Legend Background" -msgid "Can't open output file!" -msgstr "¡Imposible abrir fichero de resultados!" +#contributors: +msgid "Use Weights:" +msgstr "Utilizar Pesos:" -msgid "Time:" -msgstr "Tiempo:" +#contributors: +msgid "Use bounding box of input datasource" +msgstr "" -msgid "System:" -msgstr "Sistema:" +#contributors: +msgid "Use classic yellow cross-hatching to highlight selection in maps:" +msgstr "Utilizar el típico entramado amarillo para destacar selecciones en mapas:" -msgid "Language:" -msgstr "Idioma:" +#contributors: +msgid "Use existing field name" +msgstr "Usar nombre existente de campo" -msgid " Bivariate LocalGeary Significance Map" -msgstr "Mapa de Significación Local de Geary Bivariante" +#contributors: +msgid "Use geometric centroids" +msgstr "Utilizar centroides geométricos" -msgid "Time Variable Options" -msgstr "Opciones de Variable Temporal" +#contributors: +msgid "Use geometric centroids (weighting): \n" +msgstr "" -msgid "GAL files (*.gal)|*.gal" -msgstr "Archivos GAL (*.gal)|*.gal" +#contributors: +msgid "Use inverse distance?" +msgstr "¿Usar distancia inversa?" -msgid "Chosen key field '%s' s a time variant. Please choose a non-time variant field as key." -msgstr "Campo clave seleccionado %s' varía en el tiempo. Seleccionar campo clave no variable en el tiempo." +#contributors: +msgid "Use max knn distance as bandwidth" +msgstr "Usar distancia máx. k-vecinos como ancho banda" -msgid "LOWESS Smoother Help" -msgstr "Ayuda de Alisado LOWESS" +#contributors: +msgid "Use outline + motorway(~bbox) of input datasource" +msgstr "" -msgid "field name:" -msgstr "nombre de campo:" +#contributors: +msgid "Use outline of input datasource" +msgstr "" -msgid "(Dendrogram is too complex to draw. Please view clustering results in map.)" -msgstr "(Dendograma muy complicado de representar. Ver resultados de clústers en un mapa.)" +#contributors: +msgid "Use row-standardized weights" +msgstr "Usar pesos estandarizados por filas" -msgid "Iterations:" -msgstr "Iteraciones:" +#contributors: +msgid "Use selected as specified alpha level" +msgstr "Utilizar seleccionados como nivel alfa especificado" -msgid "This datasource is not supported. Please export to other datasource that GeoDa supports first." -msgstr "Esta fuente de datos no está admitida. Exportar antes a una fuente de datos admitida por GeoDa." +#contributors: +msgid "Use specified seed:" +msgstr "Utilizar semilla especificada" -msgid "Breaks with same values were created. Please choose a smaller categories." -msgstr "Se han creado cortes con valores iguales. Elegir una categoría inferior." +#contributors: +msgid "Use the bounding box of shape datasource" +msgstr "Usar el cuadro delimitador de la fuente de datos shape" -msgid "[Please briefly describe what went wrong]" -msgstr "[Describir brevemente lo que no ha funcionado]" +#contributors: +msgid "User Defined" +msgstr "Definido por Usuario" -msgid "Can't get layers from unknown datasource. Please complete the datasource fields." -msgstr "Imposible obtener capas de fuente de datos desconocida. Completar los campos de la misma." +#contributors: +msgid "User Name" +msgstr "Nombre Usuario" -msgid "Get a free Nokia\\/HERE account: " -msgstr "Obtener una cuenta gratuita Nokia\\/HERE: " +#contributors: +msgid "User name" +msgstr "Nombre usuario" -msgid "Auto Weighting" -msgstr "Auto-Ponderación" +#contributors: +msgid "Value" +msgstr "" -msgid "Save Diff-in-Diff Test Results" -msgstr "Guardar Resultados del Test de Dif-en-Dif" +#contributors: +msgid "Values assigned to target field successfully." +msgstr "Valores asignados con éxito al campo de destino." -msgid "Your Github account (Optional):" -msgstr "Tu cuenta de Gibhub (Opcional):" +#contributors: +msgid "Var Calc Container" +msgstr "Contenedor de Var Calc" -msgid "Output ASCII file" -msgstr "Resultados fichero ASCII" +#contributors: +msgid "Variable" +msgstr "Variable" -msgid "Please input Carto App Key." -msgstr "Introducir Clave de App de Carto." +#contributors: +msgid "Variable %s at time %d could not be standardized." +msgstr "" + +#contributors: +msgid "Variable %s at time %d is a placeholer" +msgstr "" -msgid "Setup co-locations:" -msgstr "Establecer colocalizaciones:" +#contributors: +msgid "Variable %s is a placeholer" +msgstr "" -msgid "Save latitude to field:" -msgstr "Guardar latitud a campo:" +#contributors: +msgid "Variable %s is a time-grouped variable. Please ungroup this variable to delete." +msgstr "La variable %s está temporalmente agrupada. Desagrupar esta variable para borrarla." -msgid "Groups:" -msgstr "Grupos:" +#contributors: +msgid "Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data." +msgstr "La variable % no está en la Tabla. Cerrar y reabrir el cuadro de diálogo Regresión para sincronizar con los datos de la Tabla." -msgid "SVD will be automatically used for PCA since the number of rows is less than the number of columns." -msgstr "SDV será utilizado automáticmente por APC porque el nº de filas es menor que el nº de columnas." +#contributors: +msgid "Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data." +msgstr "Variable %s ya no está en la Tabla. Cerrar y reabrir este cuadro de diálogo para sincronizar con datos de la Tabla" -msgid "Spatial Rate Smoothed Variable Settings" -msgstr "Configuración Variable Alisada de Tasa Espacial" +#contributors: +msgid "Variable %s is not valid. Please select another variable." +msgstr "Variable %s no válida. Seleccionar otra variable." -msgid "Please input a field name for saving longitude" -msgstr "Introducir nombre de campo para guardar longitud" +#contributors: +msgid "Variable / Constant" +msgstr "Variable / Constante" -msgid "Open Layer:" -msgstr "Abrir Capa:" +#contributors: +msgid "Variable %s is specified. " +msgstr "Se ha especificado variable %s." -msgid "Error: Chosen theme requires more cateogries than observations." -msgstr "Error: el tema seleccionado tiene más categorías que observaciones." +#contributors: +msgid "Variable Choice" +msgstr "Elección de Variable" -msgid "The categories of the selected variables do not overlap in space. Please select other variables." -msgstr "Las categorías de las variables seleccionadas no se superponen en el espacio. Seleccionar otras variables." +#contributors: +msgid "Variable Name" +msgstr "Nombre de la Variable" -msgid "<=" -msgstr "<=" +#contributors: +msgid "Variable Properties" +msgstr "Propiedades de Variable" -msgid "Reset to system locale information" -msgstr "Información de restauración a configuración local del sistema" +#contributors: +msgid "Variable Properties - " +msgstr "Propiedades de la Variable - " -msgid "y:" -msgstr "y:" +#contributors: +msgid "Variable Setting" +msgstr "Configuración de Variable" -msgid "Project filename not specified." -msgstr "Nombre archivo de proyecto no especificado." +#contributors: +msgid "Variable Settings" +msgstr "Configuración de Variable" -msgid "Only 'gal', 'gwt', 'kwt', 'mat' and 'swm' weights files supported." -msgstr "Sólo se admiten ficheros de pesos 'gal', 'gwt', 'kwt', 'mat' y 'swm'" +#contributors: +msgid "Variable Type Error" +msgstr "Error Tipo de Variable" -msgid "can't compute" -msgstr "imposible calcular" +#contributors: +msgid "Variable Value Error" +msgstr "Error en Valor de Variable" +#contributors: msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name." msgstr "El nombre de la variable \"%s\" no es válido o está duplicado. Introducir otro nombre de variable no duplicado." -msgid "Average Comparison Chart" -msgstr "Gráfico Comparación de Medias" - -msgid "The number of covariates should be more than the number of observations." -msgstr "El nº de covariables debería ser superior al nº de observaciones." - -msgid "Fixed y-axis scale over time" -msgstr "Escala fija del eje-y en el tiempo" - -msgid "The number of observations specified in chosen weights file is incompatible with current Table." -msgstr "El nº de observaciones especificado en el archivo de pesos es incompatible con la Tabla activa." +#contributors: +msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name. The first character must be a letter, and the remaining characters can be either letters, numbers or underscores. For DBF table, a valid variable name is between one and ten characters long." +msgstr "El nombre de variable \"%s\" está dupliado o no es válido. Introducir nombre alternativo no duplicado. El primer carácter debe ser una letra y el resto pueden ser letras, números o guiones bajos. Un nombre válido para las tablas DFB debe tener entre uno y diez caracteres de largo." -msgid "GeoDa can't save a Table-only data source as a Geometry enabled data source. Please try to add a geometry layer and then use File->Save As." -msgstr "Imposible guardar una fuente de datos con una única Tabla como fuente de datos Geométricos. Intentar añadir capa geométrica y utilizar Fichero->Guardar Como." +#contributors: +msgid "Variable name can't be empty." +msgstr "" -msgid "This is not a shape datasource. Please open a valid shape datasource, e.g. ESRI Shapefile, PostGIS layer..." -msgstr "Esta fuente de datos no es shape. Abrir una fuente de datos shape válida, ej. archivo Shape de ESRI, capa PostGIS..." +#contributors: +msgid "Variable name is either a duplicate or is invalid. Please\nenter an alternative, non-duplicate variable name.\n\n" +msgstr "" -msgid "Datasource in project is not valid." -msgstr "Fuente de daos del proyecto no válida." +#contributors: +msgid "Variable:" +msgstr "Variable" -msgid "Save Spanning Tree to a Weights File" -msgstr "Guardar Ãrbol de Expansión a un Fichero de Pesos" +#contributors: +msgid "Variables" +msgstr "Variables" -msgid "GeoDa can't save changes to this datasource. Please try to use File->Export." -msgstr "Imposible guardar cambios en esta fuente de datos. Intentar utilizar Archivo->Exportar." +#contributors: +msgid "Variables:" +msgstr "" -msgid "Could not create a new variable. Possibly a read-only data source." -msgstr "Imposible crear una nueva variable. Posible fuente de datos de sólo lectura." +#contributors: +msgid "Vertical Bins Breaks" +msgstr "Cortes Intervalos Verticales" -msgid "Dependent Var (y-axis)" -msgstr "Var. Dependiente (eje-y)" +#contributors: +msgid "Vertical Cells" +msgstr "Celdas Verticales" -msgid "Input:" -msgstr "Entrada:" +#contributors: +msgid "Vietnamese (Windows-1258)" +msgstr "Vietnamita (Windows-1258)" -msgid "Saving data source cancelled." -msgstr "Cancelado el guardado de fuente de datos." +#contributors: +msgid "View" +msgstr "Vista" -msgid "Error: number of records must be > 0." -msgstr "Error: nº de observaciones debe ser > 0." +#contributors: +msgid "View Original Data" +msgstr "Ver Datos Originales" -msgid "Weight matrix required for chosen spatial rate method." -msgstr "El método de tasas espaciales necesita una matriz de pesos." +#contributors: +msgid "View Standardized Data" +msgstr "Ver Variables Estandarizadas" -msgid "Bandwidth:" -msgstr "Ancho de banda:" +#contributors: +msgid "Voronoi Contiguity Error" +msgstr "Error de Contigüidad de Voronoi" -msgid "Enter a seed value" -msgstr "Introducir valor de semilla" +#contributors: +msgid "WFS URL" +msgstr "URL de WFS" -msgid "The selected database driver is not supported on this platform. Please check GeoDa website for more information about database support and connection." -msgstr "Controlador de base de datos seleccionado no admitido en esta plataforma. Consulte la web de GeoDa para más información sobre bases de datos y conexiones admitidas." +#contributors: +msgid "Warning" +msgstr "Aviso" -msgid "Copy" -msgstr "Copiar" +#contributors: +msgid "Warning: %d observations are neighborless." +msgstr "Aviso: %d observaciones no tienen vecinos." -msgid " and " -msgstr " y " +#contributors: +msgid "Warning: %d observations is neighborless." +msgstr "Aviso: %d observaciones sin vecinos." -msgid "Language" -msgstr "Idioma" +#contributors: +msgid "Warning: NULL geometry" +msgstr "" -msgid "Low" -msgstr "Bajo" +#contributors: +msgid "Warning: loss data" +msgstr "Aviso: pérdida de datos" -msgid "Select variable " -msgstr "Seleccionar variable " +#contributors: +msgid "Was not able to load weights matrix." +msgstr "Imposible cargar matriz de pesos." -msgid "Maximum Iterations:" -msgstr "Iteraciones máximas:" +#contributors: +msgid "Web" +msgstr "Web" -msgid "Datasource path is empty." -msgstr "Ruta vacía de fuente de datos." +#contributors: +msgid "Weight" +msgstr "Pesos" -msgid "Variable Value Error" -msgstr "Error en Valor de Variable" +#contributors: +msgid "Weight matrix required for chosen spatial rate method." +msgstr "El método de tasas espaciales necesita una matriz de pesos." -msgid "Input significance:" -msgstr "Introducir significación:" +#contributors: +msgid "Weighting:" +msgstr "Ponderación:" -msgid "Please choose a Result field." -msgstr "Seleccionar un campo de Resultados." +#contributors: +msgid "Weights" +msgstr "pesos" -msgid "Period 1:" -msgstr "Período 1:" +#contributors: +msgid "Weights File" +msgstr "Fichero de pesos" -msgid "Save Statistics file" -msgstr "Guardar archivo de Estadísticas" +#contributors: +msgid "Weights File Creation" +msgstr "Creación Archivo de Pesos" -msgid "Fourth Variable" -msgstr "Cuarta Variable" +#contributors: +msgid "Weights Intersection" +msgstr "Weights Intersection" -msgid "Can't write output file!" -msgstr "¡Imposible escribir fichero de resultados!" +#contributors: +msgid "Weights Manager" +msgstr "Gestor de pesos" -msgid "Use Power Iteration:" -msgstr "Utilizar Interación de Potencia:" +#contributors: +msgid "Weights Name" +msgstr "" -msgid "GeoDa Help" -msgstr "Ayuda de GeoDa" +#contributors: +msgid "Weights Symmetry Check" +msgstr "Comprobar Simetría de Pesos" -msgid "Random Gaussian dist with mean=%s, sd=%s" -msgstr "Dist. aleatoria gaussiana con media=%s, DT=%s" +#contributors: +msgid "Weights Union" +msgstr "Weights Intersection" -msgid "Save Results: Bivariate Local Join Count stats, " -msgstr "Guardar Resultados: Join Count Local Bivariante, " +#contributors: +msgid "Weights file \"%s\" created successfully." +msgstr "Archivo de pesos \"%s\" creado con éxito." -msgid "Please specify a Weights matrix." -msgstr "Especificar una matriz de pesos." +#contributors: +msgid "Weights file/format is not valid." +msgstr "" -msgid "Circle Color" -msgstr "Color del Círculo" +#contributors: +msgid "Weights:" +msgstr "Pesos:" -msgid "On line %d of weights file, observation id %d encountered which is out of allowed observation range of 1 through %d." -msgstr "En la fila %d del fichero de pesos, encontrada observación con id %d fuera del rango de permitido entre 1 y %d." +#contributors: +msgid "Welcome to GeoDa" +msgstr "Bienvenidos a GeoDa" -msgid "Min # per Region:" -msgstr "Mín. nº por Región:" +#contributors: +msgid "Welcome to GeoDa 1.8.16" +msgstr "Bienvenidos a GeoDa 1.8.16" -msgid "High-Low" -msgstr "Alto-Bajo" +#contributors: +msgid "West European Latin-1 (ISO-8859-1)" +msgstr "Europeo Occidental Latín-1 (ISO-8859-1)" -msgid "Color for Category" -msgstr "Color por Categoría" +#contributors: +msgid "West European Latin-9 (ISO-8859-15)" +msgstr "Europeo Occidental Latín-9 (ISO-8859-15)" -msgid ".\n" -msgstr ".\n" +#contributors: +msgid "What windows to open?" +msgstr "Qué ventana abrir" -msgid "GeoDa was unable to save the file." -msgstr "GeoDa no puede guardar el fichero." +#contributors: +msgid "When \"all times\" selected for either variable, result field must also be \"all times.\"" +msgstr "Al seleccionar \"todos los períodos\", el campo de resultados debe ser también \"todos los períodos.\"" -msgid "None of your observations have neighbors. This could be related to digitizing problems, which can be fixed by adjusting the precision threshold." -msgstr "Ninguna de las observaciones tiene vecinos. Esto podría deberse a problemas de digitalización, que podrían resolverse ajustando el umbral de precisión." +#contributors: +msgid "When \"all times\" selected for variable, result field must also be \"all times.\"" +msgstr "Al seleccionar \"todos los períodos\", el campo de resultados debe ser también \"todos los períodos.\"" -msgid "Please choose Periods first." -msgstr "Seleccionar antes los Períodos." +#contributors: +msgid "White Test" +msgstr "Test de White" -msgid "Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data." -msgstr "La variable % no está en la Tabla. Cerrar y reabrir el cuadro de diálogo Regresión para sincronizar con los datos de la Tabla." +#contributors: +msgid "Width in pixels" +msgstr "Ancho en píxeles" -msgid "The first line should have comma separated number of rows and ID name!" -msgstr "¡La 1ª línea debería tener un nº de filas separadas por comas y nombre de ID!" +#contributors: +msgid "Width:" +msgstr "Width:" -msgid "uniform distribution" -msgstr "distribución uniforme" +#contributors: +msgid "Within cluster S.S." +msgstr "" -msgid "List of existing ungrouped variables. To group variables by time, move them to the list on the right.\n" -msgstr "Lista de variables sin agrupar. Para agrupar variables por tiempo, moverlas al listado de la derecha.\n" +#contributors: +msgid "Within-cluster sum of squares:\n" +msgstr "" -msgid "Choose Cateogry Color" -msgstr "Seleccionar Color de Categoría" +#contributors: +msgid "Wrong number of rows!" +msgstr "¡Nº equivocado de columnas!" -msgid "Save Project File As..." -msgstr "Guardar Fichero de Proyecto Como..." +#contributors: +msgid "Wrote GeoDa Project File: " +msgstr "Escrito en Archivo Proyecto GeoDa:" -msgid " Differential LISA Cluster Map" -msgstr "Mapa de Clústers LISA Diferencial" +#contributors: +msgid "X" +msgstr "X" -msgid "File merged into Table successfully." -msgstr "Archivo unido con éxito a la Tabla." +#contributors: +msgid "X Variable" +msgstr "Variable X" -msgid "New Categories Title" -msgstr "Título de Nueva Categoría" +#contributors: +msgid "X-Axis" +msgstr "Eje-X" -msgid "Save Test Results" -msgstr "Guardar Resultados del Test" +#contributors: +msgid "X-Coordinates" +msgstr "Coordenadas-X" -msgid " should contains only numbers/letters as IDs. Please choose a different ID Variable." -msgstr " debería contener sólo IDs con números/letras. Seleccionar una Variable ID diferente." +#contributors: +msgid "X-coord" +msgstr "Coord-X" -msgid "Please use
Options > Change Variable
to specify a variable." -msgstr "Utilizar
Opciones > Cambiar Variable
a especificar una variable." +#contributors: +msgid "X-coordinate" +msgstr "coordenada-X" -msgid "About Precision Threshold" -msgstr "Acerca del Umbral de Precisión" +#contributors: +msgid "X-coordinate variable" +msgstr "Variable coordenada-X" -msgid "Bivariate Local Join Count " -msgstr "Join Count Local Bivariante " +#contributors: +msgid "Y" +msgstr "y" -msgid "Save longitude to field:" -msgstr "Guardar longitud a campo:" +#contributors: +msgid "Y Variable" +msgstr "Variable Y" -msgid "Group 1:" -msgstr "Grupo 1:" +#contributors: +msgid "Y-Axis" +msgstr "Eje-Y" -msgid "Raw Rate Smoothed Variable Settings" -msgstr "Configuración Variable Alisada Tasa Cruda" +#contributors: +msgid "Y-Coordinates" +msgstr "Coordenadas-Y" -msgid "Choose Weights" -msgstr "Seleccionar Pesos" +#contributors: +msgid "Y-coord" +msgstr "Coord-Y" -msgid "The number of decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." -msgstr "El nº de lugares decimales de un campo numérico no entero debe ser, al menos, %d y como mucho, %d. Mantener valor original." +#contributors: +msgid "Y-coordinate" +msgstr "coordenada-Y" -msgid "Checking Symmetry..." -msgstr "Comprobando Simetría..." +#contributors: +msgid "Y-coordinate variable" +msgstr "Variable coordenada-Y" -msgid "Multi-Variable Settings" -msgstr "Configuración Multi-Variable" +#contributors: +msgid "Yes" +msgstr "Sí" -msgid "Error: \"%s\" already exists in Table, please specify a different name." -msgstr "Error: \"%s\" existente en la Tabla, especificar un nombre diferente." +#contributors: +msgid "You can try to proceed but the current threshold distance value might be too large to compute. If it fails, please input a smaller distance band (which might leave some observations neighborless) or use other weights (e.g. KNN)." +msgstr "" -msgid "Please choose Period 1." -msgstr "Seleccionar Período 1." +#contributors: +msgid "You have requested to create a new file project %s while another project is open. Please close project %s and try again." +msgstr "" -msgid "(Duplicate field name)" -msgstr "(Nombre de campo duplicado)" +#contributors: +msgid "Your Email address (Optional):" +msgstr "Dirección de correo electrónico (Opcional):" -msgid "There are unsaved data source or weights/time definition changes." -msgstr "Sin guardar cambios en fuente de datos o definición de pesos/tiempo." +#contributors: +msgid "Your GeoDa is already up-to-date." +msgstr "Su GeoDa está ya actualizado." -msgid "Distance Function:" -msgstr "Función de Distancia:" +#contributors: +msgid "Your Github account (Optional):" +msgstr "Tu cuenta de Gibhub (Opcional):" -msgid "Conditional Map Variables" -msgstr "Variables Mapa Condicional" +#contributors: +msgid "Your table cannot be aggregated because the key field \"%s\" is unique. Please use another key." +msgstr "Imposible agregar tabla porque el campo clave \"%s\" es único. Utilizar otro campo clave." -msgid "When \"all times\" selected for either variable, result field must also be \"all times.\"" -msgstr "Al seleccionar \"todos los períodos\", el campo de resultados debe ser también \"todos los períodos.\"" +#contributors: +msgid "Your table cannot be merged because the key field \"%s\" is not unique. \nIt contains undefined or duplicate values.\n\nDetails:" +msgstr "" -msgid "Please input Carto User Name." -msgstr "Introducir Nombre de Usuario de Carto." +#contributors: +msgid "Z" +msgstr "Z" -msgid "Explore" -msgstr "Explorar" +#contributors: +msgid "Z Variable" +msgstr "Variable Z" -msgid "Thank you for helping us improve GeoDa with your bug report! \n" -msgstr "¡Gracias por ayudarnos a mejorar GeoDa con su informe de errores! \n" +#contributors: +msgid "Zoom : press right-mouse button" +msgstr "Zoom: presionar botón derecho del ratón" -msgid "Weights file\\/format is not valid." -msgstr "Fichero\\/formato de pesos no válido." +#contributors: +msgid "Zoom In" +msgstr "Zoom +" -msgid "Information" -msgstr "Información" +#contributors: +msgid "Zoom Out" +msgstr "Zoom -" -msgid "Warning: loss data" -msgstr "Aviso: pérdida de datos" +#contributors: +msgid "Zooming Mode" +msgstr "Modo de Zoom" -msgid "Loading data..." -msgstr "Cargando datos..." +#contributors: +msgid "[Please briefly describe what went wrong]" +msgstr "[Describir brevemente lo que no ha funcionado]" -msgid "# Max Iteration:" -msgstr "Nº Máx. Iteraciones:" +#contributors: +msgid "[Steps you took before something went wrong]" +msgstr "[Pasos realizados antes de tener problemas]" -msgid ">" -msgstr ">" +#contributors: +msgid "\"%s\" is not a valid p-value. Default p-value (0.01) is used" +msgstr "\"%s\" p-valor no válido. Utilizado el p-valor (0.01) por defecto" -msgid "Error: Base values contain non-positive numbers which will result in undefined values." -msgstr "Error: Valores de la base con números negativos, que dan lugar a valores indefinidos." +#contributors: +msgid "\"%s\" is not a valid seed. Seed unchanged." +msgstr "\"%s\" semilla no válida. Semilla sin modificar." -msgid "Fail in reading the Boundary file: at polygon-%d" -msgstr "Error de lectura del fichero Boundary: en polígono-%d" +#contributors: +msgid "\". \n\nDetails: Attemp to write a readonly database, or " +msgstr "" -msgid "GeoDa Preference Setup" -msgstr "Preferencias de GeoDa" +#contributors: +msgid "\nREGRESSION\n----------\n" +msgstr "" -msgid "Scatter Plot- x: %s, y: %s" -msgstr "Diagrama de Dispersión- x: %s, y: %s" +#contributors: +msgid "\nSelect whether to use periods or commas as\nseparators in numeric fields. \n\nE.g., by default, GeoDa uses commas to\nseparate thousands and periods\nfor decimals (1,000.00).\n " +msgstr "" -msgid "New Map Coordinates" -msgstr "Nuevo Mapa de Coordenadas" +#contributors: +msgid "\n\n95% threshold criterion: " +msgstr "" -msgid "Please input database host." -msgstr "Introducir base de datos anfitrión." +#contributors: +msgid "\n\nCumulative proportion:\n" +msgstr "" -msgid "Select the language" -msgstr "Seleccionar idioma" +#contributors: +msgid "\n\nDetails: " +msgstr "" -msgid "The currently entered threshold value of %f is less than %f which is the minimum value for which there will be no neighborless observations (isolates). \n" -msgstr "El valor umbral %f introducido es menor que %f, que es el valor mínimo requerido para que no haya observaciones sin vecinos (islas). \n" +#contributors: +msgid "\n\nEigenvalues:\n" +msgstr "" -msgid "The last seed used by the pseudo random\n" -msgstr "La última semilla utilizada por el pseudo-aleatorio\n" +#contributors: +msgid "\n\nKaiser criterion: " +msgstr "" -msgid "Open Datasource:" -msgstr "Fuente de Datos Abierta:" +#contributors: +msgid "\n\nProportion of variance:\n" +msgstr "" -msgid "Parallel Coordinate Plot: " -msgstr "Gráfico de Coordenadas Paralelas: " +#contributors: +msgid "\n\nSquared correlations:\n" +msgstr "" -msgid "Bivariate Moran's I (%s): %s and lagged %s" -msgstr "I de Moran Bivariante (%s): %s y %s retardado" +#contributors: +msgid "\n\nStandard deviation:\n" +msgstr "" -msgid "Please fix the grid bounding box." -msgstr "Por favor, ajustar cuadro delimitador de la rejilla" +#contributors: +msgid "\n\nVariable Loadings:\n" +msgstr "" -msgid "Your GeoDa is already up-to-date." -msgstr "Su GeoDa está ya actualizado." +#contributors: +msgid "adaptive kernel" +msgstr "" -msgid "MDS Settings" -msgstr "Configuración MDS" +#contributors: +msgid "and field" +msgstr "and field" -msgid "Database Name\\/Instance" -msgstr "Nombre\\/Instancia de Base de Datos" +#contributors: +msgid "autocorrelation is " +msgstr "" -msgid "Your table cannot be merged because the key field \"%s\" is not unique. \n" -msgstr "Imposible añadir tabla porque el campo clave \"%s\" no es único. \n" +#contributors: +msgid "bandwidth" +msgstr "" -msgid "Bivariate Moran Variable Settings" -msgstr "Configuración Variable de Moran Bivariante" +#contributors: +msgid "binary" +msgstr "binario" -msgid "Error: field names listed in wrong format." -msgstr "Error: lista de nombres de campo con formato equivocado." +#contributors: +msgid "break 0" +msgstr "Corte 0" -msgid "New Project Filename" -msgstr "Nuevo Nombre de Proyecto" +#contributors: +msgid "calculating..." +msgstr "calculando..." -msgid "High-High" -msgstr "Alto-Alto" +#contributors: +msgid "can't compute" +msgstr "imposible calcular" -msgid "GeoDa Bug Report Dialog" -msgstr "Cuadro de Informes de Errores de GeoDa" +#contributors: +msgid "category 1" +msgstr "Categoría 1" -msgid "Scatter Plot Matrix Variables Add/Remove" -msgstr "Añadir/Eliminar Variables Matriz Gráficos de Dispersión" +#contributors: +msgid "choice:" +msgstr "elección:" -msgid "Hide system table in SQLITE connection:" -msgstr "Ocultar tabla de sistema en conexión SQLITE:" +#contributors: +msgid "choose a variable" +msgstr "Elegir una variable" -msgid "Please input a valid url address." -msgstr "Introducir dirección url válida." +#contributors: +msgid "csv file:" +msgstr "fichero csv:" -msgid " Differential Local Geary Cluster Map" -msgstr "Mapa de Clúster de Geary Local Diferencial" +#contributors: +msgid "current table key" +msgstr "Clave de la tabla activa" -msgid "No fields found!" -msgstr "¡No se han encontrado campos!" +#contributors: +msgid "custom" +msgstr "Personalizado" -msgid "Rename Space-Time Variable" -msgstr "Renombrar Variable Espacio-Temporal" +#contributors: +msgid "dBase Database File (*.dbf)|*.dbf" +msgstr "Archivo Datos dBase (*.dbf)|*.dbf" -msgid "Independent Var (x-axis)" -msgstr "Var. Independiente (eje-x)" +#contributors: +msgid "datasource.type %s unknown.." +msgstr "fuentedatos.tipo %n desconocido.." -msgid "Correlogram" -msgstr "Correlograma" +#contributors: +msgid "day:" +msgstr "día:" -msgid "OK to Exit?" -msgstr "¿De acuerdo en Salir?" +#contributors: +msgid "decimal\nplaces" +msgstr "" -msgid "Bubble Chart - x: %s, y: %s, size: %s, %s" -msgstr "Gráfico de Burbujas - x: %s, y: %s, tamaño: %s, %s" +#contributors: +msgid "displayed\ndecimal places" +msgstr "" -msgid "Notice" -msgstr "Advertencia" +#contributors: +msgid "distance metric" +msgstr "" -msgid "Maximum # of regions:" -msgstr "Máximo nº de regiones:" +#contributors: +msgid "distance unit" +msgstr "" -msgid "The selected variable %s is not valid. If it's a grouped variable, please modify it in Time->Time Editor. Or please select another variable." -msgstr "La variable seleccionada %s no es válida. Si es una variable agrupada, notificarlo en el Editor Tiempo->Time. O seleccionar otra variable." +#contributors: +msgid "distance vars" +msgstr "" -msgid "Submit Bug Report" -msgstr "Enviar Informe de Errores" +#contributors: +msgid "diverging" +msgstr "divergente" -msgid "Finished" -msgstr "Terminado" +#contributors: +msgid "done" +msgstr "" -msgid "Standard Deviation Color" -msgstr "Color Desviación Estándar" +#contributors: +msgid "ds:" +msgstr "ds" -msgid "Transformation:" -msgstr "Transformación:" +#contributors: +msgid "enumerate as 1, 2, 3, ..." +msgstr "Numerar como 1, 2, 3, ..." -msgid "Other Positive" -msgstr "Otro Positivo" +#contributors: +msgid "false" +msgstr "" -msgid "Sample Autocorrelation" -msgstr "Autocorrelación muestral" +#contributors: +msgid "field name:" +msgstr "nombre de campo:" -msgid "Wrote GeoDa Project File: " -msgstr "Escrito en Archivo Proyecto GeoDa:" +#contributors: +msgid "fields:" +msgstr "campos:" -msgid "Failed to create the weights file." -msgstr "Error al crear archivo de pesos." +#contributors: +msgid "file" +msgstr "" -msgid "Please select an Variable field." -msgstr "Seleccionar un campo de Variable." +#contributors: +msgid "file size:" +msgstr "tamaño de archivo:" -msgid "Save\\/Show Map" -msgstr "Guardar\\/Mostrar Mapa" +#contributors: +msgid "from" +msgstr "" -msgid "The original datasource %s is not a valid file. GeoDa \"Save\" only works on file datasource." -msgstr "Fichero de fuente de datos original %s no válido. GeoDa \"Guardar\" sólo funciona con fuentes de datos de ficheros." +#contributors: +msgid "id variable" +msgstr "" -msgid "Update GeoDa failed" -msgstr "Error de Actualización de GeoDa" +#contributors: +msgid "import table key" +msgstr "Clave de tabla importada" -msgid "Period 2:" -msgstr "Período 2:" +#contributors: +msgid "in current layer." +msgstr "in current layer." -msgid "Conditional G Cluster Map Variables" -msgstr "Variables de Mapa de Clúster G Condicional" +#contributors: +msgid "inches" +msgstr "inches" -msgid "Please setup co-locations first." -msgstr "Establecer antes las co-localizaciones." +#contributors: +msgid "include lower orders" +msgstr "" -msgid "Categories of " -msgstr "Categoría de " +#contributors: +msgid "inverse distance" +msgstr "" -msgid "Input is required" -msgstr "Se necesita una Entrada" +#contributors: +msgid "is associated to" +msgstr "is associated to" -msgid "Was not able to load weights matrix." -msgstr "Imposible cargar matriz de pesos." +#contributors: +msgid "kernel method" +msgstr "" -msgid "Click here to get a Google API key" -msgstr "Teclear aquí para una clave de API de Google" +#contributors: +msgid "kernel to diagonal" +msgstr "" -msgid "Could not initialize new project." +#contributors: +msgid "large" msgstr "" -msgid "No Colocation" -msgstr "Sin colocación" +#contributors: +msgid "length" +msgstr "" -msgid "Show CSV Configuration in Merge Data Dialog:" -msgstr "Mostrar Formato CSV en Cuadro de Unión de Tablas" +#contributors: +msgid "max dist" +msgstr "" -msgid "suggested title:" -msgstr "título sugerido:" +#contributors: +msgid "max neighbors" +msgstr "" -msgid "Data Type" -msgstr "Tipo de Datos" +#contributors: +msgid "max-p" +msgstr "MaxP" -msgid "When \"all times\" selected for variable, result field must also be \"all times.\"" -msgstr "Al seleccionar \"todos los períodos\", el campo de resultados debe ser también \"todos los períodos.\"" +#contributors: +msgid "max:" +msgstr "máx." -msgid "calculating..." -msgstr "calculando..." +#contributors: +msgid "maximum" +msgstr "máximo" -msgid "MDS Plot - " -msgstr "Gráfico MDS - " +#contributors: +msgid "maximum\npossible" +msgstr "" -msgid "The length of a string field must be at least %d and at most %d. Keeping original value." -msgstr "El tamaño de un campo de carácter debe ser, al menos, %d y como mucho, %d. Mantener valor original." +#contributors: +msgid "mean" +msgstr "media" -msgid "Conditional Co-location Map Variables" -msgstr "Variables de Mapa de Co-localización Condicional" +#contributors: +msgid "mean neighbors" +msgstr "" -msgid "Cartogram Variables" -msgstr "Variables del Cartograma" +#contributors: +msgid "mean:" +msgstr "" -msgid "Specified key (%s) not found in currently loaded Table." -msgstr "La clave especificada (%s) no se encuentra en la Tabla activa" +#contributors: +msgid "median neighbors" +msgstr "" -msgid "The selected variable is not numeric. Please select another variable." -msgstr "La variable seleccionada no es numérica. Seleccionar otra variable." +#contributors: +msgid "median:" +msgstr "" -msgid "Redo" -msgstr "Repetir" +#contributors: +msgid "min dist" +msgstr "" -msgid "Your table cannot be aggregated because the key field \"%s\" is unique. Please use another key." -msgstr "Imposible agregar tabla porque el campo clave \"%s\" es único. Utilizar otro campo clave." +#contributors: +msgid "min neighbors" +msgstr "" -msgid " BiLISA Significance Map" -msgstr "Mapa de Significación BiLISA" +#contributors: +msgid "min:" +msgstr "mín." -msgid "Set Display Precision on Axis" -msgstr "Mostrar Pantalla Precisión de Ejes" +#contributors: +msgid "minimum" +msgstr "mínimo" -msgid "Create Project File Now?" -msgstr "¿Crear Ahora Archivo de Proyecto?" +#contributors: +msgid "minimum\npossible" +msgstr "" -msgid "Warning: %d observations are neighborless." -msgstr "Aviso: %d observaciones no tienen vecinos." +#contributors: +msgid "mm" +msgstr "mm" -msgid "Please choose Period 2 first." -msgstr "Seleccionar antes el Período 2." +#contributors: +msgid "month:" +msgstr "mes:" -msgid "System" -msgstr "Sistema" +#contributors: +msgid "name:" +msgstr "nombre" -msgid "Please select another variable with values more suitable for computing a correlogram." -msgstr "Seleccionar otra variable con valores más adecuados para el cálculo del correlograma." +#contributors: +msgid "need two valid regressions" +msgstr "" -msgid "Initialization Re-runs:" -msgstr "Iniciando repeticiones:" +#contributors: +msgid "neighbors" +msgstr "" -msgid "Choose A Color" -msgstr "Seleccionar un Color" +#contributors: +msgid "not saved" +msgstr "" -msgid "Set the threshold to bridge the gap between disconnected polygons (often caused by digitizing errors). The value depends on your measurement unit (e.g. 1 foot or 0.0000001 degrees). Use the weights histogram to detect neighborless observations." -msgstr "Fijar el umbral para acortar distancias entre polígonos desconectados (a veces por errores de digitalización). El valor depende de la unidad de medida (ej., 0,3 metros ó 0,0000001 grados. Utilizar histograma de pesos para detectar observaciones sin vecinos." +#contributors: +msgid "numeric" +msgstr "numérico" -msgid "Use Weights:" -msgstr "Utilizar Pesos:" +#contributors: +msgid "obs " +msgstr "" -msgid "Select variable with addresses:" -msgstr "Seleccionar variable con direcciones:" +#contributors: +msgid "obs#" +msgstr "nº obs." -msgid "Not enough memory!" -msgstr "¡Memoria insuficiente!" +#contributors: +msgid "observation:" +msgstr "observación" -msgid "Add basemap automatically:" -msgstr "Añadir mapa base automáticamente:" +#contributors: +msgid "order" +msgstr "" -msgid "Conditional Histogram Variables" -msgstr "Variables de Histograma Condicional" +#contributors: +msgid "parent group" +msgstr "" -msgid "Save Regression Results" -msgstr "Guardar Resultados de Regresión" +#contributors: +msgid "pixels" +msgstr "pixels" -msgid "Please select a time variable first, and make sure more than one time steps have been defined." -msgstr "Seleccionar antes una variable de tiempo y definir más de un período temporal." +#contributors: +msgid "power" +msgstr "" -msgid "Rate calculation successful." -msgstr "Tasa calculada con éxito." +#contributors: +msgid "range, est. distance" +msgstr "" -msgid "\"%s\" is not a valid seed. Seed unchanged." -msgstr "\"%s\" semilla no válida. Semilla sin modificar." +#contributors: +msgid "records:" +msgstr "registros" -msgid "Change" -msgstr "Cambio" +#contributors: +msgid "redcap" +msgstr "REDCAP" -msgid "\"%s\" is not a valid p-value. Default p-value (0.01) is used" -msgstr "\"%s\" p-valor no válido. Utilizado el p-valor (0.01) por defecto" +#contributors: +msgid "row-standardized" +msgstr "estandarizada por filas" -msgid "Weights Symmetry Check" -msgstr "Comprobar Simetría de Pesos" +#contributors: +msgid "row:\n" +msgstr "fila:\n" -msgid "Choose an output weights file name." -msgstr "Escribir nombre de fichero de resultado de pesos" +#contributors: +msgid "s.d." +msgstr "" -msgid "Selected vs. Unselected" -msgstr "Seleccionado vs. Desmarcado" +#contributors: +msgid "s.d.:" +msgstr "" -msgid "3D Scatter Plot Variables" -msgstr "Variables Diagrama Dispersión 3D" +#contributors: +msgid "sd from mean" +msgstr "" -msgid "Please briefly describe what went wrong." -msgstr "Describir brevemente lo que no ha funcionado." +#contributors: +msgid "selected:" +msgstr "seleccionado:" -msgid "Spectral Clustering Settings" -msgstr "Configuración Clúster Espectral" +#contributors: +msgid "sequential" +msgstr "secuencial" -msgid "Dependent Var Y" -msgstr "Variable Dependiente Y" +#contributors: +msgid "show normal distribution p-val map" +msgstr "Mostrar mapa de p-val. de distribución normal" -msgid " Differential Significance Map" -msgstr "Mapa de Significación Diferencial" +#contributors: +msgid "show normal distribution p-val maps" +msgstr "Mostrar mapas de p-val. de distribución normal" -msgid "Save As Datasource" -msgstr "Guardar Como Fuente Datos" +#contributors: +msgid "show significance maps" +msgstr "Mostrar mapas de significación" -msgid "The number of identified clusters is less than " -msgstr "El nº de clústers identificados es menor que " +#contributors: +msgid "skater" +msgstr "skater" -msgid "Add Map Layer" -msgstr "Add Map Layer" +#contributors: +msgid "small" +msgstr "" -msgid "Map Layer Setting" -msgstr "Map Layer Setting" +#contributors: +msgid "space-time variable found with no name" +msgstr "Variable espacio-temporal encontrada sin nombre" -msgid "Set Highlight Association" -msgstr "Set Highlight Association" +#contributors: +msgid "standard deviation" +msgstr "desviación estándar" -msgid "Clear Highlight Association" -msgstr "Clear Highlight Association" +#contributors: +msgid "suggested title:" +msgstr "título sugerido:" -msgid "Change Fill Color" -msgstr "Change Fill Color" +#contributors: +msgid "symmetry" +msgstr "" -msgid "Change Outline Color" -msgstr "Change Outline Color" +#contributors: +msgid "thematic" +msgstr "temática" -msgid "Outline Visible" -msgstr "Outline Visible" +#contributors: +msgid "threshold value" +msgstr "" -msgid "Only Map Boundary" -msgstr "Only Map Boundary" +#contributors: +msgid "time" +msgstr "tiempo" -msgid "Change Point Radius" -msgstr "Change Point Radius" +#contributors: +msgid "to" +msgstr "" -msgid "Set Association Dialog" -msgstr "Set Association Dialog" +#contributors: +msgid "to define weights." +msgstr "pendiente definición de pesos." -msgid "Select layer" -msgstr "Select layer" +#contributors: +msgid "to specify variable and distance parameters." +msgstr "" -msgid "and field" -msgstr "and field" +#contributors: +msgid "total # pairs" +msgstr "" -msgid "is associated to" -msgstr "is associated to" +#contributors: +msgid "true" +msgstr "" -msgid "in current layer." -msgstr "in current layer." +#contributors: +msgid "type" +msgstr "" -msgid "Show connect line" -msgstr "Show connect line" +#contributors: +msgid "undefined: " +msgstr "" -msgid "Point Radius:" -msgstr "Point Radius:" +#contributors: +msgid "uni. dist. Min" +msgstr "Dist. min. uni." -msgid "Map Layout Preview" -msgstr "Map Layout Preview" +#contributors: +msgid "uniform distribution" +msgstr "distribución uniforme" -msgid "Show Legend" -msgstr "Show Legend" +#contributors: +msgid "unknown" +msgstr "" -msgid "Use Transparent Legend Background" -msgstr "Use Transparent Legend Background" +#contributors: +msgid "using row-standardized weights" +msgstr "usando pesos estandarizados por filas" -msgid "Image Dimension Setting" -msgstr "Image Dimension Setting" +#contributors: +msgid "value" +msgstr "Valor" -msgid "Width:" -msgstr "Width:" +#contributors: +msgid "value:" +msgstr "valor:" -msgid "Height:" -msgstr "Height:" +#contributors: +msgid "var name:" +msgstr "nombre var.:" -msgid "Resolution(dpi):" -msgstr "Resolution(dpi):" +#contributors: +msgid "variable name" +msgstr "" -msgid "pixels" -msgstr "pixels" +#contributors: +msgid "version:" +msgstr "versión:" -msgid "inches" -msgstr "inches" +#contributors: +msgid "weights:" +msgstr "pesos" -msgid "mm" -msgstr "mm" +#contributors: +msgid "wrong model number" +msgstr "nº equivocado de modelo" -msgid "Basemap Sources: (Format: group_name.basemap_name,basemap_url)" -msgstr "Basemap Sources: (Format: group_name.basemap_name,basemap_url)" +#contributors: +msgid "y:" +msgstr "y:" -msgid "Basemap Parameters:" -msgstr "Basemap Parameters:" +#contributors: +msgid "year:" +msgstr "año" -msgid "Multivariate Local Join Count" -msgstr "Multivariate Local Join Count" diff --git a/internationalization/pofiles/zh_CN.po b/internationalization/pofiles/zh_CN.po index 6e8f2f4f8..a53a1aed1 100644 --- a/internationalization/pofiles/zh_CN.po +++ b/internationalization/pofiles/zh_CN.po @@ -1,4646 +1,6280 @@ +#contributors: msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2018-04-26 14:58+0800\n" -"PO-Revision-Date: 2019-02-06 21:45-0700\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.1.1\n" -"X-Poedit-Basepath: Regression\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-KeywordsList: _;wxT\n" -"X-Poedit-SearchPath-0: .\n" - -msgid "&Undo" -msgstr "撤销" +msgstr "Project-Id-Version: \nPOT-Creation-Date: 2018-04-26 14:58+0800\nPO-Revision-Date: 2019-03-06 14:33-0700\nLast-Translator: \nLanguage-Team: \nLanguage: zh_CN\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nX-Generator: Poedit 2.2.1\nX-Poedit-Basepath: Regression\nPlural-Forms: nplurals=1; plural=0;\nX-Poedit-KeywordsList: _;wxT\nX-Poedit-SearchPath-0: .\n" -msgid "&Paste" -msgstr "粘贴" +#contributors: +msgid " (isolates in weights are removed)" +msgstr " (空间æƒé‡ä¸­çš„没有邻居的对象已被删除)" -msgid "&Space" -msgstr "空间分æž" +#contributors: +msgid " = 0 at " +msgstr "=0 时的è·ç¦»çº¦" -msgid "Re&set" -msgstr "é‡ç½®" +#contributors: +msgid " BiLISA Cluster Map" +msgstr " åŒå˜é‡LISAèšç±»åœ°å›¾" -msgid "&Run" -msgstr "è¿è¡Œ" +#contributors:testtest +msgid " BiLISA Significance Map" +msgstr " åŒå˜é‡LISA显著性地图" -msgid "&Save" -msgstr "ä¿å­˜" +#contributors: +msgid " Bivariate Local Geary Cluster Map" +msgstr " åŒå˜é‡å±€éƒ¨Gearyèšç±»å›¾" -msgid "&Help" -msgstr "帮助" +#contributors:lixun910 +msgid " Bivariate LocalGeary Significance Map" +msgstr " åŒå˜é‡å±€éƒ¨Geary显著性地图" -msgid "&Add ID Variable..." -msgstr "添加IDå˜é‡â€¦" +#contributors: +msgid " Categories" +msgstr " 类别" -msgid "Appl&y" -msgstr "应用" +#contributors: +msgid " Differential LISA Cluster Map" +msgstr " 差分LISAèšç±»å›¾" -msgid "&File" -msgstr "文件" +#contributors: +msgid " Differential Local Geary Cluster Map" +msgstr " 差分局部Gearyèšç±»å›¾" -msgid "&New" -msgstr "新建" +#contributors: +msgid " Differential Significance Map" +msgstr " 差分显著性地图" -msgid "&Save to Table" -msgstr "ä¿å­˜åˆ°è¡¨" +#contributors: +msgid " Distance metric: " +msgstr " è·ç¦»åº¦é‡: " -msgid "Select &All" -msgstr "全选" +#contributors: +msgid " LISA Cluster Map" +msgstr " LISAèšç±»åœ°å›¾" -msgid "&Map" -msgstr "地图" +#contributors: +msgid " LISA Significance Map" +msgstr " LISA显著性地图" -msgid "&Regression" -msgstr "回归" +#contributors: +msgid " Local Geary Cluster Map" +msgstr " 局部Gearyèšç±»åœ°å›¾" -msgid "Cu&t" -msgstr "剪切" +#contributors: +msgid " Local Geary Significance Map" +msgstr " 局部Geary显著性地图" -msgid "&Open Project" -msgstr "打开项目文件" +#contributors: +msgid " already exists. OK to overwrite?" +msgstr " å·²ç»å­˜åœ¨ã€‚è¦è¦†ç›–å—?" -msgid "&Close" -msgstr "关闭" +#contributors: +msgid " and " +msgstr " å’Œ " -msgid "&Edit" -msgstr "编辑" +#contributors: +msgid " and two time periods: " +msgstr " 以åŠä¸¤ä¸ªä¸åŒçš„时间段: " -msgid "&Copy" -msgstr "å¤åˆ¶" +#contributors: +msgid " for obs within distance band " +msgstr " 观察对象在è·ç¦»å¸¦ï¼š" -msgid "C&reate" -msgstr "创建" +#contributors: +msgid " has duplicate values. Please choose a different ID Variable.\n\nDetails:" +msgstr " 有é‡å¤çš„值。请选择一个ä¸åŒçš„IDå˜é‡ã€‚\n\n详情:" -msgid "E&xplore" -msgstr "探索分æž" +#contributors: +msgid " in range:" +msgstr " 大致在范围:" -msgid "T&able" -msgstr "表格" +#contributors: +msgid " is not supported by GeoDa.\n" +msgstr " GeoDaä¸æ”¯æŒ.\n" -msgid "&Tools" -msgstr "工具" +#contributors: +msgid " km" +msgstr " 公里" -msgid "Tim&e" -msgstr "时间编辑" +#contributors: +msgid " mi" +msgstr " 英里" -msgid "&Delete" -msgstr "删除" +#contributors: +msgid " pairs in distance band " +msgstr "对观察对象在è·ç¦»å¸¦ï¼š" -msgid "&Cancel" -msgstr "å–消" +#contributors: +msgid " should contains only numbers/letters as IDs. Please choose a different ID Variable." +msgstr " 应该åªåŒ…å«æ•°å­—/å­—æ¯ä½œä¸ºid. 请选择一个ä¸åŒçš„IDå˜é‡." -msgid "&Merge" -msgstr "åˆå¹¶" +#contributors: +msgid " to " +msgstr " 至 " -msgid "&Redo" -msgstr "é‡åš" +#contributors: +msgid "# Iterations:" +msgstr "迭代次数:" -msgid "ESRI Personal Geodatabase (*.mdb)|*.mdb" -msgstr "ESRI个人地ç†æ•°æ®åº“(*.MDB)**MDB" +#contributors: +msgid "# Max Iteration:" +msgstr "最大迭代次数:" -msgid "False Discovery Rate:" -msgstr "伪å‘现率:" +#contributors: +msgid "# Neighors:" +msgstr "#邻居:" -msgid "Histogram Classification" -msgstr "直方图" +#contributors: +msgid "# Pairs" +msgstr "对数" -msgid "Chow test for sel/unsel regression subsets: " -msgstr "选中和未选中对象生æˆçš„线性回归进行周(Chow)检验: " +#contributors: +msgid "# iterations:\t" +msgstr "迭代次数:\t" -msgid "Publish Maps and Plots to GeoDa-Web" -msgstr "å‘布地图和图标到GeoDa-Web" +#contributors: +msgid "# observations" +msgstr "对象数é‡" -msgid "Connectivity" -msgstr "连通性" +#contributors: +msgid "#hover obs " +msgstr "é¼ æ ‡ä½ç½®å¯¹è±¡ " -msgid "999 Permutations" -msgstr "999次置æ¢" +#contributors: +msgid "#obs" +msgstr "对象数" -msgid "This field name already exists (non-float type). Please input a unique name." -msgstr "此字段å称已存在(éžæµ®ç‚¹ç±»åž‹ï¼‰ã€‚请输入一个唯一的å称。" +#contributors: +msgid "#obs:" +msgstr "对象数:" -msgid "Use GPU to Accelerate computation:" -msgstr "使用GPUæ¥åŠ é€Ÿè®¡ç®—(部分功能)" +#contributors: +msgid "#obs=" +msgstr "对象数=" -msgid "Skater Settings" -msgstr "Skater设置" +#contributors: +msgid "#row=" +msgstr "行数=" -msgid "Cyrillic/Russian (CP866)" -msgstr "西里尔语/俄语(CP866)" +#contributors: +msgid "#selected=" +msgstr "选中数é‡=" -msgid "Can't connect to datasource: " -msgstr "无法连接到数æ®æº: " +#contributors: +msgid "% non-zero" +msgstr "有邻居对象所å æ¯”" -msgid "import table key" -msgstr "导入表的关键字段" +#contributors: +msgid "% of total" +msgstr "å æ€»é‡ç™¾åˆ†æ¯”" -msgid "Y-coord" -msgstr "Y-åæ ‡" +#contributors: +msgid "%d of %d variables to include" +msgstr "已包å«%d个å˜é‡ï¼ˆä¸€å…±%d个å˜é‡" -msgid "Please check your network connection, or contact GeoDa support team." -msgstr "请检查您的网络连接,或è”ç³»GEODA支æŒå›¢é˜Ÿã€‚" +#contributors: +msgid "%d variables to include" +msgstr "已包å«%d个å˜é‡" -msgid "Panning Mode" -msgstr "平移模å¼" +#contributors: +msgid "%s (Weights: %s)" +msgstr "%s(空间æƒé‡ï¼š %s)" -msgid "Show Status Bar" -msgstr "显示状æ€æ " +#contributors: +msgid "%s Cluster Map (%d clusters)" +msgstr "%s èšç±»åœ°å›¾ (%d èšç±»)" -msgid "Variable / Constant" -msgstr "å˜é‡/常é‡" +#contributors: +msgid "&Add ID Variable..." +msgstr "添加IDå˜é‡â€¦" -msgid " Categories" -msgstr " 类别" +#contributors: +msgid "&Cancel" +msgstr "å–消" -msgid "Remove Time" -msgstr "删除时间" +#contributors: +msgid "&Close" +msgstr "关闭" -msgid "Warning: %d observations is neighborless." -msgstr "警告:%d 个对象没有任何邻居。" +#contributors: +msgid "&Edit" +msgstr "编辑" -msgid "Error" -msgstr "错误" +#contributors: +msgid "&File" +msgstr "文件" -msgid "Scatter Plot Variables" -msgstr "散点图å˜é‡" +#contributors: +msgid "&Help" +msgstr "帮助" -msgid "Exit?" -msgstr "退出?" +#contributors: +msgid "&Map" +msgstr "地图" -msgid "Stopping criterion for power iteration:" -msgstr "设置幂迭代算法åœæ­¢çš„æ¡ä»¶:" +#contributors: +msgid "&Merge" +msgstr "åˆå¹¶" -msgid "Local G*" -msgstr "局部G*" +#contributors: +msgid "&New" +msgstr "新建" -msgid "First line of CSV is variable names?" -msgstr "CSV文件的第一行是字段å?" +#contributors: +msgid "&Open Project" +msgstr "打开项目文件" -msgid "GeoDa Project to Save As" -msgstr "ä¿å­˜GEODA项目文件" +#contributors: +msgid "&Regression" +msgstr "回归" -msgid "Include lower orders" -msgstr "是å¦åŒ…å«ä½Žé˜¶çš„邻居" +#contributors: +msgid "&Run" +msgstr "è¿è¡Œ" -msgid "include lower orders" -msgstr "是å¦åŒ…å«ä½Žé˜¶çš„邻居" +#contributors: +msgid "&Save to Table" +msgstr "ä¿å­˜åˆ°è¡¨" -msgid "orders" -msgstr "秩" +#contributors: +msgid "&Space" +msgstr "空间分æž" -msgid "Set Display Precision of Y-Axis" -msgstr "设置Y轴显示精度" +#contributors: +msgid "&Tools" +msgstr "工具" -msgid "KMedians Dialog" -msgstr "KMedians对è¯æ¡†" +#contributors: +msgid "(Dendrogram is too complex to draw. Please view clustering results in map.)" +msgstr "(树状图太å¤æ‚,请在地图中查看èšç±»ç»“果。)" -msgid "Add OGR column error. Field type is unknown." -msgstr "添加 OGR 列错误。字段类型未知。" +#contributors: +msgid "(Duplicate field name)" +msgstr "(字段åé‡å¤)" -msgid "Co-location Settings" -msgstr "Co-location设置" +#contributors: +msgid "(Field name is not valid)" +msgstr "(字段å无效)" -msgid "Change title \"%s\" to" -msgstr "更改标题â€%sâ€ä¸º" +#contributors: +msgid "(Gaussian) Sigma:" +msgstr "(Gaussian) Sigma:" -msgid "Save Cluster in Field:" -msgstr "èšç±»ç»“果字段:" +#contributors: +msgid "(Leave empty for undefined values)" +msgstr "(未定义的值为空)" -msgid "Co-location Map" -msgstr "åŒå€¼åŒä½(Colocation)地图" +#contributors: +msgid "(Optional) First record has field names? " +msgstr "(å¯é€‰)第一行记录是å¦ä¸ºå­—段å? " -msgid "Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data." -msgstr "å˜é‡%så·²ä¸åœ¨è¡¨ä¸­ã€‚ 请关闭并é‡æ–°æ‰“开此对è¯æ¡†ä»¥ä¸Žè¡¨æ•°æ®åŒæ­¥ã€‚" +#contributors: +msgid "(Optional) Longitude/X:" +msgstr "(å¯é€‰ï¼‰ç»åº¦/X:" -msgid "(K-Means)" -msgstr "(k-å‡å€¼)" +#contributors: +msgid "(Optional) You can change the data type for a field:" +msgstr "(å¯é€‰ï¼‰å¯ä»¥ä¸ºå­—段更改数æ®ç±»åž‹ï¼š" -msgid "No layer has been selected. Please select a layer." -msgstr "没有选择任何层。请选择一个图层。" +#contributors: +msgid "(Use Sequences)" +msgstr "(使用整数顺åº)" -msgid "Bivariate" -msgstr "二元å˜é‡" +#contributors: +msgid "---\n\nPCA method: " +msgstr "---\n\nPCA 方法: " -msgid "Connectivity Map" -msgstr "连通性地图" - -msgid "Current field name:" -msgstr "当å‰å­—段å:" +#contributors: +msgid ".\nEnter a seed value to use between\n0 and " +msgstr ".\n输入一个ç§å­å€¼ï¼ŒèŒƒå›´æ˜¯0å’Œ " -msgid "Variable %s is specified. " -msgstr "å˜é‡%s已被指定. " +#contributors: +msgid "0x03 (dBASE III+)" +msgstr "0x03(dBASEâ…¢+)" -msgid "Boxplot Theme" -msgstr "箱型图主题" +#contributors: +msgid "1 Iteration" +msgstr "1次迭代" -msgid "Please enter minimum bound value" -msgstr "请输入最å°ç•Œé™å€¼" +#contributors: +msgid "199 Permutations" +msgstr "199次置æ¢" -msgid "CL" -msgstr "CL" +#contributors: +msgid "1st Variable (X)" +msgstr "第一å˜é‡ï¼ˆx)" -msgid "Greek (ISO-8859-7)" -msgstr "希腊语(ISO-8859-7)" +#contributors: +msgid "2 Iteration" +msgstr "2次迭代" -msgid "Produce bounding-box file?" -msgstr "生æˆè¾¹ç•Œæ¡†(Bounding-box)文件?" +#contributors: +msgid "2nd Variable (Y)" +msgstr "第二å˜é‡ï¼ˆy)" -msgid "Please select at least %d variables." -msgstr "请至少选择%d个å˜é‡ã€‚" +#contributors: +msgid "3 Iteration" +msgstr "3次迭代" -msgid "Keyhole Markup Language (*.kml)|*.kml" -msgstr "Keyhold标记语言(*.kml)|*.kml" +#contributors: +msgid "3D Plot" +msgstr "3D图" -msgid "Ok" -msgstr "确认" +#contributors: +msgid "3D Scatter Plot" +msgstr "三维散点图" -msgid "CreateWeights()" -msgstr "创建æƒé‡()" +#contributors: +msgid "3D Scatter Plot Variables" +msgstr "3D散点图å˜é‡" -msgid "Cores and Neighbors" -msgstr "核心和邻居" +#contributors: +msgid "3rd Variable (Z)" +msgstr "第三å˜é‡ï¼ˆz)" -msgid " Local Geary Cluster Map" -msgstr " 局部Gearyèšç±»åœ°å›¾" +#contributors: +msgid "4 Iteration" +msgstr "4次迭代" -msgid " already exists. OK to overwrite?" -msgstr " å·²ç»å­˜åœ¨ã€‚è¦è¦†ç›–å—?" +#contributors: +msgid "499 Permutations" +msgstr "499次置æ¢" -msgid "Successful aggregation." -msgstr "èšåˆæˆåŠŸã€‚" +#contributors: +msgid "4th Variable" +msgstr "第四å˜é‡" -msgid "Display Axes Scale Values" -msgstr "显示轴刻度值" +#contributors: +msgid "5 Iteration" +msgstr "5次迭代" -msgid "Japanese (Shift&JIS)" -msgstr "日语(Shift&JIS)" +#contributors: +msgid "5 of 5 variables needed" +msgstr "需è¦5/5个å˜é‡" -msgid "No Weights Found" -msgstr "没有æƒé‡æ–‡ä»¶" +#contributors: +msgid "6 Iteration" +msgstr "6次迭代" -msgid " Local Geary Significance Map" -msgstr " 局部Geary显著性地图" +#contributors: +msgid "99 Permutations" +msgstr "99次置æ¢" -msgid "Y Variable" -msgstr "Yå˜é‡" +#contributors: +msgid "999 Permutations" +msgstr "999次置æ¢" -msgid "Select datasource" -msgstr "选择数æ®æº" +#contributors: +msgid "<" +msgstr "<" -msgid "Error: the inverse matrix is ill-conditioned." -msgstr "错误:逆矩阵为病æ€çŸ©é˜µã€‚" +#contributors: +msgid "<<" +msgstr "<<" -msgid " with Time Control" -msgstr " 时间控制" +#contributors: +msgid "<=" +msgstr "<=" -msgid "Maps To Open" -msgstr "地图打开" +#contributors: +msgid "=" +msgstr "=" -msgid "Add Variable" -msgstr "添加å˜é‡" +#contributors: +msgid ">" +msgstr ">" -msgid "Save As progress dialog" -msgstr "ä¿å­˜ä¸ºè¿›åº¦å¯¹è¯æ¡†" +#contributors: +msgid ">>" +msgstr ">>" -msgid "Use selected as specified alpha level" -msgstr "使用上é¢é€‰ä¸­çš„值为alpha值" +#contributors: +msgid "A Table-only data source can't be stacked with current data source." +msgstr "表格数æ®æ— æ³•å åŠ åˆ°å½“å‰çš„æ•°æ®ã€‚" -msgid "2 Iteration" -msgstr "2次迭代" +#contributors: +msgid "A newer version of GeoDa is found. Do you want to update to version " +msgstr "å‘现了一个新版本的GeoDa。è¦æ›´æ–°ç‰ˆæœ¬å—? " -msgid "New Custom Categories Title:" -msgstr "自定义类别标题:" +#contributors: +msgid "A project file contains extra information not directly stored in the data source such as variable order and grouping." +msgstr "项目文件包å«ä¸ç›´æŽ¥å­˜å‚¨åœ¨æ•°æ®æºä¸­çš„é¢å¤–ä¿¡æ¯, 例如:å˜é‡é¡ºåºå’Œæ—¶é—´ï¼ˆåˆ†ç»„)å˜é‡." -msgid "WFS URL" -msgstr "WFS URL" +#contributors: +msgid "About DBF Viewer" +msgstr "关于DBF查看器" -msgid "Conditional Local Geary Map" -msgstr "æ¡ä»¶å±€éƒ¨Geary地图" +#contributors: +msgid "About GeoDa" +msgstr "关于GeoDa" -msgid "Saving data..." -msgstr "ä¿å­˜æ•°æ®â€¦" +#contributors: +msgid "About Precision Threshold" +msgstr "关于精确度阈值" -msgid "Select color scheme:" -msgstr "选择é…色方案:" +#contributors: +msgid "Adaptive bandwidth" +msgstr "自适应带宽" -msgid "Change Parameters" -msgstr "更改å‚æ•°" +#contributors: +msgid "Adaptive kernel" +msgstr "自适应核" -msgid "Select Variables (Multi-Selection)" -msgstr "选择å˜é‡ï¼ˆå¤šé€‰ï¼‰" +#contributors: +msgid "Add" +msgstr "添加" -msgid "Suggested field name:" -msgstr "建议字段å:" +#contributors: +msgid "Add Centroids to Table" +msgstr "将质心添加到表中(Centroids)" -msgid "Selectable Fill Color" -msgstr "å¯é€‰å¡«å……颜色" +#contributors: +msgid "Add Map Layer" +msgstr "添加图层" -msgid "The connectivity of selected spatial weights is incomplete, please adjust the spatial weights." -msgstr "所选空间æƒé‡çš„连通性ä¸å®Œæ•´ï¼Œè¯·è°ƒæ•´ç©ºé—´æƒé‡ã€‚" +#contributors: +msgid "Add Mean Centers to Table" +msgstr "将平å‡ä¸­å¿ƒæ·»åŠ åˆ°è¡¨ä¸­(Mean Centers)" -msgid "category 1" -msgstr "category 1" +#contributors: +msgid "Add Neighbors To Selection" +msgstr "添加邻居到选中的对象" -msgid "Data source (%s) doesn't exist. Please check the project configuration file." -msgstr "æ•°æ®æºï¼ˆ%s)ä¸å­˜åœ¨ã€‚请检查项目é…置文件。" +#contributors: +msgid "Add New ID Variable" +msgstr "添加新IDå˜é‡" -msgid "Once you have grouped variables, you can save a new space-time table and weights: To add a spatial ID to your space-time table and create space-time weights, you need to have an active weights file (Tools-Weights Manager)." -msgstr "定义好的分组å˜é‡å¯ä»¥ä¿å­˜ä¸ºä¸€ä¸ªæ—¶ç©ºè¡¨ä»¥å¹¶åˆ›å»ºç›¸åº”的时空æƒé‡ã€‚如果è¦åˆ›å»ºæ—¶ç©ºæƒé‡æ–‡ä»¶ï¼šè¯·é€šè¿‡èœå•ï¼ˆå·¥å…·-æƒé‡ç®¡ç†ï¼‰æ¥æŒ‡å®šä¸€ä¸ªç©ºé—´æƒé‡æ–‡ä»¶ã€‚" +#contributors: +msgid "Add OGR column error. Field type is unknown or not supported." +msgstr "添加 OGR 列错误。字段类型未知或ä¸å—支æŒã€‚" -msgid "Apply" -msgstr "应用" +#contributors: +msgid "Add OGR column error. Field type is unknown." +msgstr "添加 OGR 列错误。字段类型未知。" -msgid "Display Mean Centers" -msgstr "显示平å‡ä¸­å¿ƒ" +#contributors: +msgid "Add Time" +msgstr "添加时间" -msgid "Bivariate Local Join Count" -msgstr "åŒå˜é‡å±€éƒ¨Joint Count" +#contributors: +msgid "Add Variable" +msgstr "添加å˜é‡" -msgid "Unselected =" -msgstr "未选中=" +#contributors: +msgid "Add a name for your group of variables. \n\nYou can edit the time period labels for easier interpretation of results." +msgstr "命å该组å˜é‡ã€‚\n\n您å¯ä»¥ç¼–辑时间标签, 以便更容易地解释结果。" -msgid "(Please save results to see the summary report.)" -msgstr "(请ä¿å­˜ç»“æžœæ¥æŸ¥çœ‹èšç±»åˆ†æžæŠ¥å‘Šã€‚)" +#contributors: +msgid "Add basemap automatically:" +msgstr "自动添加底图:" -msgid "(Optional) You can change the data type for a field:" -msgstr "(å¯é€‰ï¼‰å¯ä»¥ä¸ºå­—段更改数æ®ç±»åž‹ï¼š" +#contributors: +msgid "Add new column to table" +msgstr "将新列添加到表中" -msgid "GeoDa cannot find proper projection or geographic coordinate system information to add a basemap. Please update this information (e.g. in .prj file)." -msgstr "GeoDa 找ä¸åˆ°é€‚当的投影或地ç†å标系信æ¯æ¥æ·»åŠ ç±»åº•å›¾ã€‚è¯·æ›´æ–°æ­¤ä¿¡æ¯ (例如, 在. prj 文件中)。" +#contributors: +msgid "Add/Remove Variables" +msgstr "添加/删除å˜é‡" -msgid "" -"Saving to data source (%s) failed.\n" -"\n" -"Details: %s" -msgstr "" -"ä¿å­˜åˆ°æ•°æ®æºï¼ˆ%s)失败。\n" -"\n" -"详情:%s" +#contributors: +msgid "Adjust Bubble Size" +msgstr "调整气泡大å°" -msgid "Change Map Transparency" -msgstr "地图é€æ˜Žåº¦è®¾ç½®" +#contributors: +msgid "Adjust Value Range of Y Axis" +msgstr "调整Y轴值范围" -msgid "4 Iteration" -msgstr "4次迭代" +#contributors: +msgid "Adjust Value Range of Y-Axis" +msgstr "调整Y轴的范围" -msgid "Themeless" -msgstr "无主题" +#contributors: +msgid "Adjust Values of Y Axis" +msgstr "调整Y轴值" -msgid "Min Region Size:" -msgstr "最å°åŒºåŸŸå¤§å°ï¼š" +#contributors: +msgid "Affinity with Guassian Kernel:\tSigma=" +msgstr "基于高斯核函数的相似矩阵:\tSigma=" -msgid "Error: Due to restrictions on the DBF file format, the particular combination of length and decimals entered is not valid. Based on your current choices, we recommend length = %d and decimals = %d" -msgstr "错误: 由于对 DBF 文件格å¼çš„é™åˆ¶, 输入的长度和å°æ•°ç‚¹ä½æ•°çš„特定组åˆæ— æ•ˆã€‚ æ ¹æ®æ‚¨å½“å‰çš„选择, 我们建议长度 =%d å’Œå°æ•°ç‚¹ä½æ•° =%d" +#contributors: +msgid "Affinity with K-NN:" +msgstr "基于K-NN的相似性矩阵:" -msgid "Set Display Precision:" -msgstr "设置显示精度:" +#contributors: +msgid "Affinity with K-Nearest Neighbors:\tK=" +msgstr "基于KNN的相似举è¯:\tK=" -msgid "Database/Instance Name" -msgstr "æ•°æ®åº“/实例å" +#contributors: +msgid "Affinity with Kernel:" +msgstr "基于核函数的相似矩阵:" -msgid "Map Themes" -msgstr "地图主题" +#contributors: +msgid "Aggregate" +msgstr "èšåˆ" -msgid "Nokia/HERE App Key" -msgstr "诺基亚/HERE地图的应用程åºå¯†é’¥" +#contributors: +msgid "Aggregate - " +msgstr "èšåˆ - " -msgid "POLY&ID" -msgstr "POLY&ID" +#contributors: +msgid "All" +msgstr "所有" -msgid "Variable Type Error" -msgstr "å˜é‡ç±»åž‹é”™è¯¯" +#contributors: +msgid "All Pairs" +msgstr "所有的对数(All pairs)" -msgid "Cartogram" -msgstr "å˜å½¢åœ°å›¾" +#contributors: +msgid "All Rights Reserved" +msgstr "版æƒæ‰€æœ‰" -msgid "Save Rates - %s over %s" -msgstr "ä¿å­˜æ¯”率å˜é‡ - %s 比 %s" +#contributors: +msgid "Allow a single cluster:" +msgstr "å…许åªç”Ÿæˆä¸€ä¸ªèšç±»:" -msgid "Max-p Settings" -msgstr "Max-p 设置" +#contributors: +msgid "Alpha:" +msgstr "é€æ˜Žåº¦:" -msgid "Before you can modify the variable %s, please close the %d view(s) that depend on it." -msgstr "在修改å˜é‡%s 之å‰, 请关闭ä¾èµ–于它的%d 个窗å£ã€‚" +#contributors: +msgid "Always using fixed-point notation" +msgstr "使用定点表示法(显示å°æ•°ä½ï¼‰" -msgid "Bivariate Moran's I" -msgstr "åŒå˜é‡Moran’s I" +#contributors: +msgid "Animation" +msgstr "动画" -msgid "maximum" -msgstr "最大值" +#contributors: +msgid "App Key" +msgstr "应用密钥" -msgid "Data Source Overview/Help: " -msgstr "支æŒçš„æ•°æ®æ ¼å¼å’Œç›¸å…³å¸®åŠ©: " +#contributors: +msgid "Append To Current Selection" +msgstr "附加到当å‰é€‰æ‹©" -msgid "Reset to system locale successfully. Please re-open current project with system locale." -msgstr "æˆåŠŸé‡ç½®ä¸ºç³»ç»ŸåŒºåŸŸè®¾ç½®ã€‚请é‡æ–°æ‰“开当å‰é¡¹ç›®ä½¿ç”¨ç³»ç»ŸåŒºåŸŸè®¾ç½®ã€‚" +#contributors: +msgid "Append to current selection" +msgstr "添加到当å‰é€‰æ‹©" -msgid "Send Crash Report" -msgstr "å‘é€å´©æºƒæŠ¥å‘Š" +#contributors: +msgid "Appl&y" +msgstr "应用" -msgid "Map Movie" -msgstr "地图动画" +#contributors: +msgid "Apply" +msgstr "应用" -msgid "Http connection timeout (seconds) for e.g. WFS, Geojson etc.:" -msgstr "Http连接超时(秒),例如WFSã€Geojson等:" +#contributors: +msgid "Apply kernel to diagonal weights" +msgstr "将核函数应用于对角线æƒé‡å€¼" -msgid "Weights file \"%s\" created successfully." -msgstr "空间æƒé‡æ–‡ä»¶â€œ%sâ€æˆåŠŸåˆ›å»ºã€‚" +#contributors: +msgid "April" +msgstr "四月" -msgid " BiLISA Cluster Map" -msgstr " åŒå˜é‡LISAèšç±»åœ°å›¾" +#contributors: +msgid "Arabic (Windows-1256)" +msgstr "阿拉伯语(Windows 1256)" -msgid "GeoDa does not support datasource with line data at this time. Please choose a datasource with either point or polygon data." -msgstr "GeoDaç›®å‰ä¸æ”¯æŒçº¿æ•°æ®çš„æ•°æ®æº. 请选择具有点或多边形数æ®çš„æ•°æ®æº." +#contributors: +msgid "Arc Distance" +msgstr "弧度è·ç¦»" -msgid "Get a free GeoDa-Web account: " -msgstr "获得å…费的GeoDa-Webå¸æˆ·: " +#contributors: +msgid "Ascending order" +msgstr "å‡åº" -msgid "Please open a data file rather than a project file (*.gda)." -msgstr "请打开一个数æ®æ–‡ä»¶ï¼Œè€Œä¸æ˜¯ä¸€ä¸ªé¡¹ç›®æ–‡ä»¶ï¼ˆ*.gda)。" +#contributors: +msgid "Assign To Target" +msgstr "分é…给目标" -msgid "In GdaFrame::OnCheckTestMode():" -msgstr "In GdaFrame::OnCheckTestMode():" +#contributors: +msgid "Assign Values to Currently Selected / Unselected" +msgstr "赋值到当å‰é€‰ä¸­çš„(或未选中)的对象" -msgid "Connect" -msgstr "连接" +#contributors: +msgid "Assoc. Var." +msgstr "相关å˜é‡" -msgid "0x03 (dBASE III+)" -msgstr "0x03(dBASEâ…¢+)" +#contributors: +msgid "Attributes (Optional)" +msgstr "属性 (å¯é€‰)" -msgid "Base Variable" -msgstr "基本å˜é‡" +#contributors: +msgid "August" +msgstr "八月" -msgid "Select, hold CTRL for brushing" -msgstr "选中,按CTRL键进行动æ€åŒæ­¥é€‰å–" +#contributors: +msgid "Auto Weighting" +msgstr "自动加æƒ" -msgid "Select, hold CMD for brushing" -msgstr "选中,按CMD键进行动æ€åŒæ­¥é€‰å–" +#contributors: +msgid "Autocorr." +msgstr "自相关系数" -msgid "Ungrouped Variables" -msgstr "未分组å˜é‡" +#contributors: +msgid "Autocorr. of " +msgstr "自相关系数" -msgid "Cyrillic (KOI8-R)" -msgstr "西里尔(KII8—R)" +#contributors: +msgid "Automatic Labels" +msgstr "自动标签" -msgid "Append to current selection" -msgstr "添加到当å‰é€‰æ‹©" +#contributors: +msgid "Average" +msgstr "å¹³å‡å€¼" -msgid "Central European Latin-2 (ISO-8859-2)" -msgstr "中欧拉ä¸æ–‡-2(ISO-859-2)" +#contributors: +msgid "Average Comparison Chart" +msgstr "å¹³å‡å€¼æ¯”较图" -msgid "Save Project" -msgstr "ä¿å­˜é¡¹ç›®" +#contributors: +msgid "Averages Chart" +msgstr "å¹³å‡å€¼æ¯”较图" -msgid "Conditional Local Geary Map Variables" -msgstr "æ¡ä»¶å±€éƒ¨Geary地图å˜é‡" +#contributors: +msgid "Axes Through Origin" +msgstr "通过原点的轴" -msgid "Undo" -msgstr "撤销" +#contributors: +msgid "Axis Option" +msgstr "轴选项" -msgid "Paste" -msgstr "粘贴" +#contributors: +msgid "Axis Selection" +msgstr "轴选择" -msgid "min:" -msgstr "最å°å€¼ï¼š" +#contributors: +msgid "Background" +msgstr "背景" -msgid "min" -msgstr "最å°å€¼" +#contributors: +msgid "Background Color" +msgstr "背景颜色" -msgid "median" -msgstr "中ä½æ•°" +#contributors: +msgid "Bandwidth:" +msgstr "带宽:" -msgid "s.d." -msgstr "标准差" +#contributors: +msgid "Base Map " +msgstr "网络底图 " -msgid "IQR" -msgstr "四分ä½æ•°é—´è·(IQR)" +#contributors: +msgid "Base Variable" +msgstr "基本å˜é‡" -msgid "median:" -msgstr "中ä½æ•°ï¼š" +#contributors: +msgid "Basemap" +msgstr "底图" -msgid "6 Iteration" -msgstr "6次迭代" +#contributors: +msgid "Basemap Configuration" +msgstr "底图é…ç½®" -msgid "Save Details" -msgstr "ä¿å­˜è¯¦æƒ…" +#contributors: +msgid "Basemap Configuration Dialog" +msgstr "底图é…置对è¯æ¡†" -msgid "" -"Can't get datasource type from: %s\n" -"\n" -"Please select datasource supported by GeoDa or add extension to file datasource." -msgstr "" -"无法从%s获å–æ•°æ®æºç±»åž‹\n" -"\n" -"请选择GeoDa支æŒçš„æ•°æ®æºæˆ–将扩展å添加到文件数æ®æºã€‚" +#contributors: +msgid "Basemap Parameters:" +msgstr "底图设置:" -msgid "Bubble Chart Variables" -msgstr "气泡图å˜é‡" +#contributors: +msgid "Basemap Sources: (Format: group&name.basemap&name,basemap&url)" +msgstr "Basemap Sources: (Format: group&name.basemap&name,basemap&url)" -msgid "Open data source progress dialog" -msgstr "打开数æ®è¿›åº¦" +#contributors: +msgid "Before add/delete observations, please close the %d view(s) that depend on it." +msgstr "在添加/删除观测之å‰, 请关闭ä¾èµ–于它的%d 个窗å£ã€‚" -msgid "Distance band" -msgstr "è·ç¦»å¸¦" +#contributors: +msgid "Before proceed with operation (add/remove, move, or rename), please close %d views that depend on it." +msgstr "在继续æ“作(添加ã€åˆ é™¤ã€ç§»åŠ¨æˆ–é‡å‘½å)ä¹‹å‰ , 请关闭使用过该å˜é‡çš„%d 个窗å£ã€‚" -msgid "X" -msgstr "X" +#contributors: +msgid "Before you can modify the variable %s, please close the %d view(s) that depend on it." +msgstr "在修改å˜é‡%s 之å‰, 请关闭ä¾èµ–于它的%d 个窗å£ã€‚" -msgid "Use inverse distance?" -msgstr "使用åè·ç¦»ï¼Ÿ" +#contributors: +msgid "Bivariate" +msgstr "二元å˜é‡" -msgid "inverse distance" -msgstr "使用åè·ç¦»" +#contributors: +msgid "Bivariate Local Join Count" +msgstr "åŒå˜é‡å±€éƒ¨Joint Count" -msgid "Background Color" -msgstr "背景颜色" +#contributors: +msgid "Bivariate Local Moran's I" +msgstr "åŒå˜é‡å±€éƒ¨Moran’s I" -msgid "Comma Separated Value (*.csv)|*.csv" -msgstr "逗å·åˆ†éš”值 (*.csv)|*.csv" +#contributors: +msgid "Bivariate Moran Variable Settings" +msgstr "二元Moranå˜é‡è®¾ç½®" -msgid "Shape Centers" -msgstr "形状中心" +#contributors: +msgid "Bivariate Moran's I" +msgstr "åŒå˜é‡Moran’s I" -msgid "Exit with unsaved changes?" -msgstr "未ä¿å­˜æ›´æ”¹ï¼Œç›´æŽ¥é€€å‡ºï¼Ÿ" +#contributors: +msgid "Bivariate Moran's I (%s): %s and lagged %s" +msgstr "åŒå˜é‡Moran's I(%s):%s和滞åŽ%s" -msgid "Run Diff-in-Diff Test" -msgstr "è¿è¡ŒDiff-in-Diff测试" +#contributors: +msgid "Bonferroni bound:" +msgstr "Bonferroniç•Œé™:" -msgid "Set Display Precision on Axes" -msgstr "设置轴上的显示精度" +#contributors: +msgid "Both are significant, Spatial Lag Model has been selected." +msgstr "两者都是显著的,已选择空间滞åŽæ¨¡åž‹ã€‚" -msgid "Tabu length for Tabu Search algorithm has to be an integer number larger than 1 (e.g. 85)." -msgstr "ç¦å¿Œæœç´¢ç®—法的ç¦å¿Œé•¿åº¦å¿…须是大于1的整数(例如85)。" +#contributors: +msgid "Bottom" +msgstr "Bottom" -msgid "Tabu Search" -msgstr "ç¦å¿Œæœç´¢ç®—法(Tabu)" +#contributors: +msgid "Bounding Box" +msgstr "边框" -msgid "Tabu lenght" -msgstr "步长(Tabu)" +#contributors: +msgid "Box Map (Hinge=1.5)" +msgstr "箱线地图 (Hinge=1.5)" -msgid "Input datasource" -msgstr "输入数æ®æº" +#contributors: +msgid "Box Map (Hinge=3.0)" +msgstr "箱线地图 (Hinge=3.0)" -msgid "Number of Neighbors" -msgstr "邻居数é‡" +#contributors: +msgid "Box Plot" +msgstr "箱线图" -msgid "Choose Intervals" -msgstr "指定区间数(Intervals)" +#contributors: +msgid "Boxplot Theme" +msgstr "箱型图主题" -msgid "Please restart GeoDa to apply the language setup." -msgstr "请é‡æ–°å¯åŠ¨GEODAæ¥åº”用语言设置。" +#contributors: +msgid "Breaks" +msgstr "断点" -msgid "Operator" -msgstr "æ“作符" +#contributors: +msgid "Breaks with same values were created. Please choose a smaller categories, or manually edit the break values." +msgstr "" -msgid "This file type is not supported." -msgstr "文件类型ä¸æ”¯æŒã€‚" +#contributors: +msgid "Bubble Chart" +msgstr "气泡图" -msgid "Space" -msgstr "空间分æž" +#contributors: +msgid "Bubble Chart - x: %s, y: %s, size: %s, %s" +msgstr "气泡图-x:%s, y:%s, 大å°:%s,%s" -msgid "Base Map " -msgstr "网络底图 " +#contributors: +msgid "Bubble Chart Variables" +msgstr "气泡图å˜é‡" -msgid "Please select an Event field." -msgstr "请选择一个事件字段。" +#contributors: +msgid "Bubble Size" +msgstr "气泡大å°" -msgid "show significance maps" -msgstr "显示显著性图" +#contributors: +msgid "Bubble Size Adjust Dialog" +msgstr "气泡大å°è®¾ç½®" -msgid "This view currently supports data with at most 1000 observations. The Spatial Correlogram Scatterplot plots distances between all pairs of observations. The current data set has %d observations and %d unordered pairs of observations." -msgstr "此视图目å‰æ”¯æŒæœ€å¤š1000个观察对象。空间 Correlogram 散点图绘制所有的对象两两之间的è·ç¦»ã€‚当å‰æ•°æ®é›†æœ‰%d 个对象产生%d 对è·ç¦»ã€‚" +#contributors: +msgid "Buffer query area:" +msgstr "缓冲查询区域:" -msgid "CSV Configuration Warning" -msgstr "CSVé…置警告" +#contributors: +msgid "Bug Report" +msgstr "软件缺陷报告" -msgid "Reset" -msgstr "é‡ç½®" +#contributors: +msgid "C&reate" +msgstr "创建" -msgid "All" -msgstr "所有" +#contributors: +msgid "CRS (proj4 format)" +msgstr "CRS (proj4 æ ¼å¼)" -msgid "Min value of Y axis" -msgstr "Y轴最å°å€¼" +#contributors: +msgid "CSV Configuration Warning" +msgstr "CSVé…置警告" -msgid "Circle" -msgstr "圆形" +#contributors: +msgid "CSV Contains Variable Names?" +msgstr "CSV是å¦åŒ…å«å˜é‡å?" -msgid "Intervals in the Histogram" -msgstr "直方图的分组数é‡" +#contributors: +msgid "CSV File Configuration" +msgstr "CSV 文件设置" -msgid "What windows to open?" -msgstr "打开什么窗å£ï¼Ÿ" +#contributors: +msgid "Calculator" +msgstr "计算器" -msgid "Edit" -msgstr "编辑" +#contributors: +msgid "Can't connect to datasource: " +msgstr "无法连接到数æ®æº: " -msgid "Save Selection" -msgstr "ä¿å­˜é€‰æ‹©" +#contributors: +msgid "Can't create layer %s with empty field (%s) name." +msgstr "无法创建层 %s, 字段 (%s) 为空." -msgid "GeoDa maj.min.bld (type), day month year" -msgstr "GeoDa maj.min.bld (type), day month year" +#contributors: +msgid "Can't create output OGR driver. \n\nDetails:" +msgstr "无法创建OGRæ•°æ®. \n\n详细:" -msgid "Cores" -msgstr "核心" +#contributors: +msgid "Can't get bounding box information from this datasource. Please try another datasource." +msgstr "无法从此数æ®æºèŽ·å–边界信æ¯ã€‚请å°è¯•å¦ä¸€ä¸ªæ•°æ®æºã€‚" -msgid "Second Variable (Y)" -msgstr "第二å˜é‡ï¼ˆY)" +#contributors: +msgid "Can't get datasource type from: %s\n\nPlease select datasource supported by GeoDa or add extension to file datasource." +msgstr "无法从%s获å–æ•°æ®æºç±»åž‹\n\n请选择GeoDa支æŒçš„æ•°æ®æºæˆ–将扩展å添加到文件数æ®æºã€‚" -msgid "GeoDa CSV File Configuration" -msgstr "GeoDa CSV文件é…ç½®" +#contributors: +msgid "Can't get layers from unknown datasource. Please complete the datasource fields." +msgstr "无法从未知数æ®æºèŽ·å–图层。 请填写数æ®æºå­—段。" -msgid "using row-standardized weights" -msgstr "使用行标准化空间æƒé‡" +#contributors: +msgid "Can't save Thiessen polygons" +msgstr "无法ä¿å­˜æ³°æ£®å¤šè¾¹å½¢" -msgid "Edit Variable Properties" -msgstr "编辑å˜é‡å±žæ€§" +#contributors: +msgid "Can't write/create layer \"" +msgstr "无法创建层 \"" -msgid "Error: there was a problem reading the field names from the text file." -msgstr "错误: 从文本文件读å–字段å称时出现问题。" +#contributors: +msgid "Cancel" +msgstr "å–消" -msgid "LOWESS Smoother Parameters" -msgstr "LOWESS平滑å‚æ•°" +#contributors: +msgid "Canvas Layout Preview" +msgstr "输出图åƒé¢„览" -msgid "Data" -msgstr "æ•°æ®" +#contributors: +msgid "Carto" +msgstr "Carto" -msgid "Specified id field (%s) not found in currently loaded Table." -msgstr "当å‰åŠ è½½çš„表中找未到指定的ID字段(%s)。" +#contributors: +msgid "Cartogram" +msgstr "å˜å½¢åœ°å›¾" -msgid "Select Neighborless Observations" -msgstr "选择无邻居的对象" +#contributors: +msgid "Cartogram Variables" +msgstr "å½¢å˜åœ°å›¾å˜é‡" -msgid "Histogram: " -msgstr "直方图: " +#contributors: +msgid "Categories" +msgstr "类别数" -msgid "Korean (EUC-KR)" -msgstr "韩语(EUC-KR)" +#contributors: +msgid "Categories \"%s\" is currently in use by another view. Please close or change all views using this custom categories before deleting." +msgstr "分类“%sâ€ç›®å‰è¢«å¦ä¸€çª—å£ä½¿ç”¨ã€‚在删除之å‰ï¼Œè¯·å…³é—­ä½¿ç”¨å½“å‰åˆ†ç±»çš„所有窗å£ã€‚" -msgid "Run" -msgstr "è¿è¡Œ" - -msgid "Add/Remove Variables" -msgstr "添加/删除å˜é‡" - -msgid "First Variable (X)" -msgstr "第一å˜é‡ï¼ˆX)" - -msgid "Save" -msgstr "ä¿å­˜" +#contributors: +msgid "Categories of " +msgstr "分类 " -msgid "name:" -msgstr "å称:" +#contributors: +msgid "Categories title \"%s\" already exists. Please choose a different title." +msgstr "分类标题â€%sâ€å·²ç»å­˜åœ¨ã€‚请选择å¦ä¸€ä¸ªæ ‡é¢˜ã€‚" -msgid "Please input user name." -msgstr "请输入用户å。" +#contributors: +msgid "Category" +msgstr "分类" -msgid "Variable Name" -msgstr "å˜é‡å" +#contributors: +msgid "Category Editor" +msgstr "自定义分类编辑器" -msgid "variable name" -msgstr "å˜é‡å" +#contributors: +msgid "Central European (CP852)" +msgstr "中欧(CP852)" -msgid "GeoDa Project (*.gda)|*.gda" -msgstr "GeoDa项目文件(*.gda)|*.gda" +#contributors: +msgid "Central European (Windows-1250)" +msgstr "中欧(Windows-1250)" -msgid "enumerate as 1, 2, 3, ..." -msgstr "枚举,如:1, 2, 3,…" +#contributors: +msgid "Central European Latin-2 (ISO-8859-2)" +msgstr "中欧拉ä¸æ–‡-2(ISO-859-2)" -msgid "Line" -msgstr "线段" +#contributors: +msgid "Centroid (X)" +msgstr "" -msgid "Cancel" -msgstr "å–消" +#contributors: +msgid "Centroid (Y)" +msgstr "" -msgid "Aggregate - " -msgstr "èšåˆ - " +#contributors: +msgid "Change" +msgstr "更改" -msgid "Set number of CPU cores manually:" -msgstr "手动设置CPU(Cores)æ•°é‡ï¼š" +#contributors: +msgid "Change Categories Title" +msgstr "更改分类的标题" -msgid "Set Number Separators" -msgstr "设置数字分隔符" +#contributors: +msgid "Change Color of Root" +msgstr "" -msgid "Not Significant" -msgstr "ä¸æ˜¾è‘—" +#contributors: +msgid "Change Current Map Type" +msgstr "更改当å‰åœ°å›¾ç±»åž‹" -msgid "Help" -msgstr "帮助" +#contributors: +msgid "Change Edge Color" +msgstr "改å˜è¾¹ç¼˜é¢œè‰²" -msgid "Welcome to GeoDa 1.8.16" -msgstr "欢迎æ¥åˆ°GeoDa 1.8.16" +#contributors: +msgid "Change Edge Thickness" +msgstr "改å˜è¾¹çš„宽度" -msgid "A newer version of GeoDa is found. Do you want to update to version " -msgstr "å‘现了一个新版本的GeoDa。è¦æ›´æ–°ç‰ˆæœ¬å—? " +#contributors: +msgid "Change Fill Color" +msgstr "修改填充颜色" -msgid "Export or save layer to" -msgstr "导出或ä¿å­˜æ•°æ®å±‚到" +#contributors: +msgid "Change Fill Color of Neighbors" +msgstr "改å˜é‚»å±…的填充颜色" -msgid "Conditional LISA Map" -msgstr "æ¡ä»¶LISA地图" +#contributors: +msgid "Change Font" +msgstr "更改字体" -msgid "Inference Settings (%d perm)" -msgstr "推断设置(%d ç½®æ¢ï¼‰" +#contributors: +msgid "Change Map Transparency" +msgstr "地图é€æ˜Žåº¦è®¾ç½®" -msgid "Quantile Map" -msgstr "分ä½æ•°(Quantile)地图" +#contributors: +msgid "Change Outline Color" +msgstr "修改轮廓颜色" -msgid "Please choose Period 1 first." -msgstr "请先选择时段1。" +#contributors: +msgid "Change Outline Color of Selected" +msgstr "修改选择对象轮廓颜色" -msgid "Spatial Lag" -msgstr "空间滞åŽæ¨¡åž‹" +#contributors: +msgid "Change Parameters" +msgstr "更改å‚æ•°" -msgid "Add ID Variable..." -msgstr "添加IDå˜é‡â€¦" +#contributors: +msgid "Change Point Radius" +msgstr "设置点的åŠå¾„" -msgid "id variable" -msgstr "idå˜é‡" +#contributors: +msgid "Change Seed" +msgstr "改å˜éšæœºæ•°çš„ç§å­" -msgid "User Name" -msgstr "用户å" +#contributors: +msgid "Change Size of Root" +msgstr "修改根(root)大å°" -msgid "Vertical Bins Breaks" -msgstr "ç«–ç›´æ–¹å‘区间(Bins)断点" +#contributors: +msgid "Change field properties (%s) failed.\n\nDetails: %s" +msgstr "" -msgid "Please input table name." -msgstr "请输入表å。" +#contributors: +msgid "Change title \"%s\" to" +msgstr "更改标题â€%sâ€ä¸º" -msgid "Ascending order" -msgstr "å‡åº" +#contributors: +msgid "Change variable type for \"%s\" has failed. Please check all values are valid for conversion." +msgstr "更改 \"%s\" çš„å˜é‡ç±»åž‹å¤±è´¥ã€‚请检查所有值是å¦æœ‰æ•ˆã€‚" -msgid "2nd Variable (Y)" -msgstr "第二å˜é‡ï¼ˆy)" +#contributors: +msgid "Check Bug Report on Github" +msgstr "检查github上的bug报告" -msgid "Please select an option." -msgstr "请选择一个选项." +#contributors: +msgid "Check Updates" +msgstr "检查更新" -msgid "Create" -msgstr "创建" +#contributors: +msgid "Checking Symmetry..." +msgstr "检查对称性……" -msgid "Neighborless" -msgstr "无邻域" +#contributors: +msgid "Chinese Simplified (GB2312)" +msgstr "中文简化版(GB23 12)" -msgid "First row of CSV file" -msgstr "CSV文件的第一行" +#contributors: +msgid "Chinese Traditional (Big5)" +msgstr "ç¹ä½“中文(BIG5)" -msgid "Minimum Bound:" -msgstr "最å°ç•Œé™ï¼š" +#contributors: +msgid "Choose A Color" +msgstr "选择颜色" -msgid "No weights file was created due to all observations being isolates for the specified threshold value. Increase the threshold to create a non-empty weights file." -msgstr "无法创建空间æƒé‡æ–‡ä»¶ï¼šæ‰€è®¾é˜ˆå€¼è¿‡å°ï¼Œæ‰€æœ‰å¯¹è±¡æ— æ³•åœ¨é˜ˆå€¼èŒƒå›´å†…找到邻居。请å°è¯•å¢žå¤§é˜ˆå€¼å†åˆ›å»ºç©ºé—´æƒé‡æ–‡ä»¶ã€‚" +#contributors: +msgid "Choose Cateogry Color" +msgstr "选择分类颜色" -msgid "threshold value" -msgstr "阈值" +#contributors: +msgid "Choose Cateogry Fill Color" +msgstr "选择分类填充色" -msgid "Zoom In" -msgstr "缩å°" +#contributors: +msgid "Choose Cateogry Outline Color" +msgstr "选择分类轮廓色" -msgid "Space-time variables with duplicate name \"%s\" found." -msgstr "找到é‡å¤å称为 \"%s\" 的时空å˜é‡ã€‚" +#contributors: +msgid "Choose Intervals" +msgstr "指定区间数(Intervals)" -msgid "The Table should always be open, although somtimes it is hidden while the project is open. This condition has been violated. Please report this to the program developers." -msgstr "表格应始终打开,尽管在项目打开状æ€æ—¶å®ƒå·²éšè—。这ç§æƒ…况ä¸ç¬¦åˆæ ‡å‡†ï¼Œè¯·å°†æ­¤æŠ¥å‘Šç»™ç¨‹åºå¼€å‘人员。" +#contributors: +msgid "Choose Weights" +msgstr "选择空间æƒé‡" -msgid "Please input a valid url." -msgstr "请输入有效的URL。" +#contributors: +msgid "Choose Weights File" +msgstr "选择空间æƒé‡æ–‡ä»¶" -msgid "Show Axes Through Origin" -msgstr "显示通过原点的轴" +#contributors: +msgid "Choose an output weights file name." +msgstr "选择一个输出空间æƒé‡æ–‡ä»¶å。" -msgid "Publish to GeoDa-Web" -msgstr "å‘布到GeoDa-Web" +#contributors: +msgid "Chosen field is not a numeric type. Please select a numeric type field." +msgstr "所选字段ä¸æ˜¯æ•°å€¼ç±»åž‹ã€‚ 请选择数字类型字段。" -msgid "Weights File" -msgstr "æƒé‡æ–‡ä»¶" +#contributors: +msgid "Chosen field is not a numeric type. Please select a numeric type field." +msgstr "选择的字段ä¸æ˜¯æ•°å€¼ç±»åž‹ã€‚请选择一个数值类型的字段。" -msgid "Upper outlier" -msgstr "高异常值" +#contributors: +msgid "Chosen key field '%s' s a time variant. Please choose a non-time variant field as key." +msgstr "选择的键字段 \"%s\" 是一个时间å˜é‡ã€‚请选择一个éžæ—¶é—´å˜é‡å­—段作为键。" -msgid "" -"It looks like GeoDa has been terminated abnormally. \n" -"Do you want to send a crash report to GeoDa team? \n" -"\n" -"(Optional) Please leave your email address,\n" -"so we can send a follow-up email once we have a fix." +#contributors: +msgid "Chosen key field is not valid. Please select another key field" msgstr "" -"检测到GeoDa程åºå¼‚常终止。\n" -"你想å‘GeoDa团队å‘é€å´©æºƒæŠ¥å‘Šå—?\n" -"(å¯é€‰ï¼‰è¯·ç•™ä¸‹æ‚¨çš„电å­é‚®ä»¶åœ°å€ï¼Œ\n" -"以便我们在修å¤è¯¥é—®é¢˜åŽå‘é€é€šçŸ¥ç”µå­é‚®ä»¶ã€‚" -msgid "Record order specified, but found minimum and maximum observation values of %d and %d which is incompatible with number of observations specified in first line of weights file: %d ." -msgstr "按记录顺åº, 最å°å’Œæœ€å¤§è§‚测值为%d å’Œ%d , 这与空间æƒé‡æ–‡ä»¶ä¸­ç¬¬ä¸€è¡ŒæŒ‡å®šçš„对象数ä¸ä¸€è‡´:%d。" +#contributors: +msgid "Chow test for sel/unsel regression subsets: " +msgstr "选中和未选中对象生æˆçš„线性回归进行周(Chow)检验: " -msgid "Stop" -msgstr "åœæ­¢" +#contributors: +msgid "Circle" +msgstr "圆形" -msgid "Select All..." -msgstr "选择所有…" +#contributors: +msgid "Circle Color" +msgstr "圆圈颜色" -msgid "Event Variable" -msgstr "事件å˜é‡" +#contributors: +msgid "Circle Size" +msgstr "圆圈大å°" -msgid "Success / Warning" -msgstr "æˆåŠŸ/警告" +#contributors: +msgid "Classic " +msgstr "ç»å…¸çº¿æ€§å›žå½’模型 " -msgid "Length (max 254)" -msgstr "长度(最长 254)" +#contributors: +msgid "Classification Themes" +msgstr "分类主题" -msgid "length" -msgstr "长度" +#contributors: +msgid "Clean Basemap Cache" +msgstr "清空底图缓存" -msgid "" -"decimal\n" -"places" -msgstr "" -"å°æ•°ç²¾åº¦\n" -"ä½æ•°" +#contributors: +msgid "Clear Highlight Association" +msgstr "å–消图层关è”" -msgid "" -"displayed\n" -"decimal places" -msgstr "" -"显示å°æ•°ç²¾åº¦\n" -"ä½æ•°" +#contributors: +msgid "Clear Selection" +msgstr "清除选择" -msgid "parent group" -msgstr "所在分组(时间å˜é‡)" +#contributors: +msgid "Click RegressionDlg::OnSaveToTxtFileClick" +msgstr "Click RegressionDlg::OnSaveToTxtFileClick" -msgid "" -"minimum\n" -"possible" -msgstr "å¯èƒ½æœ€å°å€¼" +#contributors: +msgid "Click RegressionDlg::OnViewResultsClick" +msgstr "Click RegressionDlg::OnViewResultsClick" -msgid "" -"maximum\n" -"possible" -msgstr "å¯èƒ½æœ€å¤§å€¼" +#contributors: +msgid "Close" +msgstr "关闭" -msgid "New Selection" -msgstr "新选择" +#contributors: +msgid "Cluster Map " +msgstr "èšç±»åœ°å›¾ " -msgid "Y-Axis" -msgstr "Yè½´" +#contributors: +msgid "Cluster Maps" +msgstr "èšç±»åœ°å›¾" -msgid "There was a problem associating the weights file." -msgstr "å…³è”空间æƒé‡æ–‡ä»¶æ—¶å‡ºçŽ°é—®é¢˜ã€‚" +#contributors: +msgid "Cluster centers:" +msgstr "èšç±»ä¸­å¿ƒ:" -msgid "Synchronize " -msgstr "åŒæ­¥ " +#contributors: +msgid "Clusters" +msgstr "èšç±»" -msgid "Sort" -msgstr "排åº" +#contributors: +msgid "Co-location Join Count" +msgstr "åŒå€¼åŒä½(Colocation) Join Count" -msgid "Please enter a field name for saving clustering results." -msgstr "请输入用于ä¿å­˜èšç±»ç»“果的字段å。" +#contributors: +msgid "Co-location Join Count only applies to co-location case. The selected variables have no co-location. Please change your selection, or use Univariate/Bivariate Local Join Count." +msgstr "" -msgid "Variable:" -msgstr "å˜é‡ï¼š" +#contributors: +msgid "Co-location Map" +msgstr "åŒå€¼åŒä½(Colocation)地图" -msgid "No update required" -msgstr "ä¸éœ€è¦æ›´æ–°" +#contributors: +msgid "Co-location Map: " +msgstr "åŒå€¼åŒä½(Colocation)地图:" -msgid "Save Results" -msgstr "ä¿å­˜ç»“æžœ" +#contributors: +msgid "Co-location Settings" +msgstr "Co-location设置" -msgid "Save Image to File" -msgstr "将图åƒä¿å­˜åˆ°æ–‡ä»¶" +#contributors: +msgid "Coeff. Var. Mat." +msgstr "系数方差矩阵." -msgid "Specified key value field \"%s\" on first line of weights file is not an integer type in the currently loaded Table." -msgstr "空间æƒé‡æ–‡ä»¶ä¸­ç¬¬ä¸€è¡ŒæŒ‡å®šçš„键值字段“%sâ€ä¸æ˜¯æ•´æ•°ç±»åž‹ã€‚" +#contributors: +msgid "Colocation Cluster" +msgstr "Colocationèšç±»" -msgid "Circle Size" -msgstr "圆圈大å°" +#contributors: +msgid "Color" +msgstr "颜色" -msgid "Please input database name." -msgstr "请输入数æ®åº“å称。" +#contributors: +msgid "Color Scheme" +msgstr "é…色方案" -msgid "Variable Properties - " -msgstr "å˜é‡å±žæ€§- " +#contributors: +msgid "Column Name" +msgstr "列å" -msgid "Export shape to boundary successfully." -msgstr "æˆåŠŸå¯¼å‡ºåœ°å›¾çš„边界。" +#contributors: +msgid "Column Number (from 0)" +msgstr "Column Number (from 0)" -msgid "Error: number of fields must be > 2." -msgstr "错误: 字段长度必须大于2." +#contributors: +msgid "Comma Separated Value (*.csv)|*.csv" +msgstr "逗å·åˆ†éš”值 (*.csv)|*.csv" -msgid "The data source is read only. Please try to save as other data source." -msgstr "æ•°æ®æºåªè¯»ï¼Œè¯·å°è¯•å°†å…¶å¯¼å‡ºä¸ºå…¶ä»–å¯è¯»å†™æ•°æ®æ ¼å¼." +#contributors: +msgid "Components:" +msgstr "选择è¦ä¿æŒçš„主æˆåˆ†æ•°ï¼š" -msgid "row:\n" -msgstr "行:\n" +#contributors: +msgid "Conditional Co-location Map Variables" +msgstr "æ¡ä»¶Co-location地图å˜é‡" -msgid "KMeans Dialog" -msgstr "Kå‡å€¼å¯¹è¯æ¡†" +#contributors: +msgid "Conditional G Cluster Map Variables" +msgstr "æ¡ä»¶Gèšç±»åœ°å›¾å˜é‡" -msgid "max-p" -msgstr "max-p" +#contributors: +msgid "Conditional GetisOrd Map" +msgstr "æ¡ä»¶GetisOrd地图" -msgid "# Neighors:" -msgstr "#邻居:" +#contributors: +msgid "Conditional Histogram" +msgstr "æ¡ä»¶ç›´æ–¹å›¾" -msgid "Rates Variable Settings" -msgstr "比率å˜é‡è®¾ç½®" +#contributors: +msgid "Conditional Histogram Variables" +msgstr "æ¡ä»¶ç›´æ–¹å›¾å˜é‡" -msgid "Error: no records found in data source." -msgstr "错误:数æ®æºä¸­æ‰¾ä¸åˆ°è®°å½•ã€‚" +#contributors: +msgid "Conditional LISA Map" +msgstr "æ¡ä»¶LISA地图" -msgid "Specified key value field \"%s\" on first line of weights file not found in currently loaded Table." -msgstr "在当å‰åŠ è½½çš„表中找ä¸åˆ°ç¬¬ä¸€è¡Œæƒé‡æ–‡ä»¶ä¸­æŒ‡å®šçš„键值字段%s。" +#contributors: +msgid "Conditional LISA Map Variables" +msgstr "æ¡ä»¶LISA地图å˜é‡" -msgid "Change variable type for \"%s\" has failed. Please check all values are valid for conversion." -msgstr "更改 \"%s\" çš„å˜é‡ç±»åž‹å¤±è´¥ã€‚请检查所有值是å¦æœ‰æ•ˆã€‚" +#contributors: +msgid "Conditional Local Geary Map" +msgstr "æ¡ä»¶å±€éƒ¨Geary地图" -msgid "Latitude/Y:" -msgstr "纬度/Y:" +#contributors: +msgid "Conditional Local Geary Map Variables" +msgstr "æ¡ä»¶å±€éƒ¨Geary地图å˜é‡" -msgid "" -"The geometries will not be saved when exporting to a Table-only data source.\n" -"\n" -"Do you want to continue?" -msgstr "" -"注æ„:导出到表格数æ®æ ¼å¼æ—¶çŸ¢é‡æ•°æ®å°†ä¼šä¸¢å¤± 。\n" -"\n" -"ç»§ç»­å¯¼å‡ºå— ï¼Ÿ" +#contributors: +msgid "Conditional Local Join Count Map" +msgstr "æ¡ä»¶å±€éƒ¨Join Count地图" -msgid "X-coordinate variable" -msgstr "Xåæ ‡å˜é‡" +#contributors: +msgid "Conditional Map" +msgstr "æ¡ä»¶åœ°å›¾" -msgid "Univariate Local Geary" -msgstr "å•å˜é‡å±€éƒ¨Geary" +#contributors: +msgid "Conditional Map Variables" +msgstr "æ¡ä»¶åœ°å›¾å˜é‡" -msgid "Raw Rate" -msgstr "原始比率" +#contributors: +msgid "Conditional Plot" +msgstr "æ¡ä»¶å›¾" -msgid "choice:" -msgstr "选择:" +#contributors: +msgid "Conditional Scatter Plot" +msgstr "æ¡ä»¶æ•£ç‚¹å›¾" -msgid "%d of %d variables to include" -msgstr "已包å«%d个å˜é‡ï¼ˆä¸€å…±%d个å˜é‡" +#contributors: +msgid "Conditional Scatter Plot Variables" +msgstr "æ¡ä»¶æ•£ç‚¹å›¾å˜é‡" -msgid "%d variables to include" -msgstr "已包å«%d个å˜é‡" +#contributors: +msgid "Connect" +msgstr "连接" -msgid "GeoDa can't change the variable type to DATE/TIME. Please select another type." -msgstr "GeoDa 无法将å˜é‡ç±»åž‹æ›´æ”¹ä¸ºæ—¥æœŸ/时间。请选择其他类型。" +#contributors: +msgid "Connect to Data Source" +msgstr "连接数æ®æº" -msgid "Nokia Hybrid" -msgstr "Nokia Hybrid" +#contributors: +msgid "Connectivity" +msgstr "连通性" -msgid "Horizontal Cells" -msgstr "æ°´å¹³å•å…ƒ" +#contributors: +msgid "Connectivity Graph" +msgstr "连通图" -msgid "" -"Update project information failed. \n" -"\n" -"Details: The layer information defined in project file does no match opened datasource." -msgstr "" -"更新项目信æ¯å¤±è´¥ã€‚\n" -"\n" -"详细信æ¯ï¼šé¡¹ç›®æ–‡ä»¶ä¸­å®šä¹‰çš„图层信æ¯ä¸Žæ‰“开的数æ®æºä¸åŒ¹é…。" +#contributors: +msgid "Connectivity Histogram" +msgstr "连通性直方图" -msgid "GeoJson URL" -msgstr "GeoJson URL" +#contributors: +msgid "Connectivity Map" +msgstr "连通性地图" -msgid "Categories" -msgstr "类别数" +#contributors: +msgid "Connectivity Map - " +msgstr "连通性地图 - " -msgid "Show Selection and Neighbors" -msgstr "显示当å‰é€‰ä¸­çš„åŠå…¶é‚»å±…" +#contributors: +msgid "Contiguity Weight" +msgstr "邻接空间æƒé‡" -msgid "Geometries not saved" -msgstr "矢é‡æ•°æ®æœªä¿å­˜" +#contributors: +msgid "Continue" +msgstr "继续" -msgid "not saved" -msgstr "未ä¿å­˜" +#contributors: +msgid "Convert ASCII to SHP" +msgstr "å°†ASCII转æ¢ä¸º.shpæ ¼å¼çš„矢é‡æ–‡ä»¶" -msgid "Number of Columns" -msgstr "列数" +#contributors: +msgid "Convert Boundary to SHP" +msgstr "转æ¢è¾¹ç•Œåˆ°SHP" -msgid "Select an existing *.gdb directory, or create an New Folder named *.gdb" -msgstr "选择一个现有的*.gdb目录,或者创建一个å称已*.gdb结尾的新文件夹" +#contributors: +msgid "Convert Boundary to Shape Datasource" +msgstr "转æ¢è¾¹ç•Œåˆ°çŸ¢é‡æ•°æ®" -msgid "wrong model number" -msgstr "错误的模型åºå·" +#contributors: +msgid "Cooling Rate:" +msgstr "冷å´é€Ÿåº¦ï¼š" -msgid "Precision threshold" -msgstr "精度阈值" +#contributors: +msgid "Cooling rate for Simulated Annealing algorithm has to be a float number between 0 and 1 (e.g. 0.85)." +msgstr "模拟退ç«ç®—法的冷å´é€ŸçŽ‡å¿…须是0å’Œ1之间的浮点数(例如0.85)。" -msgid "Other Pos" -msgstr "其他正相关" +#contributors: +msgid "Cooling rate:" +msgstr "冷å´é€ŸçŽ‡ï¼š" -msgid "Number of Rows" -msgstr "行数" +#contributors: +msgid "Copy" +msgstr "å¤åˆ¶" -msgid "Map Theme" -msgstr "地图主题" +#contributors: +msgid "Copy Image To Clipboard" +msgstr "å¤åˆ¶å›¾åƒåˆ°å‰ªè´´æ¿" -msgid "GeoDa Update Dialog" -msgstr "GeoDaæ›´æ–°" +#contributors: +msgid "Copy Legend To Clipboard" +msgstr "å¤åˆ¶å›¾ä¾‹åˆ°å‰ªè´´æ¿" -msgid "There is at least one neighborless observation. Check the weights histogram and linked map to see if the islands are real or not. If not, adjust the distance threshold (points) or the precision threshold (polygons)." -msgstr "至少有一个无邻域观测。检查æƒé‡ç›´æ–¹å›¾å’Œé“¾æŽ¥çš„地图, 看看这些孤立值是å¦çœŸå®žã€‚如果没有, 则调整è·ç¦»é˜ˆå€¼ (点) 或精度阈值 (多边形)。" +#contributors: +msgid "Copyright (C) 1998-2011\nGeoDa Center for Geospatial Analysis and Computation\nand Arizona Board of Regents\nAll Rights Reserved" +msgstr "ç‰ˆæƒ (C) 1998-2011\nGeoDa Center for Geospatial Analysis and Computation\nand Arizona Board of Regents\n版æƒæ‰€æœ‰" -msgid "Box Plot" -msgstr "箱线图" +#contributors: +msgid "Copyright (C) 2011-%d by Luc Anselin" +msgstr "版æƒæ‰€æœ‰ (C) 2011-%d Luc Anselin" -msgid "Options" -msgstr "选项" +#contributors: +msgid "Copyright (C) year-year by Luc Anselin" +msgstr "版æƒæ‰€æœ‰ (C) year-year Luc Anselin" -msgid "Point Color" -msgstr "æ•°æ®ç‚¹é¢œè‰²" +#contributors: +msgid "Cores" +msgstr "核心" -msgid "Conditional Scatter Plot" -msgstr "æ¡ä»¶æ•£ç‚¹å›¾" +#contributors: +msgid "Cores and Neighbors" +msgstr "核心和邻居" -msgid "Rename Variable" -msgstr "é‡å‘½åå˜é‡" +#contributors: +msgid "Correlogram" +msgstr "éžå‚空间自相关分æž(Correlogram)" -msgid "Regression Line Color" -msgstr "回归线颜色" +#contributors: +msgid "Correlogram Parameters" +msgstr "éžå‚空间自相关分æž" -msgid "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" -msgstr "MapInfo(*.tabï¼›*.MIFï¼›*.MID)**.tabï¼›*.MIFï¼›*.MID" +#contributors: +msgid "Correlogram Parameters Help" +msgstr "éžå‚空间自相关分æžè®¾ç½®å¸®åŠ©" -msgid "Distance metric" -msgstr "è·ç¦»åº¦é‡" +#contributors: +msgid "Could not create a new variable. Possibly a read-only data source." +msgstr "无法创建新å˜é‡ã€‚æ•°æ®æºå¯èƒ½ä¸ºåªè¯»ã€‚" -msgid "distance metric" -msgstr "è·ç¦»åº¦é‡" +#contributors: +msgid "Could not determine which Field Choice was selected. Please report this error." +msgstr "" -msgid "distance vars" -msgstr "è·ç¦»å˜é‡" +#contributors: +msgid "Could not determine which Time Choice was selected. Please report this error." +msgstr "" -msgid "distance unit" -msgstr "è·ç¦»å•ä½" +#contributors: +msgid "Could not initialize new project." +msgstr "无法åˆå§‹åŒ–一个新的项目。" -msgid "Both are significant, Spatial Lag Model has been selected." -msgstr "两者都是显著的,已选择空间滞åŽæ¨¡åž‹ã€‚" +#contributors: +msgid "Count" +msgstr "计数" -msgid "Please enter Google key(s)." -msgstr "请输入一个或者多个Google API Key。" +#contributors: +msgid "Covariates" +msgstr "åå˜é‡" -msgid "Spatial lag and error regressions require symmetric weights (not KNN). You can still use KNN weights to obtain spatial diagnostics for classic regressions." -msgstr "空间滞åŽå’Œè¯¯å·®å›žå½’需è¦å¯¹ç§°æƒé‡ (ä¸æ˜¯KNN)。您ä»ç„¶å¯ä»¥åœ¨ç»å…¸å›žå½’的空间诊断中使用 KNN æƒé‡ã€‚" +#contributors: +msgid "Create" +msgstr "创建" -msgid "Use specified seed:" -msgstr "使用指定的ç§å­ï¼š" +#contributors: +msgid "Create Custom Breaks" +msgstr "创建自定义分类" -msgid "Please check the selected variables are all valid." -msgstr "请检查所选å˜é‡æ˜¯å¦éƒ½æœ‰æ•ˆã€‚" +#contributors: +msgid "Create Grid" +msgstr "创建格网数æ®" -msgid "OK" -msgstr "确定" +#contributors: +msgid "Create New Custom" +msgstr "创建新的自定义" -msgid "Local G" -msgstr "局部G" +#contributors: +msgid "Create Project File Now?" +msgstr "是å¦åˆ›å»ºé¡¹ç›®æ–‡ä»¶ï¼Ÿ" -msgid "Change Fill Color of Neighbors" -msgstr "改å˜é‚»å±…的填充颜色" +#contributors: +msgid "Create Weights" +msgstr "创建空间æƒé‡" -msgid "Open project file:" -msgstr "打开项目文件:" +#contributors: +msgid "Create a project file?" +msgstr "创建一个项目文件?" -msgid "Low-High" -msgstr "低-高" +#contributors: +msgid "Create new custom categories classification." +msgstr "" -msgid "obs#" -msgstr "obs#" +#contributors: +msgid "Creating Grid" +msgstr "创建网格" -msgid "Univariate" -msgstr "å•å˜é‡" +#contributors: +msgid "Cumulative" +msgstr "累积" -msgid "Create New Custom" -msgstr "创建新的自定义" +#contributors: +msgid "Current OGR dirver " +msgstr "" -msgid "Tabu Length:" -msgstr "ç¦å¿Œæœç´¢ç®—法长度:" +#contributors: +msgid "Current Opacity: %.2f" +msgstr "" -msgid "Zooming Mode" -msgstr "缩放模å¼" +#contributors: +msgid "Current Transparency: %.2f" +msgstr "当å‰é€æ˜Žåº¦: %.2f" -msgid "Group 2:" -msgstr "第2组:" +#contributors: +msgid "Current field name:" +msgstr "当å‰å­—段å:" -msgid "Error: " -msgstr "错误: " +#contributors: +msgid "Current layer has already been associated with selected layer. Please select another layer to associate with." +msgstr "" -msgid "Selected =" -msgstr "选中=" +#contributors: +msgid "Current time:" +msgstr "当å‰æ—¶é—´ï¼š" -msgid "Selection Mode" -msgstr "选择模å¼" +#contributors: +msgid "Curve Color" +msgstr "曲线颜色" -msgid "Change Edge Color" -msgstr "改å˜è¾¹ç¼˜é¢œè‰²" +#contributors: +msgid "Custom" +msgstr "" -msgid "Save Table As CSV File" -msgstr "将表ä¿å­˜ä¸ºCSV文件" +#contributors: +msgid "Custom Breaks" +msgstr "自定义分类" -msgid "Message area" -msgstr "消æ¯åŒº" - -msgid "Show Vertical Axis" -msgstr "显示垂直轴" +#contributors: +msgid "Custom Inference" +msgstr "自定义推断" -msgid "Parameters:" -msgstr "å‚数:" +#contributors: +msgid "Cut" +msgstr "剪切" -msgid "Select All Undefined" -msgstr "选择所有未定义的" +#contributors: +msgid "Cyrillic (ISO-8859-5)" +msgstr "西里尔(ISO-855-5)" -msgid "Output:" -msgstr "输出:" +#contributors: +msgid "Cyrillic (KOI8-R)" +msgstr "西里尔(KII8—R)" -msgid "Save Results: MDS" -msgstr "ä¿æŒç»“æžœ: MDS" +#contributors: +msgid "Cyrillic (Windows-1251)" +msgstr "西里尔(Windows 1251)" -msgid "Vertical Cells" -msgstr "åž‚ç›´å•å…ƒ" +#contributors: +msgid "Cyrillic/Russian (CP866)" +msgstr "西里尔语/俄语(CP866)" -msgid "Set transparency of unhighlighted objects in selection:" -msgstr "在选择中设置未çªå‡ºå¯¹è±¡çš„é€æ˜Žåº¦ï¼š" +#contributors: +msgid "D.F." +msgstr "" -msgid "value" -msgstr "值" +#contributors: +msgid "DBF File Information" +msgstr "DBF文件信æ¯" -msgid "" -"Please specify the p-value to be used in tests; \n" -"default: p-value = 0.01" +#contributors: +msgid "DBF Viewer 0.8 (July 29, 2011)" msgstr "" -"请指定在测试中使用的p值;\n" -"默认值:p值= 0.01" -msgid "Standardized Data" -msgstr "标准化数æ®" +#contributors: +msgid "Data" +msgstr "æ•°æ®" -msgid "Duplicate Thiessen Polygons Found" -msgstr "å°†é‡å¤çš„泰森多边形ä¿å­˜åˆ°è¡¨ä¸­" +#contributors: +msgid "Data Point" +msgstr "æ•°æ®ç‚¹" -msgid "datasource.type %s unknown.." -msgstr "æ•°æ®æºç±»åž‹%s未知.." +#contributors: +msgid "Data Preview - number of preview records:" +msgstr "æ•°æ®é¢„览 - 行数:" -msgid "Chosen field is not a numeric type. Please select a numeric type field." -msgstr "所选字段ä¸æ˜¯æ•°å€¼ç±»åž‹ã€‚ 请选择数字类型字段。" +#contributors: +msgid "Data Source Overview/Help: " +msgstr "支æŒçš„æ•°æ®æ ¼å¼å’Œç›¸å…³å¸®åŠ©: " -msgid "Grid Size" -msgstr "网格大å°" +#contributors: +msgid "Data Type" +msgstr "æ•°æ®ç±»åž‹" -msgid "unknown" -msgstr "未知" +#contributors: +msgid "Data source (%s) doesn't exist. Please check the project configuration file." +msgstr "æ•°æ®æºï¼ˆ%s)ä¸å­˜åœ¨ã€‚请检查项目é…置文件。" -msgid "Cooling rate for Simulated Annealing algorithm has to be a float number between 0 and 1 (e.g. 0.85)." -msgstr "模拟退ç«ç®—法的冷å´é€ŸçŽ‡å¿…须是0å’Œ1之间的浮点数(例如0.85)。" +#contributors: +msgid "Database" +msgstr "æ•°æ®åº“" -msgid "Simulated Annealing" -msgstr "模拟退ç«ç®—法" +#contributors: +msgid "Database Host" +msgstr "æ•°æ®åº“主机" -msgid "Cooling rate:" -msgstr "冷å´é€ŸçŽ‡ï¼š" +#contributors: +msgid "Database Name/Instance" +msgstr "æ•°æ®åº“å称/实例" -msgid "Don't show this dialog again (You can always change this setting using menu: File->Preferences)" -msgstr "ä¸è¦å†æ¬¡æ˜¾ç¤ºæ­¤å¯¹è¯æ¡†ï¼ˆå¯ä»¥ä½¿ç”¨èœå•ï¼šæ–‡ä»¶->首选项æ¥æ›´æ”¹æ­¤è®¾ç½®ï¼‰" +#contributors: +msgid "Database Port" +msgstr "æ•°æ®åº“端å£" -msgid "Cooling Rate:" -msgstr "冷å´é€Ÿåº¦ï¼š" +#contributors: +msgid "Database Type" +msgstr "æ•°æ®åº“类型" -msgid "There was a problem requesting the weights file." -msgstr "请求æƒé‡æ–‡ä»¶æ—¶å‡ºçŽ°é—®é¢˜ã€‚" +#contributors: +msgid "Database port is empty. Please input one." +msgstr "æ•°æ®åº“端å£ä¸ºç©ºã€‚请输入一个。" -msgid "SELECTED" -msgstr "已选中" +#contributors: +msgid "Database/Instance Name" +msgstr "æ•°æ®åº“/实例å" -msgid "current table key" -msgstr "当å‰è¡¨æ ¼é”®å€¼" +#contributors: +msgid "Datasource in project is not valid." +msgstr "项目文件中的数æ®æºæ— æ•ˆã€‚" -msgid "View Original Data" -msgstr "查看原始数æ®" +#contributors: +msgid "Datasource path is empty." +msgstr "æ•°æ®æºè·¯å¾„为空。" -msgid "Refresh" -msgstr "刷新" +#contributors: +msgid "Date/Time" +msgstr "日期/时间" -msgid "5 Iteration" -msgstr "5次迭代" +#contributors: +msgid "Date/Time formats (using comma to separate formats):" +msgstr "日期/时间格å¼ï¼ˆä½¿ç”¨é€—å·åˆ†éš”æ ¼å¼ï¼‰ï¼š" -msgid "" -"Error while opening project:\n" -"\n" -msgstr "打开工程时出错\n" +#contributors: +msgid "December" +msgstr "å二月" -msgid "selected:" -msgstr "已选中:" +#contributors: +msgid "Decimal:" +msgstr "å°æ•°ï¼š" +#contributors: msgid "Decimals (max 15)" msgstr "å°æ•°ä½æ•°ï¼ˆæœ€å¤§15)" -msgid "ID is not specified!" -msgstr "没有指定IDï¼" +#contributors: +msgid "Default displayed decimal places in Table:" +msgstr "" -msgid "binary" -msgstr "二进制" +#contributors: +msgid "Delete" +msgstr "删除" -msgid "Adaptive kernel" -msgstr "自适应核" +#contributors: +msgid "Delete Variable(s)" +msgstr "删除å˜é‡" -msgid "adaptive kernel" -msgstr "自适应核" +#contributors: +msgid "Delta Factor:" +msgstr "Deltaå‚æ•°:" -msgid "Column Name" -msgstr "列å" +#contributors: +msgid "Dendrogram" +msgstr "树状图" -msgid "true" -msgstr "是" +#contributors: +msgid "Dependent Var (y-axis)" +msgstr "å› å˜é‡ï¼ˆy轴)" -msgid "false" -msgstr "å¦" +#contributors: +msgid "Dependent Var Y" +msgstr "å› å˜é‡Y" -msgid "Include diagonal of weights matrix" -msgstr "包括æƒé‡çŸ©é˜µçš„对角线" +#contributors: +msgid "Dependent Variable" +msgstr "å› å˜é‡" -msgid "There is a view could not be closed. Please manually close and try again." -msgstr "有一个视图ä¸èƒ½å…³é—­ã€‚请手动关闭并é‡è¯•ã€‚" +#contributors: +msgid "Descending order" +msgstr "é™åº" -msgid "Please enter iteration number" -msgstr "请输入迭代次数" +#contributors: +msgid "Description" +msgstr "æè¿°" -msgid "Load time definition from project file." -msgstr "从项目文件加载时间定义。" +#contributors: +msgid "Diagonal weights = 1" +msgstr "对角线æƒé‡å€¼ï¼1" -msgid "Reset to default" -msgstr "é‡ç½®ä¸ºé»˜è®¤" +#contributors: +msgid "Diff Values" +msgstr "差异值" -msgid "Z Variable" -msgstr "Zå˜é‡" +#contributors: +msgid "Difference-in-Means Test:" +msgstr "å‡å€¼æ¯”较检验:" -msgid "Variable Settings" -msgstr "å˜é‡è®¾ç½®" +#contributors: +msgid "Differential Local Moran's I" +msgstr "差分局部Moran’s I" -msgid "Save to File" -msgstr "ä¿å­˜åˆ°æ–‡ä»¶" +#contributors: +msgid "Differential Moran Variable Settings" +msgstr "差分Moranå˜é‡è®¾ç½®" -msgid "Layer names" -msgstr "层å称" +#contributors: +msgid "Differential Moran's I" +msgstr "差分Moran’s I" -msgid "499 Permutations" -msgstr "499次置æ¢" +#contributors: +msgid "Differential Moran's I (%s): %s - %s" +msgstr "差分Moran's I (%s):%s - %s" -msgid "Current Transparency: %.2f" -msgstr "当å‰é€æ˜Žåº¦: %.2f" +#contributors: +msgid "Differential Moran's I tests whether the change in a variable over time is spatially correlated.\n\nPlease first group variables by time period: Select Time --> Time Editor." +msgstr "差分Moran’s I 检验å˜é‡éšæ—¶é—´çš„å˜åŒ–是å¦åœ¨ç©ºé—´ä¸Šå­˜åœ¨ç›¸å…³æ€§ã€‚\n\n请首先按时间段对å˜é‡è¿›è¡Œåˆ†ç»„:选择“时间†- >“时间编辑器â€ã€‚" -msgid "Save Spanning Tree" -msgstr "ä¿å­˜ç”Ÿæˆæ ‘" +#contributors: +msgid "Disable auto upgrade:" +msgstr "ç¦ç”¨è‡ªåŠ¨å‡çº§ï¼š" -msgid "Please provide paths for both Project file and Datasource." -msgstr "请æ供项目文件和数æ®æºçš„路径。" +#contributors: +msgid "Disable crash detection for bug report:" +msgstr "ç¦ç”¨æ£€æµ‹ç¨‹åºå´©æºƒå‘é€é”™è¯¯æŠ¥å‘Šï¼š" -msgid "Max value of Y axis" -msgstr "Y轴最大值" +#contributors: +msgid "Display Axes Scale Values" +msgstr "显示轴刻度值" -msgid "Gi cluster map, pseudo p-val" -msgstr "Gièšç±»åœ°å›¾ï¼Œä¼ªp值" +#contributors: +msgid "Display Centroids" +msgstr "显示质心" -msgid "Legend Background Color" -msgstr "图例背景颜色" +#contributors: +msgid "Display Mean Centers" +msgstr "显示平å‡ä¸­å¿ƒ" -msgid "Change Edge Thickness" -msgstr "改å˜è¾¹çš„宽度" +#contributors: +msgid "Display Slope Values" +msgstr "显示斜率值" -msgid "Quantile" -msgstr "分ä½æ•°(Quantile)" +#contributors: +msgid "Display Statistics" +msgstr "显示统计" -msgid "Database port is empty. Please input one." -msgstr "æ•°æ®åº“端å£ä¸ºç©ºã€‚请输入一个。" +#contributors: +msgid "Display Thiessen Polygons" +msgstr "显示泰森多边形" -msgid "Spatial Error" -msgstr "空间误差模型" +#contributors: +msgid "Displayed decimal places" +msgstr "显示å°æ•°ç‚¹ä½æ•°" -msgid "numeric" -msgstr "数值" +#contributors: +msgid "Displayed decimals" +msgstr "显示å°æ•°" -msgid "Please select an Base field." -msgstr "请选择一个基本字段。" +#contributors: +msgid "Displayed decimals places" +msgstr "显示å°æ•°ç‚¹ä½æ•°" -msgid "Clusters" -msgstr "èšç±»" +#contributors: +msgid "Dissolve" +msgstr "空间èžåˆ(Dissolve)" -msgid "Max" -msgstr "最大值" +#contributors: +msgid "Dissolve - " +msgstr "空间èžåˆ(Dissolve) - " -msgid "max" -msgstr "最大值" +#contributors: +msgid "Dissolve does not work with Table only datasource." +msgstr "" -msgid "Animation" -msgstr "动画" +#contributors: +msgid "Dissolve only works on polygon dataset." +msgstr "" -msgid "Percentile Map" -msgstr "百分ä½æ•°(Percentile)地图" +#contributors: +msgid "Distance" +msgstr "è·ç¦»" -msgid "Loop" -msgstr "循环" +#contributors: +msgid "Distance Function:" +msgstr "è·ç¦»å‡½æ•°ï¼š" -msgid "Hierarchical" -msgstr "层次èšç±»(Hierarchical)" +#contributors: +msgid "Distance Weight" +msgstr "基于è·ç¦»ç©ºé—´æƒé‡" -msgid "Saved successfully." -msgstr "ä¿å­˜æˆåŠŸã€‚" +#contributors: +msgid "Distance band" +msgstr "è·ç¦»å¸¦" -msgid "Thousands:" -msgstr "åƒä½æ•°ï¼š" +#contributors: +msgid "Distance function:\t" +msgstr "è·ç¦»å‡½æ•°:\t" -msgid "" -"Failed to open data source. Please check the data/datasource and check if the data type/format is supported by GeoDa.\n" -"\n" -"Tip: you can set up the necessary GeoDa driver by following the instructions at:\n" -" http://geodacenter.github.io/formats.html" -msgstr "" -"无法打开数æ®æºã€‚请检查GeoDa是å¦æ”¯æŒè¯¥æ•°æ®æºçš„类型/æ ¼å¼ã€‚\n" -"\n" -"æ示: 您å¯ä»¥å‚考这个链接æ¥è®¾ç½®ç›¸å…³çš„驱动程åº: http://geodacenter.github.io/formats.html" +#contributors: +msgid "Distance metric: " +msgstr "è·ç¦»åº¦é‡: " -msgid "Calculator" -msgstr "计算器" +#contributors: +msgid "Distance:" +msgstr "è·ç¦»å‡½æ•°:" -msgid "show normal distribution p-val map" -msgstr "显示p值的正æ€åˆ†å¸ƒå›¾" +#contributors: +msgid "Do Means Differ? (ANOVA)" +msgstr "å‡å€¼æ¯”较检验(ANOVA)" -msgid "=" -msgstr "=" +#contributors: +msgid "Do you want to save the results of Diff-in-Diff test?\n\nNote: the results can only be saved into an external data file, due to the change of cross-sectional observations in a space-time context." +msgstr "是å¦ä¿å­˜Diff-in-Diff测试结果?\n\n注æ„: 结果åªèƒ½ä¿å­˜åˆ°å¤–部数æ®æ–‡ä»¶ä¸­, 这是因为当å‰çš„横截é¢è§‚测值在空时上下文中å‘生了å˜åŒ–。" -msgid "Shape" -msgstr "矢é‡æ•°æ®" +#contributors: +msgid "Do you want to save your data?" +msgstr "æ•°æ®éœ€è¦ä¿å­˜ï¼Ÿ" -msgid "File Path" -msgstr "文件路径" +#contributors: +msgid "Don't show Recent/Sample Data panel again" +msgstr "下次ä¸å†æ˜¾ç¤ºæœ€è¿‘访问和示例数æ®" -msgid "LOWESS Smoother" -msgstr "LOWESS平滑器" +#contributors: +msgid "Don't show this dialog again (You can always change this setting using menu: File->Preferences)" +msgstr "ä¸è¦å†æ¬¡æ˜¾ç¤ºæ­¤å¯¹è¯æ¡†ï¼ˆå¯ä»¥ä½¿ç”¨èœå•ï¼šæ–‡ä»¶->首选项æ¥æ›´æ”¹æ­¤è®¾ç½®ï¼‰" -msgid "Histogram Variable" -msgstr "直方图å˜é‡" +#contributors: +msgid "Donate" +msgstr "æèµ " -msgid "Spatial Correlogram" -msgstr "éžå‚空间自相关分æž" +#contributors: +msgid "Down" +msgstr "å‘下移动" -msgid "Automatic Labels" -msgstr "自动标签" +#contributors: +msgid "Download OSM Roads" +msgstr "" -msgid "Disable crash detection for bug report:" -msgstr "ç¦ç”¨æ£€æµ‹ç¨‹åºå´©æºƒå‘é€é”™è¯¯æŠ¥å‘Šï¼š" +#contributors: +msgid "Downloading updates..." +msgstr "正在下载更新…" -msgid "Insert before" -msgstr "添加在选择å˜é‡ä¹‹å‰" +#contributors: +msgid "Duplicate IDs" +msgstr "é‡å¤ID" -msgid "No layer was found in the selected data source." -msgstr "在选定的数æ®æºä¸­æ²¡æœ‰å‘现任何图层/表。" +#contributors: +msgid "Duplicate Thiessen Polygons Found" +msgstr "å°†é‡å¤çš„泰森多边形ä¿å­˜åˆ°è¡¨ä¸­" -msgid "Save Centroids" -msgstr "ä¿å­˜è´¨å¿ƒ" +#contributors: +msgid "Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Please try to export current dataset without duplicates." +msgstr "" -msgid "Unselected" -msgstr "未选中" +#contributors: +msgid "Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Press OK to save duplicate polygon ids to Table." +msgstr "由于存在é‡å¤æˆ–接近é‡å¤çš„点,所生æˆçš„泰森多边形出现é‡å¤çš„。按 \"确定\" å°†é‡å¤çš„泰森多边形 id ä¿å­˜åˆ°è¡¨ä¸­ã€‚" -msgid "Use row-standardized weights" -msgstr "使用行标准化空间æƒé‡" +#contributors: +msgid "Duplicate variable names specified." +msgstr "" -msgid "Statistics" -msgstr "统计" +#contributors: +msgid "E&xplore" +msgstr "探索分æž" -msgid " and two time periods: " -msgstr " 以åŠä¸¤ä¸ªä¸åŒçš„时间段: " +#contributors: +msgid "ESRI File Geodatabase (*.gdb)|*.gdb" +msgstr "" -msgid "There is an error during PCA calculation. Please check if the data is valid." -msgstr "计算PCA过程中出现错误。请检查数æ®æ˜¯å¦æœ‰æ•ˆã€‚" +#contributors: +msgid "ESRI Personal Geodatabase (*.mdb)|*.mdb" +msgstr "ESRI个人地ç†æ•°æ®åº“(*.MDB)**MDB" -msgid "thematic" -msgstr "主题的(thematic)" +#contributors: +msgid "ESRI Shapefile (*.shp)|*.shp" +msgstr "ESRI Shapefile (*.shp)|*.shp" -msgid "" -"The length of field name should be between 1 and %d.\n" -"Current field length (%d) is not valid" -msgstr "" -"字段å的长度应介于1å’Œ%d 之间。\n" -"当å‰å­—段长度 (%d) 无效" +#contributors: +msgid "Edit" +msgstr "编辑" -msgid "Connectivity Graph" -msgstr "连通图" +#contributors: +msgid "Edit Custom Breaks" +msgstr "编辑自定义分类" -msgid "Nokia Satellite" -msgstr "Nokia Satellite" +#contributors: +msgid "Edit LOWESS Parameters" +msgstr "编辑LOWESSå‚æ•°" -msgid "Save Image As" -msgstr "图åƒå¦å­˜ä¸º" +#contributors: +msgid "Edit Title" +msgstr "编辑标题" -msgid "Highlight Color" -msgstr "高亮颜色" +#contributors: +msgid "Edit Variable Properties" +msgstr "编辑å˜é‡å±žæ€§" -msgid "Basemap" -msgstr "底图" +#contributors: +msgid "Emp Bayes Rate Std Moran's I (%s): %s / %s" +msgstr "ç»éªŒè´å¶æ–¯æ¯”率标准化的Moran's I (%s): %s / %s" -msgid "Themeless Map" -msgstr "无主题地图" +#contributors: +msgid "Empirical Bayes" +msgstr "ç»éªŒè´å¶æ–¯" -msgid "Type 1" -msgstr "Type 1" +#contributors: +msgid "Empirical Bayes Rate Standardization Variables" +msgstr "ç»éªŒè´å¶æ–¯æ¯”率标准化å˜é‡" -msgid "" -"Number of columns has to be more than 2. \n" -"At least it includes ID,X-Coord, and Y-Coord!" -msgstr "" -"Number of columns has to be more than 2. \n" -"At least it includes ID,X-Coord, and Y-Coord!" +#contributors: +msgid "Empirical Bayes Smoothed Variable Settings" +msgstr "ç»éªŒè´å¶æ–¯å¹³æ»‘å˜é‡è®¾ç½®" -msgid "Current time:" -msgstr "当å‰æ—¶é—´ï¼š" +#contributors: +msgid "Empirical Spatial Rate Smoothed Variable Settings" +msgstr "ç»éªŒç©ºé—´æ¯”率平滑å˜é‡è®¾ç½®" -msgid "mean" -msgstr "å¹³å‡å€¼" +#contributors: +msgid "Enable High DPI/Retina support (Mac only):" +msgstr "å¯ç”¨é«˜DPI/Retina 支æŒï¼ˆä»…MAC):" -msgid "mean:" -msgstr "å¹³å‡å€¼ï¼š" +#contributors: +msgid "Enable User Defined Value Range of Y-Axis" +msgstr "å¯ç”¨ç”¨æˆ·å®šä¹‰çš„Y轴值范围" -msgid "Variable Properties" -msgstr "å˜é‡å±žæ€§" +#contributors: +msgid "Enable transparency setup of category color in map (Windows only):" +msgstr "" -msgid "Please select a field with addresses." -msgstr "请选择包å«åœ°å€çš„字段。" +#contributors: +msgid "Encode" +msgstr "ç¼–ç " -msgid "Save Dummy" -msgstr "ä¿å­˜è™šå˜é‡" +#contributors: +msgid "Enter a seed value" +msgstr "输入ç§å­å€¼" -msgid "month:" -msgstr "月:" +#contributors: +msgid "Enter a seed value for random number generator:" +msgstr "输入一个用于生æˆéšæœºæ•°çš„ç§å­ï¼š" -msgid "row-standardized" -msgstr "行标准化" +#contributors: +msgid "Enter new ID variable name:" +msgstr "输入新IDå˜é‡å:" -msgid "Selection" -msgstr "选择" +#contributors: +msgid "Equal Intervals" +msgstr "等间隔断点" -msgid "Full Extent" -msgstr "全图" +#contributors: +msgid "Equal Intervals Map" +msgstr "等间隔地图" -msgid "Recent" -msgstr "最近访问" +#contributors: +msgid "Error" +msgstr "错误" -msgid "DBF File Information" -msgstr "DBF文件信æ¯" +#contributors: +msgid "Error while opening project:\n\n" +msgstr "打开工程时出错\n" -msgid "Save Categories" -msgstr "ä¿å­˜åˆ†ç±»" +#contributors: +msgid "Error: " +msgstr "错误: " -msgid "Gi* cluster map, pseudo p-val" -msgstr "Gi*èšç±»åœ°å›¾ï¼Œä¼ªp值" +#contributors: +msgid "Error: Base values contain non-positive numbers which will result in undefined values." +msgstr "错误: 有基值(Base value)为负数, 这将导致计算结果出现未定义的值或空值。" -msgid "KWT files (*.kwt)|*.kwt" -msgstr "KWT文件(*.kwt)|*.kwt" +#contributors: +msgid "Error: Chosen theme requires more cateogries than observations." +msgstr "错误:所选主题需è¦æ›´å¤šæ•°é‡çš„分类。" -msgid "Special" -msgstr "特殊å˜é‡" +#contributors: +msgid "Error: Due to restrictions on the DBF file format, the particular combination of length and decimals entered is not valid. Based on your current choices, we recommend length = %d and decimals = %d" +msgstr "错误: 由于对 DBF 文件格å¼çš„é™åˆ¶, 输入的长度和å°æ•°ç‚¹ä½æ•°çš„特定组åˆæ— æ•ˆã€‚ æ ¹æ®æ‚¨å½“å‰çš„选择, 我们建议长度 =%d å’Œå°æ•°ç‚¹ä½æ•° =%d" -msgid "4th Variable" -msgstr "第四å˜é‡" +#contributors: +msgid "Error: Maximum number of neighbors %d exceeded." +msgstr "错误:超过最大的邻居数é‡%d。" -msgid "Welcome to GeoDa" -msgstr "欢迎使用GeoDa" +#contributors: +msgid "Error: The table variable name is empty." +msgstr "错误:表å˜é‡å称为空。" -msgid "Unknow exception. Please contact GeoDa support." -msgstr "未知异常。请è”ç³»GeoDa获å–帮助。" +#contributors: +msgid "Error: \"%s\" already exists in Table, please specify a different name." +msgstr "错误:表中已ç»å­˜åœ¨â€œ%sâ€ï¼Œè¯·æŒ‡å®šä¸€ä¸ªä¸åŒçš„å称。" -msgid "X Variable" -msgstr "Xå˜é‡" +#contributors: +msgid "Error: \"%s\" is an invalid variable name. The first character must be alphabetic, and the remaining characters can be either alphanumeric or underscores. For DBF table, a valid variable name is between one and ten characters long." +msgstr "错误:“%sâ€æ˜¯æ— æ•ˆçš„å˜é‡å称。第一个字符必须是字æ¯ï¼Œå…¶ä½™å­—符å¯ä»¥æ˜¯å­—æ¯æ•°å­—或下划线。对于DBF表,有效的å˜é‡å称长度介于1到10个字符之间。" -msgid "Check Bug Report on Github" -msgstr "检查github上的bug报告" +#contributors: +msgid "Error: \"%s\" not found." +msgstr "错误: 找ä¸åˆ° \"%s\"。" -msgid "PCA Settings" -msgstr "PCA设置" +#contributors: +msgid "Error: no records found in data source." +msgstr "错误:数æ®æºä¸­æ‰¾ä¸åˆ°è®°å½•ã€‚" -msgid "Invert Select" -msgstr "å选" +#contributors: +msgid "Error: the inverse matrix is ill-conditioned." +msgstr "错误:逆矩阵为病æ€çŸ©é˜µã€‚" -msgid "Input is not valid." -msgstr "输入无效。" +#contributors: +msgid "Estimated Pairs:" +msgstr "估计的对数(Estimated Pairs):" -msgid "Descending order" -msgstr "é™åº" +#contributors: +msgid "Euclidean Distance" +msgstr "欧å¼è·ç¦»" -msgid "GeoPackage (*.gpkg)|*.gpkg" -msgstr "GeoPackage (*.gpkg)|*.gpkg" +#contributors: +msgid "Event Variable" +msgstr "事件å˜é‡" -msgid "Connectivity Histogram" -msgstr "连通性直方图" +#contributors: +msgid "Excess Risk" +msgstr "超é¢é£Žé™©åº¦(Excess Risk)" -msgid "Please enter a sigma value." -msgstr "请输入sigma值。" +#contributors: +msgid "Excess Risk Map Variable Settings" +msgstr "超é¢å±é™©åº¦åœ°å›¾å˜é‡è®¾ç½®" -msgid "" -"Invalid Weights Information:\n" -"\n" -" The selected weights file is not valid.\n" -" Please choose another weights file, or use Tools > Weights > Weights Manager\n" -" to define a valid weights file." -msgstr "" -"无效的空间æƒé‡ä¿¡æ¯ï¼š\n" -"\n" -" 选定的空间æƒé‡æ–‡ä»¶æ— æ•ˆã€‚\n" -" 请选择å¦å¤–一个空间æƒé‡æ–‡ä»¶ï¼Œé€šè¿‡èœå•æ¥å®šä¹‰ä¸€ä¸ªæœ‰æ•ˆçš„æƒé‡æ–‡ä»¶ï¼šå·¥å…·>æƒé‡>æƒé‡ç®¡ç†" +#contributors: +msgid "Exclude" +msgstr "排除" -msgid "First Variable (X/Longitude)" -msgstr "第一个å˜é‡ï¼ˆX/ç»åº¦ï¼‰" +#contributors: +msgid "Existing Variables" +msgstr "现有å˜é‡" -msgid "Low-Low" -msgstr "低-低" +#contributors: +msgid "Exit" +msgstr "退出" -msgid "Local Moran's I Maps" -msgstr "局部Moran’s I 地图" +#contributors: +msgid "Exit with unsaved changes?" +msgstr "未ä¿å­˜æ›´æ”¹ï¼Œç›´æŽ¥é€€å‡ºï¼Ÿ" -msgid "Differential Moran Variable Settings" -msgstr "差分Moranå˜é‡è®¾ç½®" +#contributors: +msgid "Exit?" +msgstr "退出?" -msgid "Bubble Size" -msgstr "气泡大å°" +#contributors: +msgid "Explore" +msgstr "探索分æž" -msgid "%s (Weights: %s)" -msgstr "%s(空间æƒé‡ï¼š %s)" +#contributors: +msgid "Export or save layer to" +msgstr "导出或ä¿å­˜æ•°æ®å±‚到" -msgid "Date/Time formats (using comma to separate formats):" -msgstr "日期/时间格å¼ï¼ˆä½¿ç”¨é€—å·åˆ†éš”æ ¼å¼ï¼‰ï¼š" +#contributors: +msgid "Exporting Shape to Boundary" +msgstr "导出矢é‡æ•°æ®çš„边界" -msgid "Categories \"%s\" is currently in use by another view. Please close or change all views using this custom categories before deleting." -msgstr "分类“%sâ€ç›®å‰è¢«å¦ä¸€çª—å£ä½¿ç”¨ã€‚在删除之å‰ï¼Œè¯·å…³é—­ä½¿ç”¨å½“å‰åˆ†ç±»çš„所有窗å£ã€‚" +#contributors: +msgid "Expression" +msgstr "表达å¼" -msgid "Average" -msgstr "å¹³å‡å€¼" +#contributors: +msgid "Extent" +msgstr "" -msgid "Please select a results field." -msgstr "请选择ä¿å­˜ç»“果的字段。" +#contributors: +msgid "Fail in reading the Boundary file: at polygon-%d" +msgstr "读å–边界文件失败:在多边形-%d" -msgid "Scatter Plot - x: %s, y: %s" -msgstr "散点图 - x: %s, y: %s" +#contributors: +msgid "Failed to create the weights file." +msgstr "创建空间æƒé‡æ–‡ä»¶å¤±è´¥ã€‚" -msgid "Negative" -msgstr "负相关" +#contributors: +msgid "Failed to open data source. Please check the data/datasource and check if the data type/format is supported by GeoDa.\n\nTip: you can set up the necessary GeoDa driver by following the instructions at:\n http://geodacenter.github.io/formats.html" +msgstr "无法打开数æ®æºã€‚请检查GeoDa是å¦æ”¯æŒè¯¥æ•°æ®æºçš„类型/æ ¼å¼ã€‚\n\næ示: 您å¯ä»¥å‚考这个链接æ¥è®¾ç½®ç›¸å…³çš„驱动程åº: http://geodacenter.github.io/formats.html" -msgid "Conditional Local Join Count Map" -msgstr "æ¡ä»¶å±€éƒ¨Join Count地图" +#contributors: +msgid "False Discovery Rate:" +msgstr "伪å‘现率:" -msgid "Save Selected As" -msgstr "ä¿å­˜é€‰ä¸­çš„为" - -msgid "" -"Add a name for your group of variables. \n" -"\n" -"You can edit the time period labels for easier interpretation of results." -msgstr "" -"命å该组å˜é‡ã€‚\n" -"\n" -"您å¯ä»¥ç¼–辑时间标签, 以便更容易地解释结果。" +#contributors: +msgid "February" +msgstr "二月" -msgid "Please input minimum bound value." -msgstr "请输入最å°è¾¹ç•Œå€¼ã€‚" +#contributors: +msgid "Field (%s) already exited." +msgstr "字段 (%s)å·²ç»å­˜åœ¨." -msgid "Target Variable" -msgstr "目标å˜é‡" +#contributors: +msgid "File" +msgstr "文件" -msgid "Inference Settings" -msgstr "推断设置" +#contributors: +msgid "File Path" +msgstr "文件路径" -msgid "Covariates" -msgstr "åå˜é‡" +#contributors: +msgid "File doesn't exist!" +msgstr "文件ä¸å­˜åœ¨ï¼" -msgid "Width in pixels" -msgstr "åƒç´ å®½åº¦" +#contributors: +msgid "File merged into Table successfully." +msgstr "文件已æˆåŠŸåˆå¹¶åˆ°è¡¨ä¸­ã€‚" -msgid "Maps:" -msgstr "地图:" +#contributors: +msgid "Fill Color" +msgstr "填充色" -msgid "Stack" -msgstr "å †å " +#contributors: +msgid "Fill Color for Category" +msgstr "分类填充色" -msgid "Excess Risk Map Variable Settings" -msgstr "超é¢å±é™©åº¦åœ°å›¾å˜é‡è®¾ç½®" +#contributors: +msgid "Fill Opacity for Category" +msgstr "分类填充色é€æ˜Žåº¦" -msgid "Inserting new column %s into Table" -msgstr "将新的列%s加入表中" +#contributors: +msgid "Finished" +msgstr "完æˆ" -msgid "Existing Variables" -msgstr "现有å˜é‡" +#contributors: +msgid "First Variable (X)" +msgstr "第一å˜é‡ï¼ˆX)" -msgid "Show Axes" -msgstr "显示轴" +#contributors: +msgid "First Variable (X/Longitude)" +msgstr "第一个å˜é‡ï¼ˆX/ç»åº¦ï¼‰" -msgid "Use geometric centroids" -msgstr "使用几何质心" +#contributors: +msgid "First line of CSV is variable names?" +msgstr "CSV文件的第一行是字段å?" -msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name. The first character must be a letter, and the remaining characters can be either letters, numbers or underscores. For DBF table, a valid variable name is between one and ten characters long." -msgstr "å˜é‡å \"%s\" é‡å¤æˆ–无效。请é‡æ–°è¾“入一个其他å˜é‡å。第一个字符必须是字æ¯, 其余字符å¯ä»¥æ˜¯å­—æ¯ã€æ•°å­—或下划线。对于 DBF 表, 一个有效的å˜é‡å介于å个字符之间。" +#contributors: +msgid "First row of CSV file" +msgstr "CSV文件的第一行" -msgid "GeoDa does not support creating data of %s. Please try to 'Export' to other supported data source format." -msgstr "GeoDaä¸æ”¯æŒåˆ›å»º%sçš„æ•°æ®ï¼Œè¯·å°è¯•å°†å…¶å¯¼å‡ºä¸ºå…¶ä»–GeoDa支æŒçš„æ•°æ®æ ¼å¼ã€‚" +#contributors: +msgid "Fit-To-Window Mode" +msgstr "窗å£åŒ¹é…模å¼" -msgid "Bonferroni bound:" -msgstr "Bonferroniç•Œé™:" +#contributors: +msgid "Fixed Aspect Ratio Mode" +msgstr "固定长宽比模å¼" -msgid "Contiguity Weight" -msgstr "邻接空间æƒé‡" +#contributors: +msgid "Fixed scale over time" +msgstr "固定比例(ä¸éšæ—¶é—´å˜åŒ–)" -msgid "Your Email address (Optional):" -msgstr "电å­é‚®ä»¶åœ°å€ï¼ˆå¯é€‰ï¼‰ï¼š" +#contributors: +msgid "Fixed x-axis scale over time" +msgstr "固定 x 轴刻度(ä¸éšæ—¶é—´å˜åŒ–)" -msgid "ds:" -msgstr "ds:" +#contributors: +msgid "Fixed y-axis scale over time" +msgstr "固定 y 轴范围ä¸éšæ—¶é—´æ”¹å˜" -msgid "Please restart GeoDa to finish installing updates." -msgstr "请é‡æ–°å¯åŠ¨GeoDa完æˆå®‰è£…更新。" +#contributors: +msgid "Fourth Variable" +msgstr "第四å˜é‡" -msgid "MS Excel (*.xls)|*.xls" -msgstr "MS Excel (*.xls)|*.xls" +#contributors: +msgid "Frequency" +msgstr "频率" -msgid "Method:" -msgstr "方法:" +#contributors: +msgid "Full Extent" +msgstr "全图" -msgid "Save data source progress dialog" -msgstr "ä¿å­˜æ•°æ®è¿›åº¦å¯¹è¯æ¡†" +#contributors: +msgid "GAL files (*.gal)|*.gal" +msgstr "GAL files (*.gal)|*.gal" -msgid "Use the bounding box of shape datasource" -msgstr "使用数æ®çš„边界框(bbox)" +#contributors: +msgid "GWT files (*.gwt)|*.gwt" +msgstr "GWT files (*.gwt)|*.gwt" -msgid "Output Shp file" -msgstr "输出矢é‡æ–‡ä»¶" +#contributors: +msgid "GeoDa Bug Report Dialog" +msgstr "GeoDa错误报告对è¯æ¡†" -msgid "App Key" -msgstr "App Key" +#contributors: +msgid "GeoDa CSV File Configuration" +msgstr "GeoDa CSV文件é…ç½®" -msgid "Y-Coordinates" -msgstr "Yåæ ‡" +#contributors: +msgid "GeoDa Help" +msgstr "GeoDa\n帮助" -msgid "Variables" -msgstr "å˜é‡" +#contributors: +msgid "GeoDa Preference Setup" +msgstr "GeoDaå好设置" -msgid "Unable to overwrite " -msgstr "无法覆盖 " +#contributors: +msgid "GeoDa Project (*.gda)|*.gda" +msgstr "GeoDa项目文件(*.gda)|*.gda" -msgid "Input" -msgstr "输入" +#contributors: +msgid "GeoDa Project File (*.gda)|*.gda" +msgstr "GeoDa Project File (*.gda)|*.gda" -msgid "Coeff. Var. Mat." -msgstr "系数方差矩阵." +#contributors: +msgid "GeoDa Project File to Open" +msgstr "打开GeoDa项目文件" -msgid "Edit Custom Breaks" -msgstr "编辑自定义分类" +#contributors: +msgid "GeoDa Project to Save As" +msgstr "ä¿å­˜GEODA项目文件" -msgid "The number of observations specified in chosen weights file is %d, but the number in the current Table is %d, which is incompatible." -msgstr "在所选æƒé‡æ–‡ä»¶ä¸­æŒ‡å®šçš„观察值的数é‡æ˜¯%d,但当å‰è¡¨ä¸­çš„数字是%d,它ä¸å…¼å®¹ã€‚" +#contributors: +msgid "GeoDa Update Dialog" +msgstr "GeoDaæ›´æ–°" -msgid "Zoom : press right-mouse button" -msgstr "缩放:按鼠标å³é”®" +#contributors: +msgid "GeoDa can not get valid spatial reference from input data source. Please try another data source." +msgstr "" -msgid "Summary" -msgstr "总结报告" +#contributors: +msgid "GeoDa can not open the input data source. Please try another data source." +msgstr "" -msgid "New" -msgstr "新建" +#contributors: +msgid "GeoDa can't change the variable type to DATE/TIME. Please select another type." +msgstr "GeoDa 无法将å˜é‡ç±»åž‹æ›´æ”¹ä¸ºæ—¥æœŸ/时间。请选择其他类型。" -msgid "Weights File Creation" -msgstr "创建空间æƒé‡æ–‡ä»¶" +#contributors: +msgid "GeoDa can't create a layer." +msgstr "" -msgid "Dendrogram" -msgstr "树状图" +#contributors: +msgid "GeoDa can't load dataset with duplicate field names." +msgstr "" -msgid "Use max knn distance as bandwidth" -msgstr "使用最大KNNè·ç¦»ä½œä¸ºå¸¦å®½" +#contributors: +msgid "GeoDa can't read data from datasource. \n\nDetails: Datasource is empty." +msgstr "" -msgid "Second Variable (Y/Latitude)" -msgstr "第二个å˜é‡ (Y/纬度)" +#contributors: +msgid "GeoDa can't save a Table-only data source as a Geometry enabled data source. Please try to add a geometry layer and then use File->Save As." +msgstr "GeoDa无法将表格数æ®æºä¿å­˜ä¸ºçŸ¢é‡æ•°æ®ã€‚请å°è¯•æ·»åŠ ä¸€ä¸ªçŸ¢é‡å›¾å±‚,然åŽä½¿ç”¨ï¼šæ–‡ä»¶ - >å¦å­˜ä¸ºã€‚" -msgid "Conditional Histogram" -msgstr "æ¡ä»¶ç›´æ–¹å›¾" +#contributors: +msgid "GeoDa can't save changes to this datasource. Please try to use File->Export." +msgstr "GeoDa 无法ä¿å­˜å¯¹æ­¤æ•°æ®æ‰€åšçš„更改。请å°è¯•ä½¿ç”¨ï¼šæ–‡ä»¶-> 导出。" -msgid "Number of Clusters:" -msgstr "èšç±»æ•°ï¼š" +#contributors: +msgid "GeoDa cannot find proper projection or geographic coordinate system information to add a basemap. Please update this information (e.g. in .prj file)." +msgstr "GeoDa 找ä¸åˆ°é€‚当的投影或地ç†å标系信æ¯æ¥æ·»åŠ ç±»åº•å›¾ã€‚è¯·æ›´æ–°æ­¤ä¿¡æ¯ (例如, 在. prj 文件中)。" -msgid "Weight" -msgstr "空间æƒé‡" +#contributors: +msgid "GeoDa could not find the required weights file." +msgstr "GeoDa找ä¸åˆ°æ‰€éœ€çš„空间æƒé‡æ–‡ä»¶ã€‚" -msgid "Significance Map" -msgstr "显著性地图" +#contributors: +msgid "GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager." +msgstr "GeoDa找ä¸åˆ°æ‰€éœ€çš„空间æƒé‡æ–‡ä»¶ã€‚请在:工具>æƒé‡ç®¡ç†å™¨ 中指定æƒé‡ã€‚" -msgid "Weighting:" -msgstr "æƒé‡:" +#contributors: +msgid "GeoDa could not load this layer. Please check if the datasource is valid and not table only." +msgstr "" -msgid "High" -msgstr "高" +#contributors: +msgid "GeoDa does not support creating data of %s. Please try to 'Export' to other supported data source format." +msgstr "GeoDaä¸æ”¯æŒåˆ›å»º%sçš„æ•°æ®ï¼Œè¯·å°è¯•å°†å…¶å¯¼å‡ºä¸ºå…¶ä»–GeoDa支æŒçš„æ•°æ®æ ¼å¼ã€‚" -msgid "space-time variable found with no name" -msgstr "找到未命å的时空å˜é‡" +#contributors: +msgid "GeoDa does not support datasource with line data at this time. Please choose a datasource with either point or polygon data." +msgstr "GeoDaç›®å‰ä¸æ”¯æŒçº¿æ•°æ®çš„æ•°æ®æº. 请选择具有点或多边形数æ®çš„æ•°æ®æº." -msgid "Box Map (Hinge=3.0)" -msgstr "箱线地图 (Hinge=3.0)" +#contributors: +msgid "GeoDa has run into a problem and will close." +msgstr "GeoDa 程åºé‡åˆ°äº†é—®é¢˜ï¼Œå°†ä¼šå…³é—­ã€‚" -msgid "Synchronize %s with Time Control" -msgstr "å°†%s与时间控制åŒæ­¥" +#contributors: +msgid "GeoDa maj.min.bld (type), day month year" +msgstr "GeoDa maj.min.bld (type), day month year" -msgid "Specified key (%d) not found in currently loaded Table." -msgstr "在当å‰åŠ è½½çš„表中未找到指定的键(%d)。" +#contributors: +msgid "GeoDa was unable to save the file." +msgstr "GeoDa 无法ä¿å­˜è¯¥æ–‡ä»¶ã€‚" -msgid "" -"Variable name is either a duplicate or is invalid. Please\n" -"enter an alternative, non-duplicate variable name.\n" -"\n" -msgstr "å˜é‡å称是é‡å¤çš„或无效的。请é‡æ–°è¾“入一个新的å˜é‡å。\n" +#contributors: +msgid "GeoJSON (*.geojson;*.json)|*.geojson;*.json" +msgstr "GeoJSON (*.geojson;*.json)|*.geojson;*.json" -msgid "GeoDa Project File to Open" -msgstr "打开GeoDa项目文件" +#contributors: +msgid "GeoJson URL" +msgstr "GeoJson 网å€" -msgid "KMedoids Dialog" -msgstr "KMedoids对è¯æ¡†" +#contributors: +msgid "GeoPackage (*.gpkg)|*.gpkg" +msgstr "GeoPackage (*.gpkg)|*.gpkg" -msgid "This format is not supported." -msgstr "ä¸æ”¯æŒæ­¤æ ¼å¼ã€‚" +#contributors: +msgid "Geography Markup Language (*.gml)|*.gml" +msgstr "Geography Markup Language (*.gml)|*.gml" -msgid "Enter your Google API keys (one key per line)" -msgstr "输入你的Google API密钥(æ¯è¡Œä¸€ä¸ªå¯†é’¥ï¼‰" +#contributors: +msgid "Geometric centroids" +msgstr "几何中心" -msgid "Chosen field is not a numeric type. Please select a numeric type field." -msgstr "选择的字段ä¸æ˜¯æ•°å€¼ç±»åž‹ã€‚请选择一个数值类型的字段。" +#contributors: +msgid "Geometries have been added to existing Table-only data source. Do you want to save them as a new datasource?" +msgstr "已将几何形状添加到当å‰æ•°æ®ã€‚当å‰æ•°æ®ä¸æ”¯æŒçŸ¢é‡æ ¼å¼ï¼Œæ˜¯å¦å¦å­˜ä¸ºä¸€ä¸ªæ–°çš„æ•°æ®æºï¼Ÿ" -msgid "MDS Plot" -msgstr "多维尺度å˜æ¢å›¾ MDS" +#contributors: +msgid "Geometries not saved" +msgstr "矢é‡æ•°æ®æœªä¿å­˜" -msgid "Averages Chart" -msgstr "å¹³å‡å€¼æ¯”较图" +#contributors: +msgid "Get a free Carto account: " +msgstr "获得å…è´¹Carto账户: " -msgid "(Field name is not valid)" -msgstr "(字段å无效)" +#contributors: +msgid "Get a free GeoDa-Web account: " +msgstr "获得å…费的GeoDa-Webå¸æˆ·: " -msgid "Aggregate" -msgstr "èšåˆ" +#contributors: +msgid "Get a free Nokia/HERE account: " +msgstr "获得å…费诺基亚/HERE地图å¸æˆ·ï¼š " -msgid "" -"\n" -"\n" -"Warning: Geometries will not be saved. Please use \"File->Save As\" to save geometries and related data." -msgstr "" -"\n" -"\n" -"警告: 矢é‡å½¢çŠ¶ä¸ä¼šè¢«ä¿å­˜ã€‚请使用 èœå•â€æ–‡ä»¶-ä¿å­˜ä¸º\" ä¿å­˜çŸ¢é‡æ•°æ®ã€‚" +#contributors: +msgid "Getis-Ord" +msgstr "Getis-Ord" -msgid "Move Up" -msgstr "å‘上移动" +#contributors: +msgid "Gi cluster map, pseudo p-val" +msgstr "Gièšç±»åœ°å›¾ï¼Œä¼ªp值" -msgid "Up" -msgstr "å‘上移动" +#contributors: +msgid "Gi* cluster map, pseudo p-val" +msgstr "Gi*èšç±»åœ°å›¾ï¼Œä¼ªp值" -msgid "Down" -msgstr "å‘下移动" +#contributors: +msgid "Greedy" +msgstr "贪心算法(Greedy)" -msgid "Please specify a valid data source name." -msgstr "请指定一个有效的数æ®æºå称。" +#contributors: +msgid "Greek (ISO-8859-7)" +msgstr "希腊语(ISO-8859-7)" -msgid "(Optional) First record has field names? " -msgstr "(å¯é€‰)第一行记录是å¦ä¸ºå­—段å? " +#contributors: +msgid "Grid Bounding Box" +msgstr "网格边界" -msgid "Breaks" -msgstr "断点" +#contributors: +msgid "Grid Size" +msgstr "网格大å°" -msgid "Please specify weights in Tools > Weights Manager." -msgstr "请在èœå•ï¼šå·¥å…·>æƒé‡ç®¡ç†å™¨ 中指定空间æƒé‡ã€‚" +#contributors: +msgid "Grid file was successfully created." +msgstr "网格文件æˆåŠŸåˆ›å»ºã€‚" -msgid "Percentile" -msgstr "百分ä½æ•°(Percentile)" +#contributors: +msgid "Group" +msgstr "分组" -msgid "var name:" -msgstr "å˜é‡å:" +#contributors: +msgid "Group 1:" +msgstr "第1组:" -msgid "Difference-in-Means Test:" -msgstr "å‡å€¼æ¯”较检验:" +#contributors: +msgid "Group 2:" +msgstr "第2组:" -msgid "" -"The existing GeoDa instance may be too busy to respond.\n" -"Please close any open dialogs and try again." +#contributors: +msgid "Group Variable:" msgstr "" -"GeoDa实例å¯èƒ½å¤ªå¿™è€Œæ— æ³•å›žåº”。\n" -"请关闭任何打开的对è¯æ¡†å¹¶é‡è¯•ã€‚" -msgid "Add Mean Centers to Table" -msgstr "将平å‡ä¸­å¿ƒæ·»åŠ åˆ°è¡¨ä¸­(Mean Centers)" +#contributors: +msgid "Grouped Variables" +msgstr "分组的å˜é‡" -msgid "No rates currently calculated to save." -msgstr "当å‰ä¿å­˜å½“å‰æ¯”率å˜é‡ã€‚" +#contributors: +msgid "Groups:" +msgstr "分组:" -msgid "Undefined" -msgstr "未定义/空值" +#contributors: +msgid "HDBScan" +msgstr "" -msgid "Close" -msgstr "关闭" +#contributors: +msgid "HDBScan Cluster Map (%d clusters)" +msgstr "HDBScan èšç±»åœ°å›¾ (%d èšç±»)" -msgid "Classic " -msgstr "ç»å…¸çº¿æ€§å›žå½’模型 " +#contributors: +msgid "HDBScan Clustering Settings" +msgstr "HDBScan èšç±»è®¾ç½®" -msgid "Conditional LISA Map Variables" -msgstr "æ¡ä»¶LISA地图å˜é‡" +#contributors: +msgid "HERE App ID" +msgstr "HERE 应用 ID" -msgid "Change Categories Title" -msgstr "更改分类的标题" +#contributors: +msgid "HERE App Key" +msgstr "HERE 应用密钥" -msgid "Select fields:" -msgstr "选择字段:" +#contributors: +msgid "Has Colocation" +msgstr "存在Colocation" -msgid "About DBF Viewer" -msgstr "关于DBF查看器" +#contributors: +msgid "Hebrew (ISO-8859-8-1)" +msgstr "希伯æ¥è¯­ï¼ˆISO-8598-1)" -msgid "Chinese Traditional (Big5)" -msgstr "ç¹ä½“中文(BIG5)" +#contributors: +msgid "Hebrew (Windows-1255)" +msgstr "希伯æ¥è¯­ï¼ˆWindows-1255)" -msgid "Outlines Visible" -msgstr "轮廓线å¯è§†" +#contributors: +msgid "Height:" +msgstr "高度:" -msgid "3D Plot" -msgstr "3D图" +#contributors: +msgid "Help" +msgstr "帮助" -msgid "Create a project file?" -msgstr "创建一个项目文件?" +#contributors: +msgid "Hide Map" +msgstr "éšè—地图" -msgid "Display" -msgstr "显示" +#contributors: +msgid "Hide system table in Postgresql connection:" +msgstr "在PostgreSQL连接中éšè—系统表:" -msgid "Univariate Moran's I" -msgstr "å•å˜é‡Moran’s I" +#contributors: +msgid "Hide system table in SQLITE connection:" +msgstr "在SQLite连接中éšè—系统表:" -msgid "Basemap Configuration Dialog" -msgstr "底图é…置对è¯æ¡†" +#contributors: +msgid "Hierachical Map does not work with Table only datasource." +msgstr "表格数æ®æ— æ³•åˆ›å»ºå±‚次分类地图" -msgid "Date/Time" -msgstr "日期/时间" +#contributors: +msgid "Hierachical Map: " +msgstr "层次分类地图:" -msgid "Affinity with Kernel:" -msgstr "基于核函数的相似矩阵:" +#contributors: +msgid "Hierarchical" +msgstr "层次èšç±»(Hierarchical)" -msgid "Has Colocation" -msgstr "存在Colocation" +#contributors: +msgid "Hierarchical Clustering Settings" +msgstr "层次èšç±»è®¾ç½®" -msgid "The currently entered threshold value is not a valid number. Please move the slider, or enter a valid number." -msgstr "当å‰è¾“入的阈值ä¸æ˜¯æœ‰æ•ˆçš„数字。请移动滑å—,或输入一个有效的数值。" +#contributors: +msgid "Hierarchical Map" +msgstr "层次分类地图" -msgid "1 Iteration" -msgstr "1次迭代" +#contributors: +msgid "High" +msgstr "高" -msgid "done" -msgstr "完æˆ" +#contributors: +msgid "High-High" +msgstr "高-高" -msgid "Display Statistics" -msgstr "显示统计" +#contributors: +msgid "High-Low" +msgstr "高-低" -msgid "Change Seed" -msgstr "改å˜éšæœºæ•°çš„ç§å­" +#contributors: +msgid "Highlight Color" +msgstr "高亮颜色" -msgid "" -"Limited date/time type recognition can be done for Date (YYYY-MM-DD), Time (HH:MM:SS+nn) and DateTime (YYYY-MM-DD HH:MM:SS+nn) in configuration.\n" -"\n" -"Please try to load customized date/time type as string and covert it using Table->Edit Variable Property" -msgstr "" -"å¯è¯†åˆ«çš„日期/时间类型仅é™äºŽæ—¥æœŸï¼ˆYYYY-MM-DD),时间(HH:MM:SS + nn)和日期时间(YYYY-MM-DD HH:MM:SS + nn),\n" -"\n" -"如有自定义的日期/时间类型, 请在å好设置中设置,然åŽä½¿ç”¨èœå• “表格 ->编辑å˜é‡å±žæ€§â€ 进行日期转æ¢" +#contributors: +msgid "Hinge" +msgstr "Hinge" -msgid "Copyright (C) year-year by Luc Anselin" -msgstr "Copyright (C) year-year by Luc Anselin" +#contributors: +msgid "Hinge=1.5" +msgstr "Hinge=1.5" -msgid "Strong" -msgstr "ç²—" +#contributors: +msgid "Hinge=3.0" +msgstr "Hinge=3.0" -msgid "There is at least one view open that depends on this matrix. Ok to close these views and remove?" -msgstr "至少有一个打开的窗å£ä½¿ç”¨äº†è¯¥çŸ©é˜µã€‚确定关闭这些窗å£å¹¶åˆ é™¤è¯¥çŸ©é˜µï¼Ÿ" +#contributors: +msgid "Histogram" +msgstr "直方图" -msgid "Show Graph" -msgstr "显示图" +#contributors: +msgid "Histogram Classification" +msgstr "直方图" -msgid "Overwrite?" -msgstr "覆盖?" +#contributors: +msgid "Histogram Variable" +msgstr "直方图å˜é‡" -msgid "Add OGR column error. Field type is unknown or not supported." -msgstr "添加 OGR 列错误。字段类型未知或ä¸å—支æŒã€‚" +#contributors: +msgid "Histogram: " +msgstr "直方图: " -msgid "Distance" -msgstr "è·ç¦»" +#contributors: +msgid "Horizontal Bins Breaks" +msgstr "ç«–ç›´æ–¹å‘区间(Bins)断点" -msgid "ESRI Shapefile (*.shp)|*.shp" -msgstr "ESRI Shapefile (*.shp)|*.shp" +#contributors: +msgid "Horizontal Cells" +msgstr "æ°´å¹³å•å…ƒ" -msgid "New variable name" -msgstr "æ–°çš„å˜é‡å" +#contributors: +msgid "Http connection timeout (seconds) for e.g. WFS, Geojson etc.:" +msgstr "Http连接超时(秒),例如WFSã€Geojson等:" -msgid "Save to Table" -msgstr "ä¿å­˜åˆ°è¡¨" +#contributors: +msgid "ID is not specified!" +msgstr "没有指定IDï¼" -msgid "Reverse" -msgstr "åå‘" +#contributors: +msgid "Image Dimension Settings" +msgstr "图åƒå¤§å°è®¾ç½®" -msgid "99 Permutations" -msgstr "99次置æ¢" +#contributors: +msgid "Improve Cartogram" +msgstr "加强形å˜åœ°å›¾" -msgid "" -"The sample size for random sampling is too small.\n" -"Please increase the number of iterations." -msgstr "éšæœºæŠ½æ ·çš„样本数太å°ã€‚请增加迭代次数。" +#contributors: +msgid "Include" +msgstr "包å«" -msgid "Select All" -msgstr "全选" +#contributors: +msgid "Include Variable Names" +msgstr "包å«å˜é‡å" -msgid "Warning" -msgstr "警告" +#contributors: +msgid "Include diagonal of weights matrix" +msgstr "包括æƒé‡çŸ©é˜µçš„对角线" -msgid " LISA Cluster Map" -msgstr " LISAèšç±»åœ°å›¾" +#contributors: +msgid "Include lower orders" +msgstr "是å¦åŒ…å«ä½Žé˜¶çš„邻居" -msgid "Create Weights" -msgstr "创建空间æƒé‡" +#contributors: +msgid "Incomplete Group Variable" +msgstr "创建时间(分组)å˜é‡æœªå®Œæˆ" -msgid "Add Centroids to Table" -msgstr "将质心添加到表中(Centroids)" +#contributors: +msgid "Independent Var (x-axis)" +msgstr "自å˜é‡ï¼ˆx轴)" -msgid "Open Document Spreadsheet (*.ods)|*.ods" -msgstr "Open Document Spreadsheet (*.ods)|*.ods" +#contributors: +msgid "Independent Var X" +msgstr "自å˜é‡X" -msgid "The set of values in the import key fields has no match in current table. Please choose keys with matching sets of values." -msgstr "导入的键字段的值集在当å‰è¡¨ä¸­æ²¡æœ‰åŒ¹é…项。请选择具有匹é…值的字段。" +#contributors: +msgid "Inference Settings" +msgstr "推断设置" -msgid "" -"The GeoDa project file cannot find one or more associated data sources.\n" -"\n" -"Details: GeoDa is looking for: %s\n" -"\n" -"Tip: You can open the .gda project file in a text editor to modify the path(s) of the data source associated with your project." -msgstr "" -"GeoDa项目文件ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæˆ–多个相关数æ®æºã€‚\n" -"详情:GeoDa找ä¸åˆ°æ•°æ®ï¼š%s\n" -"\n" -"æ示:您å¯ä»¥åœ¨æ–‡æœ¬ç¼–辑器中打开.gda项目文件,以修改与您的项目关è”çš„æ•°æ®æºçš„路径。" +#contributors: +msgid "Inference Settings (%d perm)" +msgstr "推断设置(%d ç½®æ¢ï¼‰" -msgid "Differential Moran's I (%s): %s - %s" -msgstr "差分Moran's I (%s):%s - %s" +#contributors: +msgid "Info" +msgstr "ä¿¡æ¯" -msgid "Select variables to delete " -msgstr "选择需è¦åˆ é™¤çš„å˜é‡å " +#contributors: +msgid "Information" +msgstr "ä¿¡æ¯" -msgid "Incomplete Group Variable" -msgstr "创建时间(分组)å˜é‡æœªå®Œæˆ" +#contributors: +msgid "Initial Groups:" +msgstr "åˆå§‹ç»„:" -msgid "The selected group variable should contains %d items. Please modify the group variable in Time->Time Editor, or select another variable." -msgstr "所选的时间(分组)å˜é‡åº”该有%d项。请通过 时间->时间编辑器 æ¥ä¿®æ”¹è¯¥æ—¶é—´(分组)å˜é‡ï¼Œæˆ–指定其他的时间(分组)å˜é‡ã€‚" +#contributors: +msgid "Initial groups:\t" +msgstr "åˆå§‹ç»„:\t" -msgid "Empirical Bayes Rate Standardization Variables" -msgstr "ç»éªŒè´å¶æ–¯æ¯”率标准化å˜é‡" +#contributors: +msgid "Initialization Method:" +msgstr "åˆå§‹åŒ–方法:" -msgid "No numeric variables found in table." -msgstr "表中没有找到任何数值å˜é‡ã€‚" +#contributors: +msgid "Initialization Re-runs:" +msgstr "åˆå§‹åŒ–è¿è¡Œæ¬¡æ•°ï¼š" -msgid "No numeric variables found." -msgstr "没有找到任何数值å˜é‡ã€‚" +#contributors: +msgid "Initialization method:\t" +msgstr "åˆå§‹åŒ–方法:\t" -msgid "Save Space-Time Table/Weights" -msgstr "ä¿å­˜æ—¶ç©ºå˜é‡å’Œç©ºé—´æƒé‡" +#contributors: +msgid "Initialization re-runs:\t" +msgstr "åˆå§‹åŒ–é‡å¤è¿è¡Œæ¬¡æ•°:\t" -msgid "Update GeoDa completed" -msgstr "æ›´æ–°GeoDa完æˆ" +#contributors: +msgid "Input" +msgstr "输入" -msgid "Displayed decimals places" -msgstr "显示å°æ•°ç‚¹ä½æ•°" +#contributors: +msgid "Input ASCII file" +msgstr "输入ASCII文件" -msgid "Voronoi Contiguity Error" -msgstr "泰森多边形有邻接性错误" +#contributors: +msgid "Input data source" +msgstr "输入数æ®æº" -msgid "Map" -msgstr "地图" +#contributors: +msgid "Input datasource" +msgstr "输入数æ®æº" -msgid "Set transparency of highlighted objects in selection:" -msgstr "设置高亮对象的é€æ˜Žåº¦ï¼š" +#contributors: +msgid "Input file " +msgstr "选择文件 " -msgid "weights:" -msgstr "空间æƒé‡ï¼š" +#contributors: +msgid "Input file (text file)" +msgstr "输入文件(文本文件)" -msgid "Regression Output Text File" -msgstr "回归输出文本文件" +#contributors: +msgid "Input is duplicated." +msgstr "输入é‡å¤ã€‚" -msgid "Adjust Values of Y Axis" -msgstr "调整Y轴值" +#contributors: +msgid "Input is not valid." +msgstr "输入无效。" -msgid "Show LOWESS Smoother" -msgstr "显示LOWESS平滑器" +#contributors: +msgid "Input is required" +msgstr "输入是必需的" -msgid "3D Scatter Plot" -msgstr "三维散点图" +#contributors: +msgid "Input significance:" +msgstr "输入显著性值:" -msgid "Weights:" -msgstr "空间æƒé‡ï¼š" +#contributors: +msgid "Input:" +msgstr "输入:" -msgid "Data Preview - number of preview records:" -msgstr "æ•°æ®é¢„览 - 行数:" +#contributors: +msgid "Insert before" +msgstr "添加在选择å˜é‡ä¹‹å‰" -msgid "GWT files (*.gwt)|*.gwt" -msgstr "GWT files (*.gwt)|*.gwt" +#contributors: +msgid "Insufficient Random Sampling" +msgstr "éšæœºæŠ½æ ·ä¸è¶³" -msgid "Invalid Variable" -msgstr "无效å˜é‡" +#contributors: +msgid "Internal Error: Add new field (%s) failed.\n\nDetails:%s" +msgstr "" -msgid "GeoJSON (*.geojson;*.json)|*.geojson;*.json" -msgstr "GeoJSON (*.geojson;*.json)|*.geojson;*.json" +#contributors: +msgid "Internal Error: Delete field failed.\n\nDetails:" +msgstr "" -msgid "Disable auto upgrade:" -msgstr "ç¦ç”¨è‡ªåŠ¨å‡çº§ï¼š" +#contributors: +msgid "Internal Error: can't update an in-memory cell." +msgstr "内部错误: 无法更新内存å•å…ƒã€‚" -msgid "Don't show Recent/Sample Data panel again" -msgstr "下次ä¸å†æ˜¾ç¤ºæœ€è¿‘访问和示例数æ®" +#contributors: +msgid "Intervals" +msgstr "é—´éš”" -msgid "Empirical Spatial Rate Smoothed Variable Settings" -msgstr "ç»éªŒç©ºé—´æ¯”率平滑å˜é‡è®¾ç½®" - -msgid "Status Bar" -msgstr "状æ€æ " +#contributors: +msgid "Intervals in the Histogram" +msgstr "直方图的分组数é‡" -msgid "There was a problem reading the layer" -msgstr "读å–图层时出现问题" +#contributors: +msgid "Invalid Variable" +msgstr "无效å˜é‡" -msgid "No Basemap" -msgstr "无底图" +#contributors: +msgid "Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager to define a valid weights file." +msgstr "" -msgid "Local Geary Maps" -msgstr "局部Geary图" +#contributors: +msgid "Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file." +msgstr "无效的空间æƒé‡ä¿¡æ¯ï¼š\n\n 选定的空间æƒé‡æ–‡ä»¶æ— æ•ˆã€‚\n 请选择å¦å¤–一个空间æƒé‡æ–‡ä»¶ï¼Œé€šè¿‡èœå•æ¥å®šä¹‰ä¸€ä¸ªæœ‰æ•ˆçš„æƒé‡æ–‡ä»¶ï¼šå·¥å…·>æƒé‡>æƒé‡ç®¡ç†" -msgid "Save Duplicate Thiessen Polygon Ids" -msgstr "ä¿å­˜é‡å¤çš„泰森多边形ID" +#contributors: +msgid "Invalid layer association has been detected, which will cause infinite highlighting loop. Please try to reset highlight association between layers." +msgstr "" -msgid "(Optional) Longitude/X:" -msgstr "(å¯é€‰ï¼‰ç»åº¦/X:" +#contributors: +msgid "Invert Select" +msgstr "å选" -msgid "Spatial Empirical Bayes" -msgstr "空间ç»éªŒè´å¶æ–¯" +#contributors: +msgid "Invert Selection" +msgstr "å选" -msgid " LISA Significance Map" -msgstr " LISA显著性地图" +#contributors: +msgid "It looks like GeoDa has been terminated abnormally. \nDo you want to send a crash report to GeoDa team? \n\n(Optional) Please leave your email address,\nso we can send a follow-up email once we have a fix." +msgstr "" -msgid "Internal Error: can't update an in-memory cell." -msgstr "内部错误: 无法更新内存å•å…ƒã€‚" +#contributors: +msgid "Iterations:" +msgstr "迭代次数 :" -msgid "Details: " -msgstr "详细信æ¯: " +#contributors: +msgid "January" +msgstr "一月" -msgid "Enable High DPI/Retina support (Mac only):" -msgstr "å¯ç”¨é«˜DPI/Retina 支æŒï¼ˆä»…MAC):" +#contributors: +msgid "Japanese (EUC-JP)" +msgstr "日语(EUC-JP)" -msgid "There was a problem generating voronoi contiguity neighbors. Please report this." -msgstr "生æˆVoronoi空间æƒé‡æ—¶å‡ºçŽ°é—®é¢˜ã€‚请报告该错误。" +#contributors: +msgid "Japanese (Shift&JIS)" +msgstr "日语(Shift&JIS)" -msgid "Please input a field name for saving latitude" -msgstr "请输入一个用于ä¿å­˜çº¬åº¦çš„字段å" +#contributors: +msgid "Japanese (Shift_JIS)" +msgstr "日语(Shift_JIS)" -msgid "Assign Values to Currently Selected / Unselected" -msgstr "赋值到当å‰é€‰ä¸­çš„(或未选中)的对象" +#contributors: +msgid "Join Operation:" +msgstr "åˆå¹¶æ“作:" -msgid "New From Recent" -msgstr "打开最近访问" +#contributors: +msgid "Join Variable:" +msgstr "åˆå¹¶å˜é‡:" -msgid "Success" -msgstr "æˆåŠŸ" +#contributors: +msgid "July" +msgstr "七月" -msgid "Only OGR datasource can be saved as." -msgstr "åªæœ‰OGRæ•°æ®æºå¯ä»¥å¦å­˜." +#contributors: +msgid "June" +msgstr "六月" -msgid "Input ASCII file" -msgstr "输入ASCII文件" +#contributors: +msgid "K Means" +msgstr "Kå‡å€¼èšç±»" -msgid "Fixed x-axis scale over time" -msgstr "固定 x 轴刻度(ä¸éšæ—¶é—´å˜åŒ–)" +#contributors: +msgid "K Medians" +msgstr "K中ä½æ•°èšç±»" -msgid "Cluster Map " -msgstr "èšç±»åœ°å›¾ " +#contributors: +msgid "K Medoids" +msgstr "K中心èšç±»" -msgid "Moran's I with EB Rate" -msgstr "基于ç»éªŒè´å¶æ–¯æ¯”率的Moran’s I" +#contributors: +msgid "K-Nearest neighbors" +msgstr "K-è¿‘é‚»" -msgid "Scale Options" -msgstr "缩放选项" +#contributors: +msgid "KMeans Clustering Settings" +msgstr "Kå‡å€¼èšç±»è®¾ç½®" -msgid "Number of Box Plots" -msgstr "箱线图个数" +#contributors: +msgid "KMedians Clustering Settings" +msgstr "K中值èšç±»è®¾ç½®" -msgid "Change Font" -msgstr "更改字体" +#contributors: +msgid "KMedoids Clustering Settings" +msgstr "K中心èšç±»è®¾ç½®" -msgid "The length of an non-integral numeric field must be at least %d and at most %d. Keeping original value." -msgstr "éžæ•´æ•°æ•°å€¼å­—段的长度必须至少为%d, 最多为%d。" +#contributors: +msgid "KWT files (*.kwt)|*.kwt" +msgstr "KWT文件(*.kwt)|*.kwt" -msgid "Use Specified Seed" -msgstr "使用指定的éšæœºæ•°ç§å­" +#contributors: +msgid "Kernel function" +msgstr "核函数" -msgid "K-Nearest neighbors" -msgstr "K-è¿‘é‚»" +#contributors: +msgid "Key" +msgstr "é”®" -msgid "Title of Visualization" -msgstr "å¯è§†åŒ–标题" +#contributors: +msgid "Keyhole Markup Language (*.kml)|*.kml" +msgstr "Keyhold标记语言(*.kml)|*.kml" -msgid "Please select at least 2 variables." -msgstr "请选择至少2个å˜é‡ã€‚" +#contributors: +msgid "Korean (EUC-KR)" +msgstr "韩语(EUC-KR)" -msgid "Error: Wrong format." -msgstr "错误: æ ¼å¼é”™è¯¯ã€‚" +#contributors: +msgid "LISA" +msgstr "" -msgid "PCA" -msgstr "主æˆåˆ†åˆ†æž" +#contributors: +msgid "LOWESS Smoother" +msgstr "LOWESS平滑器" -msgid "(Gaussian) Sigma:" -msgstr "(Gaussian) Sigma:" +#contributors: +msgid "LOWESS Smoother Help" +msgstr "LOWESS 平滑器帮助" -msgid "Save is not supported on current data source type: %s. Please try to use \"File->Save As\" other data source. However, the project file can still be saved as other project file." -msgstr "ä¸æ”¯æŒä¿å­˜å½“å‰æ•°æ®æºç±»åž‹ï¼š%s 。请å°è¯•ä½¿ç”¨â€œæ–‡ä»¶ - >å¦å­˜ä¸ºâ€å…¶ä»–æ•°æ®æºã€‚ 但是,项目文件ä»ç„¶å¯ä»¥ä¿å­˜ä¸ºå…¶ä»–项目文件。" +#contributors: +msgid "LOWESS Smoother Parameters" +msgstr "LOWESS平滑å‚æ•°" -msgid "Merge - " -msgstr "åˆå¹¶ - " +#contributors: +msgid "Language" +msgstr "语言" -msgid "Convert Boundary to SHP" -msgstr "转æ¢è¾¹ç•Œåˆ°SHP" +#contributors: +msgid "Language:" +msgstr "语言:" -msgid "Positive" -msgstr "正相关" +#contributors: +msgid "Latitude/Y:" +msgstr "纬度/Y:" -msgid "Categories title \"%s\" already exists. Please choose a different title." -msgstr "分类标题â€%sâ€å·²ç»å­˜åœ¨ã€‚请选择å¦ä¸€ä¸ªæ ‡é¢˜ã€‚" +#contributors: +msgid "Layer names" +msgstr "层å称" -msgid "Moran Scatter Plot" -msgstr "Moran散点图" +#contributors: +msgid "Left" +msgstr "" -msgid "Queen contiguity" -msgstr "Queen邻接" +#contributors: +msgid "Legend Background Color" +msgstr "图例背景颜色" -msgid "Please first select observations in one of the other data or map views." -msgstr "请首先在其他窗å£é€‰å–观察对象。" +#contributors: +msgid "Length (max 254)" +msgstr "长度(最长 254)" -msgid "Hinge" -msgstr "Hinge" +#contributors: +msgid "Light" +msgstr "细" -msgid "Save Duplicate Thiessen Polygons to Table" -msgstr "å°†é‡å¤çš„泰森多边形ä¿å­˜åˆ°è¡¨ä¸­" +#contributors: +msgid "Limited date/time type recognition can be done for Date (YYYY-MM-DD), Time (HH:MM:SS+nn) and DateTime (YYYY-MM-DD HH:MM:SS+nn) in configuration.\n\nPlease try to load customized date/time type as string and covert it using Table->Edit Variable Property" +msgstr "å¯è¯†åˆ«çš„日期/时间类型仅é™äºŽæ—¥æœŸï¼ˆYYYY-MM-DD),时间(HH:MM:SS + nn)和日期时间(YYYY-MM-DD HH:MM:SS + nn),\n\n如有自定义的日期/时间类型, 请在å好设置中设置,然åŽä½¿ç”¨èœå• “表格 ->编辑å˜é‡å±žæ€§â€ 进行日期转æ¢" -msgid "OLS Model has been selected." -msgstr "选择OLS模型。" +#contributors: +msgid "Line" +msgstr "线段" -msgid "Emp Bayes Rate Std Moran's I (%s): %s / %s" -msgstr "ç»éªŒè´å¶æ–¯æ¯”率标准化的Moran's I (%s): %s / %s" +#contributors: +msgid "Linear Smoother" +msgstr "线性平滑器" -msgid "Method" -msgstr "方法" +#contributors: +msgid "List of existing ungrouped variables. To group variables by time, move them to the list on the right.\n\nFor example, to group Pop80 and Pop90, select them on the left and move them to the right." +msgstr "未分组å˜é‡åˆ—表。 如è¦åˆ›å»ºæ—¶é—´ï¼ˆåˆ†ç»„)å˜é‡ï¼Œè¯·å°†å®ƒä»¬ç§»åˆ°å³ä¾§çš„列表中。\n\n例如,è¦å°†Pop80å’ŒPop90组åˆåˆ›å»ºä¸€ä¸ªæ—¶é—´å˜é‡ï¼Œè¯·åœ¨å·¦ä¾§é€‰æ‹©å®ƒä»¬å¹¶å°†å®ƒä»¬ç§»åˆ°å³ä¾§ã€‚" -msgid "Name" -msgstr "å称" +#contributors: +msgid "Load" +msgstr "打开" -msgid "Natural Breaks" -msgstr "自然间断点" +#contributors: +msgid "Load CRS from a data source" +msgstr "从数æ®ä¸­è¯»å–CRS" -msgid "sequential" -msgstr "顺åºçš„" +#contributors: +msgid "Load Layer Failed." +msgstr "加载层失败。" -msgid "Affinity with K-NN:" -msgstr "基于K-NN的相似性矩阵:" +#contributors: +msgid "Load time definition from project file." +msgstr "从项目文件加载时间定义。" -msgid "year:" -msgstr "年:" +#contributors: +msgid "Loading data..." +msgstr "加载数æ®ä¸­..." -msgid "standard deviation" -msgstr "标准差" +#contributors: +msgid "Local G" +msgstr "局部G" -msgid "Exit" -msgstr "退出" +#contributors: +msgid "Local G Maps" +msgstr "局部G地图" -msgid "Please select features first." -msgstr "请首先选择需è¦å¯¼å‡ºçš„对象." +#contributors: +msgid "Local G Statistics Maps" +msgstr "局部G统计地图" -msgid "There is at least one view could not be closed. Please manually close and try again." -msgstr "至少有一个窗å£æ— æ³•å…³é—­ã€‚请手动关闭并é‡è¯•ã€‚" +#contributors: +msgid "Local G*" +msgstr "局部G*" -msgid "Some calculated values were undefined and this is most likely due to neighborless observations in the weight matrix. Rate calculation successful for observations with neighbors." -msgstr "一些数æ®ä¸ºç©ºæˆ–者未定义,å¯èƒ½æ˜¯ç”±äºŽæƒé‡çŸ©é˜µä¸­æœ‰æ— é‚»åŸŸè§‚测。" +#contributors: +msgid "Local Geary" +msgstr "局部Geary" -msgid "Click RegressionDlg::OnSaveToTxtFileClick" -msgstr "Click RegressionDlg::OnSaveToTxtFileClick" +#contributors: +msgid "Local Geary Maps" +msgstr "局部Geary图" -msgid "Before proceed with operation (add/remove, move, or rename), please close %d views that depend on it." -msgstr "在继续æ“作(添加ã€åˆ é™¤ã€ç§»åŠ¨æˆ–é‡å‘½å)ä¹‹å‰ , 请关闭使用过该å˜é‡çš„%d 个窗å£ã€‚" +#contributors: +msgid "Local Join Count " +msgstr "局部Join Count" -msgid "Get a free Carto account: " -msgstr "获得å…è´¹Carto账户: " +#contributors: +msgid "Local Moran's I Maps" +msgstr "局部Moran’s I 地图" -msgid "You can try to proceed but the current threshold distance value might be too large to compute. If it fails, please input a smaller distance band (which might leave some observations neighborless) or use other weights (e.g. KNN)." -msgstr "当å‰è·ç¦»é˜ˆå€¼å¤ªå¤§ï¼Œå¯èƒ½éœ€è¦å¾ˆé•¿æ—¶é—´è¿›è¡Œè®¡ç®—。请输入一个较å°çš„阈值(å¯èƒ½ä¼šäº§ç”Ÿä¸€äº›æ²¡æœ‰é‚»å±…的观测值)或使用其他æƒé‡ï¼ˆä¾‹å¦‚KNN)。" +#contributors: +msgid "Local Moran's I with EB Rate" +msgstr "基于ç»éªŒè´å¶æ–¯æ¯”率的局部Moran’s I" -msgid "Save " -msgstr "ä¿å­˜ " +#contributors: +msgid "Local Search:" +msgstr "局部æœç´¢:" -msgid "Y-coordinate variable" -msgstr "Yåæ ‡å˜é‡" +#contributors: +msgid "Local search:" +msgstr "局部æœç´¢:" -msgid "Database Type" -msgstr "æ•°æ®åº“类型" +#contributors: +msgid "Locale for numbers has been setup successfully. Please re-open current project to enable this locale." +msgstr "å·²æˆåŠŸè®¾ç½®åŒºåŸŸè®¾ç½®ã€‚请é‡æ–°æ‰“开当å‰é¡¹ç›®ä»¥å¯ç”¨æ­¤åŒºåŸŸè®¾ç½®ã€‚" -msgid "Significance Filter" -msgstr "显著性过滤器" +#contributors: +msgid "Loop" +msgstr "循环" -msgid "Grid file was successfully created." -msgstr "网格文件æˆåŠŸåˆ›å»ºã€‚" +#contributors: +msgid "Low" +msgstr "低" -msgid "5 of 5 variables needed" -msgstr "需è¦5/5个å˜é‡" +#contributors: +msgid "Low-High" +msgstr "低-高" -msgid "GeoDa has run into a problem and will close." -msgstr "GeoDa 程åºé‡åˆ°äº†é—®é¢˜ï¼Œå°†ä¼šå…³é—­ã€‚" +#contributors: +msgid "Low-Low" +msgstr "低-低" -msgid "Save As has been cancelled." -msgstr "“å¦å­˜â€å·²è¢«å–消。" +#contributors: +msgid "Lower outlier" +msgstr "低异常值" -msgid "Carto Light" -msgstr "Carto Light" +#contributors: +msgid "Lower-left corner" +msgstr "左下角" -msgid "Merge by key values" -msgstr "åˆå¹¶(按关键值)" +#contributors: +msgid "MDS" +msgstr "多维标度分æž(MDS)" -msgid "Time" -msgstr "时间分æž" +#contributors: +msgid "MDS Plot" +msgstr "多维尺度å˜æ¢å›¾ MDS" -msgid "Third Variable (Z)" -msgstr "第三å˜é‡ï¼ˆZ)" +#contributors: +msgid "MDS Plot - " +msgstr "多维尺度分æžå›¾(MDS) - " -msgid "Saving failed: GeoDa can't save as empty datasource." -msgstr "ä¿å­˜å¤±è´¥ï¼šGeoDaä¸èƒ½ä¿å­˜ç©ºæ•°æ®æºã€‚" +#contributors: +msgid "MDS Settings" +msgstr "多维标度分æž(MDS)设置" -msgid "observation:" -msgstr "观察对象:" +#contributors: +msgid "MS Excel (*.xls)|*.xls" +msgstr "MS Excel (*.xls)|*.xls" -msgid "# observations" -msgstr "对象数é‡" +#contributors: +msgid "Make selection from expression " +msgstr "从表达å¼ä¸­é€‰æ‹© " -msgid "min neighbors" -msgstr "最å°é‚»å±…æ•°" +#contributors: +msgid "Manual Resize Column" +msgstr "手动调整列的大å°" -msgid "max neighbors" -msgstr "最大邻居数" +#contributors: +msgid "Map" +msgstr "地图" -msgid "mean neighbors" -msgstr "å¹³å‡é‚»å±…æ•°" - -msgid "median neighbors" -msgstr "中ä½é‚»å±…æ•°" - -msgid "% non-zero" -msgstr "有邻居对象所å æ¯”" - -msgid "Project file path is empty." -msgstr "项目文件路径为空。" - -msgid "Fixed scale over time" -msgstr "固定比例(ä¸éšæ—¶é—´å˜åŒ–)" - -msgid "Empirical Bayes Smoothed Variable Settings" -msgstr "ç»éªŒè´å¶æ–¯å¹³æ»‘å˜é‡è®¾ç½®" +#contributors: +msgid "Map Color Classification" +msgstr "地图颜色分类" -msgid "Database" -msgstr "æ•°æ®åº“" +#contributors: +msgid "Map Layer Settings" +msgstr "地图打å°è®¾ç½®" -msgid "csv file:" -msgstr "csv文件:" +#contributors: +msgid "Map Layout Preview" +msgstr "地图打å°é¢„览" -msgid "Downloading updates..." -msgstr "正在下载更新…" +#contributors: +msgid "Map Movie" +msgstr "地图动画" -msgid "Make selection from expression " -msgstr "从表达å¼ä¸­é€‰æ‹© " +#contributors: +msgid "Map Theme" +msgstr "地图主题" -msgid "On line %d of weights file, observation id %d encountered which does not exist in field \"%s\" of the Table." -msgstr "空间æƒé‡æ–‡ä»¶çš„第%d 行:在表格字段 \"%s\" 中找ä¸åˆ° id%d。" +#contributors: +msgid "Map Themes" +msgstr "地图主题" -msgid "Number of neighbors" -msgstr "邻居数" +#contributors: +msgid "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" +msgstr "MapInfo(*.tabï¼›*.MIFï¼›*.MID)**.tabï¼›*.MIFï¼›*.MID" -msgid "neighbors" -msgstr "邻居数" +#contributors: +msgid "Maps To Open" +msgstr "地图打开" -msgid "Use existing field name" -msgstr "使用现有字段å" +#contributors: +msgid "Maps and Rates" +msgstr "地图和比率" -msgid "Do you want to save your data?" -msgstr "æ•°æ®éœ€è¦ä¿å­˜ï¼Ÿ" +#contributors: +msgid "Maps:" +msgstr "地图:" -msgid "Error: \"%s\" not found." -msgstr "错误: 找ä¸åˆ° \"%s\"。" +#contributors: +msgid "March" +msgstr "三月" -msgid "Please describe steps you took before something went wrong." -msgstr "请æ述在出错之å‰é‡‡å–的步骤。" +#contributors: +msgid "Max" +msgstr "最大值" -msgid "Delta Factor:" -msgstr "Deltaå‚æ•°:" +#contributors: +msgid "Max Distance:" +msgstr "最大è·ç¦»:" -msgid "Duplicate Thiessen polygons exist due to duplicate or near-duplicate map points. Press OK to save duplicate polygon ids to Table." -msgstr "由于存在é‡å¤æˆ–接近é‡å¤çš„点,所生æˆçš„泰森多边形出现é‡å¤çš„。按 \"确定\" å°†é‡å¤çš„泰森多边形 id ä¿å­˜åˆ°è¡¨ä¸­ã€‚" +#contributors: +msgid "Max value of Y axis" +msgstr "Y轴最大值" -msgid "Rectangle" -msgstr "矩形" +#contributors: +msgid "Max-p Settings" +msgstr "Max-p 设置" -msgid "Hinge=3.0" -msgstr "Hinge=3.0" +#contributors: +msgid "Maximum # of regions:" +msgstr "最大区域数é‡ï¼š" -msgid "Before add/delete observations, please close the %d view(s) that depend on it." -msgstr "在添加/删除观测之å‰, 请关闭ä¾èµ–于它的%d 个窗å£ã€‚" +#contributors: +msgid "Maximum Iterations:" +msgstr "最大迭代:" -msgid "Variable %s is a time-grouped variable. Please ungroup this variable to delete." -msgstr "å˜é‡%s 是一个时间å˜é‡ã€‚ 请å–消定义该时间å˜é‡åŽå†è¿›è¡Œåˆ é™¤ã€‚" +#contributors: +msgid "Maximum iterations:\t" +msgstr "最大迭代次数:\t" -msgid "Assign To Target" -msgstr "分é…给目标" +#contributors: +msgid "May" +msgstr "五月" -msgid "" -"Do you want to save the results of Diff-in-Diff test?\n" -"\n" -"Note: the results can only be saved into an external data file, due to the change of cross-sectional observations in a space-time context." -msgstr "" -"是å¦ä¿å­˜Diff-in-Diff测试结果?\n" -"\n" -"注æ„: 结果åªèƒ½ä¿å­˜åˆ°å¤–部数æ®æ–‡ä»¶ä¸­, 这是因为当å‰çš„横截é¢è§‚测值在空时上下文中å‘生了å˜åŒ–。" +#contributors: +msgid "Mean" +msgstr "å¹³å‡å€¼" -msgid "Variable %s is not valid. Please select another variable." -msgstr "å˜é‡%s无效。请选择å¦ä¸€ä¸ªå˜é‡ã€‚" +#contributors: +msgid "Merge" +msgstr "åˆå¹¶" -msgid "Output file (text file)" -msgstr "输出文件(文本文件)" +#contributors: +msgid "Merge - " +msgstr "åˆå¹¶ - " -msgid "Please input database port." -msgstr "请输入数æ®åº“端å£ã€‚" +#contributors: +msgid "Merge by key values" +msgstr "åˆå¹¶(按关键值)" +#contributors: msgid "Merge by record order" msgstr "åˆå¹¶(按顺åº)" -msgid "Info" -msgstr "ä¿¡æ¯" +#contributors: +msgid "Merge error: Geometric type of selected datasource has to be the same with current datasource." +msgstr "åˆå¹¶é”™è¯¯: 选定数æ®æºçš„几何类型必须与当å‰æ•°æ®æºç›¸åŒã€‚" -msgid "Displayed decimal places" -msgstr "显示å°æ•°ç‚¹ä½æ•°" +#contributors: +msgid "Message area" +msgstr "消æ¯åŒº" -msgid "Invert Selection" -msgstr "å选" +#contributors: +msgid "Meta-data" +msgstr "元数æ®" -msgid "Conditional Plot" -msgstr "æ¡ä»¶å›¾" +#contributors: +msgid "Method" +msgstr "方法" -msgid "X-Axis" -msgstr "Xè½´" +#contributors: +msgid "Method of selecting clusters:" +msgstr "选å–èšç±»çš„方法:" -msgid "Local Search:" -msgstr "局部æœç´¢:" +#contributors: +msgid "Method:" +msgstr "方法:" -msgid "Local search:" -msgstr "局部æœç´¢:" +#contributors: +msgid "Method:\t" +msgstr "方法:\t" -msgid "Greedy" -msgstr "贪心算法(Greedy)" +#contributors: +msgid "Min" +msgstr "最å°å€¼" -msgid "Please select the layer name to connect:" -msgstr "请选择è¦è¿žæŽ¥çš„æ•°æ®/图层å称:" +#contributors: +msgid "Min # per Region:" +msgstr "æ¯åŒºåŸŸæœ€å°å¯¹è±¡æ•°é‡ï¼š" -msgid "Conditional GetisOrd Map" -msgstr "æ¡ä»¶GetisOrd地图" +#contributors: +msgid "Min Region Size:" +msgstr "最å°åŒºåŸŸå¤§å°ï¼š" -msgid "Local Moran's I with EB Rate" -msgstr "基于ç»éªŒè´å¶æ–¯æ¯”率的局部Moran’s I" +#contributors: +msgid "Min cluster size:" +msgstr "èšç±»æœ€å°å¯¹è±¡æ•°(Min Cluster size):" -msgid "[Steps you took before something went wrong]" -msgstr "[在å‘生错误之å‰çš„步骤]" +#contributors: +msgid "Min samples:" +msgstr "最å°é‡‡æ ·æ•°:" -msgid "value:" -msgstr "值:" +#contributors: +msgid "Min value of Y axis" +msgstr "Y轴最å°å€¼" -msgid "File doesn't exist!" -msgstr "文件ä¸å­˜åœ¨ï¼" +#contributors: +msgid "Minimum Bound:" +msgstr "最å°ç•Œé™ï¼š" -msgid "Count" -msgstr "计数" +#contributors: +msgid "Minimum bound:\t" +msgstr "最å°è¾¹ç•Œå€¼:\t" -msgid "Database Port" -msgstr "æ•°æ®åº“端å£" +#contributors: +msgid "Minimum cluster size should be greater than one." +msgstr "" -msgid "Other (up to 99999)" -msgstr "其他(最多99999)" +#contributors: +msgid "Minimum region size:\t" +msgstr "最å°åŒºåŸŸæ•°:\t" -msgid "version:" -msgstr "版本:" +#contributors: +msgid "Minimum samples should be greater than zero." +msgstr "" -msgid "Input is duplicated." -msgstr "输入é‡å¤ã€‚" +#contributors: +msgid "Models" +msgstr "模型" -msgid "show normal distribution p-val maps" -msgstr "显示p值的正æ€åˆ†å¸ƒåœ°å›¾" +#contributors: +msgid "Moran Scatter Plot" +msgstr "Moran散点图" -msgid "Select Variables" -msgstr "选择å˜é‡" +#contributors: +msgid "Moran scatter plot is not supported when isolates are present in weights. Do you want to continue by removing the isolates when compute Moran's I?" +msgstr "" -msgid "Insufficient Random Sampling" -msgstr "éšæœºæŠ½æ ·ä¸è¶³" +#contributors: +msgid "Moran's I (%s): %s" +msgstr "Moran's I(%s):%s" -msgid "Upper-right corner" -msgstr "å³ä¸Šè§’" +#contributors: +msgid "Moran's I with EB Rate" +msgstr "基于ç»éªŒè´å¶æ–¯æ¯”率的Moran’s I" -msgid "Var Calc Container" -msgstr "Var Calc Container" +#contributors: +msgid "Move Down" +msgstr "å‘下移动" -msgid "This is the list of existing grouped variables. As new groups are created, they will appear on this list. You can open an existing .gda file and edit it here." -msgstr "新的分组(时间)å˜é‡åˆ›å»ºåŽï¼Œå°†å‡ºçŽ°åœ¨æ­¤åˆ—表中。您å¯ä»¥æ‰“开现有的.gda文件并在此处进行编辑。" +#contributors: +msgid "Move Selected to Top" +msgstr "移动选择到顶部" -msgid "Save Connectivity To Table" -msgstr "将连接性ä¿å­˜åˆ°è¡¨ä¸­" +#contributors: +msgid "Move Up" +msgstr "å‘上移动" -msgid "Set Display Precision" -msgstr "设置显示精度" +#contributors: +msgid "Multi-Variable Settings" +msgstr "多å˜é‡è®¾ç½®" -msgid "There was a problem reading the table" -msgstr "读å–表时出现问题" +#contributors: +msgid "Multivariate Local Geary" +msgstr "多å˜é‡å±€éƒ¨Geary" -msgid "Select All In Range" -msgstr "选择范围内所有对象" +#contributors: +msgid "Name" +msgstr "å称" -msgid "Operation requires a valid field name or constant." -msgstr "æ“作需è¦æœ‰æ•ˆçš„字段å或常é‡ã€‚" +#contributors: +msgid "Natural Breaks" +msgstr "自然间断点" -msgid "Pan" -msgstr "平移" +#contributors: +msgid "Natural Breaks Map" +msgstr "自然断点地图" -msgid "dBase Database File (*.dbf)|*.dbf" -msgstr "dBase Database File (*.dbf)|*.dbf" +#contributors: +msgid "Negative" +msgstr "负相关" -msgid "Error: The table variable name is empty." -msgstr "错误:表å˜é‡å称为空。" +#contributors: +msgid "Neighborless" +msgstr "无邻域" -msgid "Variable name can't be empty." -msgstr "å˜é‡åä¸èƒ½ä¸ºç©ºã€‚" +#contributors: +msgid "Neighbors of Cores" +msgstr "核心的邻居" -msgid "Duplicate variable names specified" -msgstr "å˜é‡å已存在" +#contributors: +msgid "New" +msgstr "新建" -msgid "Result" -msgstr "结果" +#contributors: +msgid "New Categories Title" +msgstr "新建分类标题" -msgid "New space-time variable name" -msgstr "新的时空å˜é‡å" +#contributors: +msgid "New Custom Categories Title:" +msgstr "自定义类别标题:" -msgid "Save Results: LocalGeary" -msgstr "ä¿å­˜ç»“æžœ: 局部Geary" +#contributors: +msgid "New From Recent" +msgstr "打开最近访问" -msgid "Color" -msgstr "颜色" +#contributors: +msgid "New Group Details" +msgstr "新建组(时间)å˜é‡" -msgid "Exclude" -msgstr "排除" +#contributors: +msgid "New Map Coordinates" +msgstr "新地图åæ ‡" -msgid "Google Places API" -msgstr "Google Places API" +#contributors: +msgid "New Project Filename" +msgstr "新建项目文件å" -msgid "Delete Variable(s)" -msgstr "删除å˜é‡" +#contributors: +msgid "New Selection" +msgstr "新选择" -msgid "Variable Choice" -msgstr "å˜é‡é€‰æ‹©" +#contributors: +msgid "New datasource:" +msgstr "æ–°æ•°æ®æºï¼š" -msgid "Add Time" -msgstr "添加时间" +#contributors: +msgid "New project file:" +msgstr "新建项目:" -msgid "Scatter Plot Matrix Help" -msgstr "散点图矩阵帮助" +#contributors: +msgid "New selection" +msgstr "新选择" -msgid "Weights Manager" -msgstr "空间æƒé‡ç®¡ç†" +#contributors: +msgid "New space-time variable name" +msgstr "新的时空å˜é‡å" -msgid "Decimal:" -msgstr "å°æ•°ï¼š" +#contributors: +msgid "New variable name" +msgstr "æ–°çš„å˜é‡å" -msgid "Error: \"%s\" is an invalid variable name. The first character must be alphabetic, and the remaining characters can be either alphanumeric or underscores. For DBF table, a valid variable name is between one and ten characters long." -msgstr "错误:“%sâ€æ˜¯æ— æ•ˆçš„å˜é‡å称。第一个字符必须是字æ¯ï¼Œå…¶ä½™å­—符å¯ä»¥æ˜¯å­—æ¯æ•°å­—或下划线。对于DBF表,有效的å˜é‡å称长度介于1到10个字符之间。" +#contributors: +msgid "No Basemap" +msgstr "无底图" -msgid "X-coord" -msgstr "Xåæ ‡" +#contributors: +msgid "No Colocation" +msgstr "没有Colocation" -msgid "max:" -msgstr "最大值:" +#contributors: +msgid "No Weights Found" +msgstr "没有æƒé‡æ–‡ä»¶" -msgid "Bivariate Local Moran's I" -msgstr "åŒå˜é‡å±€éƒ¨Moran’s I" +#contributors: +msgid "No clusters can be found using current parameters." +msgstr "使用当å‰çš„å‚æ•°é…置找ä¸åˆ°ä»»ä½•èšç±»ã€‚" -msgid "Variable" -msgstr "å˜é‡" +#contributors: +msgid "No field chosen for first and second variable." +msgstr "" -msgid "Expression" -msgstr "表达å¼" +#contributors: +msgid "No field chosen for first variable." +msgstr "请选择第一个å˜é‡" -msgid "Error: Maximum number of neighbors %d exceeded." -msgstr "错误:超过最大的邻居数é‡%d。" +#contributors: +msgid "No field chosen for fourth variable." +msgstr "请选择第四个å˜é‡" -msgid "Spectral" -msgstr "è°±èšç±»(Spectral)" +#contributors: +msgid "No field chosen for second variable." +msgstr "请选择第二个å˜é‡" -msgid "Save Results: Moran's I" -msgstr "ä¿å­˜ç»“æžœ: Moran's I" +#contributors: +msgid "No field chosen for third variable." +msgstr "请选择第三个å˜é‡" -msgid "Initialization Method:" -msgstr "åˆå§‹åŒ–方法:" +#contributors: +msgid "No layer has been selected. Please select a layer." +msgstr "没有选择任何层。请选择一个图层。" -msgid "Oops. GeoDa was unable to submit a bug report. Please try again or create it here instead: https://github.com/GeoDaCenter/geoda/issues Thanks!" -msgstr "GeoDa无法æ交错误报告。请é‡è¯•æˆ–在此处创建它:https://github.com/GeoDaCenter/geoda/issues。谢谢ï¼" +#contributors: +msgid "No layer was found in the selected data source." +msgstr "在选定的数æ®æºä¸­æ²¡æœ‰å‘现任何图层/表。" -msgid "Assoc. Var." -msgstr "相关å˜é‡" +#contributors: +msgid "No layer was found in this datasource." +msgstr "在选定的数æ®æºä¸­æ²¡æœ‰å‘现任何图层/表。" -msgid "Please click to choose a highlighting style in GeoDa:" -msgstr "请点击选择高亮样å¼ï¼š" +#contributors: +msgid "No numeric variables found in table." +msgstr "表中没有找到任何数值å˜é‡ã€‚" -msgid "The number of displayed decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." -msgstr "éžæ•´æ•°æ•°å­—字段的显示å°æ•°ä½æ•°å¿…须至少为%d, 最多为%d。" +#contributors: +msgid "No numeric variables found." +msgstr "没有找到任何数值å˜é‡ã€‚" -msgid "Light" -msgstr "细" +#contributors: +msgid "No rates currently calculated to save." +msgstr "当å‰ä¿å­˜å½“å‰æ¯”率å˜é‡ã€‚" -msgid "Distance Weight" -msgstr "基于è·ç¦»ç©ºé—´æƒé‡" +#contributors: +msgid "No update required" +msgstr "ä¸éœ€è¦æ›´æ–°" -msgid "Independent Var X" -msgstr "自å˜é‡X" +#contributors: +msgid "No weights file was created due to all observations being isolates for the specified threshold value. Increase the threshold to create a non-empty weights file." +msgstr "无法创建空间æƒé‡æ–‡ä»¶ï¼šæ‰€è®¾é˜ˆå€¼è¿‡å°ï¼Œæ‰€æœ‰å¯¹è±¡æ— æ³•åœ¨é˜ˆå€¼èŒƒå›´å†…找到邻居。请å°è¯•å¢žå¤§é˜ˆå€¼å†åˆ›å»ºç©ºé—´æƒé‡æ–‡ä»¶ã€‚" -msgid "Power" -msgstr "幂" +#contributors: +msgid "None of your observations have neighbors. This could be related to digitizing problems, which can be fixed by adjusting the precision threshold." +msgstr "所有观测对象都ä¸èƒ½æ‰¾åˆ°é‚»å±…。 è¿™å¯èƒ½ä¸Žåœ°å›¾æ•°å­—化的问题有关(比如:相邻矢é‡å½¢çŠ¶ä¹‹é—´çš„è·ç¦»ä¸ä¸º0),å¯é€šè¿‡è°ƒæ•´æœ€å°ç²¾åº¦é˜ˆå€¼ï¼ˆå³ï¼šç›¸é‚»çŸ¢é‡å½¢çŠ¶ä¹‹é—´çš„å¯èƒ½çš„最å°è·ç¦»ï¼‰æ¥è§£å†³é—®é¢˜ã€‚" -msgid "power" -msgstr "幂" +#contributors: +msgid "Nordic Latin-6 (ISO-8859-10)" +msgstr "" -msgid "Selected" -msgstr "选中" +#contributors: +msgid "Normal" +msgstr "正常" -msgid "Frequency" -msgstr "频率" +#contributors: +msgid "Not Clustered" +msgstr "无法进行èšç±»" -msgid "" -"---\n" -"\n" -"PCA method: " -msgstr "" -"---\n" -"\n" -"PCA 方法: " +#contributors: +msgid "Not Significant" +msgstr "ä¸æ˜¾è‘—" -msgid "" -"\n" -"\n" -"Standard deviation:\n" -msgstr "" -"\n" -"\n" -"标准差:\n" +#contributors: +msgid "Not enough memory!" +msgstr "内存ä¸è¶³ï¼" -msgid "" -"\n" -"\n" -"Proportion of variance:\n" -msgstr "" -"\n" -"\n" -"å„å˜é‡è´¡çŒ®çŽ‡(Proportion of variance):\n" +#contributors: +msgid "Notice" +msgstr "通知" -msgid "" -"\n" -"\n" -"Cumulative proportion:\n" -msgstr "" -"\n" -"\n" -"å˜é‡ç´¯è®¡è´¡çŒ®çŽ‡(Cumulative proportion):\n" +#contributors: +msgid "November" +msgstr "å一月" -msgid "" -"\n" -"\n" -"Kaiser criterion: " +#contributors: +msgid "Null geometry was detected in dataset. GeoDa can't create weights with NULL geometry. Please try to save as records with valid geometries and try again." msgstr "" -"\n" -"\n" -"Kaiser准则(特å¾å€¼>1): " -msgid "" -"\n" -"\n" -"95% threshold criterion: " -msgstr "" -"\n" -"\n" -"贡献达95%阈值准则: " +#contributors: +msgid "Number Bins:" +msgstr "分区(Bins)æ•°é‡" -msgid "" -"\n" -"\n" -"Eigenvalues:\n" -msgstr "" -"\n" -"\n" -"特å¾å€¼(Eigenvalues):\n" +#contributors: +msgid "Number of Box Plots" +msgstr "箱线图个数" -msgid "" -"\n" -"\n" -"Variable Loadings:\n" -msgstr "" -"\n" -"\n" -"主æˆåˆ†è½½è·(Variable Loadings):\n" +#contributors: +msgid "Number of Categories" +msgstr "分类数" -msgid "" -"\n" -"\n" -"Squared correlations:\n" -msgstr "" -"\n" -"\n" -"å˜é‡ä¸Žä¸»æˆåˆ†å¹³æ–¹ç›¸å…³ç³»æ•°(Squared correlations):\n" +#contributors: +msgid "Number of Clusters:" +msgstr "èšç±»æ•°ï¼š" -msgid "Choose Weights File" -msgstr "选择空间æƒé‡æ–‡ä»¶" +#contributors: +msgid "Number of Columns" +msgstr "列数" -msgid "Components:" -msgstr "选择è¦ä¿æŒçš„主æˆåˆ†æ•°ï¼š" +#contributors: +msgid "Number of Neighbors" +msgstr "邻居数é‡" -msgid "Rates" -msgstr "比率" +#contributors: +msgid "Number of Rows" +msgstr "行数" -msgid "There is one other view open that depends on this matrix. Ok to close this view and remove?" -msgstr "有其他的窗å£ä¾èµ–于这个矩阵。 是å¦å…³é—­è¿™äº›çª—å£å¹¶ç»§ç»­ï¼Ÿ" +#contributors: +msgid "Number of clusters:\t" +msgstr "èšç±»æ•°é‡:\t" -msgid "Random uniform dist on unit interval" -msgstr "å•ä½é—´éš”上的éšæœºå‡åŒ€åˆ†å¸ƒ" +#contributors: +msgid "Number of neighbors" +msgstr "邻居数" -msgid "Natural Breaks Map" -msgstr "自然断点地图" +#contributors: +msgid "Number of not clustered observations: " +msgstr "无法èšç±»çš„对象数:" -msgid "Convert Boundary to Shape Datasource" -msgstr "转æ¢è¾¹ç•Œåˆ°çŸ¢é‡æ•°æ®" +#contributors: +msgid "OGR failed to create field.\n\nDetails:" +msgstr "创建OGR字段失败。\n\n详细:" -msgid "Merge error: Geometric type of selected datasource has to be the same with current datasource." -msgstr "åˆå¹¶é”™è¯¯: 选定数æ®æºçš„几何类型必须与当å‰æ•°æ®æºç›¸åŒã€‚" +#contributors: +msgid "OK" +msgstr "确定" -msgid "Submit Bug Error" -msgstr "æ交错误" +#contributors: +msgid "OK to Exit?" +msgstr "确定退出?" -msgid "Stable Version and Bug Fixes Only" -msgstr "稳定版本" +#contributors: +msgid "OLS Model has been selected." +msgstr "选择OLS模型。" -msgid "Box Map (Hinge=1.5)" -msgstr "箱线地图 (Hinge=1.5)" +#contributors: +msgid "OLS Model with White test has been selected." +msgstr "选择了OLS模型(White测试)。" -msgid "Add new column to table" -msgstr "将新列添加到表中" +#contributors: +msgid "Obs." +msgstr "对象数" -msgid "Wrong number of rows!" -msgstr "行数错误ï¼" +#contributors: +msgid "October" +msgstr "å月" -msgid "REDCAP Settings" -msgstr "REDCAP设置" +#contributors: +msgid "Ok" +msgstr "确认" -msgid "Fit-To-Window Mode" -msgstr "窗å£åŒ¹é…模å¼" +#contributors: +msgid "On line %d of weights file, observation id %d encountered which does not exist in field \"%s\" of the Table." +msgstr "空间æƒé‡æ–‡ä»¶çš„第%d 行:在表格字段 \"%s\" 中找ä¸åˆ° id%d。" -msgid "Please select a weights type." -msgstr "请选择一个空间æƒé‡ç±»åž‹ã€‚" +#contributors: +msgid "On line %d of weights file, observation id %d encountered which is out of allowed observation range of 1 through %d." +msgstr "空间æƒé‡æ–‡ä»¶çš„第%d行中指定的id=%d ä¸åœ¨å…许的范围中:1 - %d。" -msgid "Click RegressionDlg::OnViewResultsClick" -msgstr "Click RegressionDlg::OnViewResultsClick" +#contributors: +msgid "Once you have grouped variables, you can save a new space-time table and weights: To add a spatial ID to your space-time table and create space-time weights, you need to have an active weights file (Tools-Weights Manager)." +msgstr "定义好的分组å˜é‡å¯ä»¥ä¿å­˜ä¸ºä¸€ä¸ªæ—¶ç©ºè¡¨ä»¥å¹¶åˆ›å»ºç›¸åº”的时空æƒé‡ã€‚如果è¦åˆ›å»ºæ—¶ç©ºæƒé‡æ–‡ä»¶ï¼šè¯·é€šè¿‡èœå•ï¼ˆå·¥å…·-æƒé‡ç®¡ç†ï¼‰æ¥æŒ‡å®šä¸€ä¸ªç©ºé—´æƒé‡æ–‡ä»¶ã€‚" -msgid "Duplicate IDs" -msgstr "é‡å¤ID" +#contributors: +msgid "Only 'gal', 'gwt', 'kwt', 'mat' and 'swm' weights files supported." +msgstr "åªæ”¯æŒ'gal','gwt','kwt','mat'å’Œ'swm’空间æƒé‡æ–‡ä»¶ã€‚" -msgid "Check Updates" -msgstr "检查更新" +#contributors: +msgid "Only Map Boundary" +msgstr "åªæ˜¾ç¤ºåœ°å›¾è½®å»“" -msgid "Set seed for randomization:" -msgstr "设置éšæœºæ“作的ç§å­ï¼š" +#contributors: +msgid "Oops. GeoDa was unable to submit a bug report. Please try again or create it here instead: https://github.com/GeoDaCenter/geoda/issues Thanks!" +msgstr "GeoDa无法æ交错误报告。请é‡è¯•æˆ–在此处创建它:https://github.com/GeoDaCenter/geoda/issues。谢谢ï¼" -msgid "" -"\n" -"REGRESSION\n" -"----------\n" -msgstr "" -"\n" -"回归分æž\n" -"----------\n" +#contributors: +msgid "Open" +msgstr "打开" -msgid "Move Selected to Top" -msgstr "移动选择到顶部" +#contributors: +msgid "Open Datasource:" +msgstr "打开数æ®æºï¼š" -msgid "Database Host" -msgstr "æ•°æ®åº“主机" +#contributors: +msgid "Open Document Spreadsheet (*.ods)|*.ods" +msgstr "Open Document Spreadsheet (*.ods)|*.ods" -msgid "Category" -msgstr "分类" +#contributors: +msgid "Open Layer:" +msgstr "打开层:" -msgid "Input file " -msgstr "选择文件 " +#contributors: +msgid "Open data source progress dialog" +msgstr "打开数æ®è¿›åº¦" -msgid " Bivariate Local Geary Cluster Map" -msgstr " åŒå˜é‡å±€éƒ¨Gearyèšç±»å›¾" +#contributors: +msgid "Open file" +msgstr "打开文件" -msgid "Project to X-Y" -msgstr "投影到X-Y" +#contributors: +msgid "Open project file:" +msgstr "打开项目文件:" -msgid "Initial Groups:" -msgstr "åˆå§‹ç»„:" +#contributors: +msgid "Open weights file" +msgstr "打开空间æƒé‡æ–‡ä»¶" -msgid "Adjust Value Range of Y Axis" -msgstr "调整Y轴值范围" +#contributors: +msgid "Operation requires a valid field name or constant." +msgstr "æ“作需è¦æœ‰æ•ˆçš„字段å或常é‡ã€‚" -msgid "Show Recent/Sample Data panel in Connect Datasource Dialog:" -msgstr "在连接数æ®æºå¯¹è¯æ¡†ä¸­æ˜¾ç¤ºæœ€è¿‘/示例数æ®é¢æ¿ï¼š" +#contributors: +msgid "Operator" +msgstr "æ“作符" -msgid "Zoom Out" -msgstr "缩å°" +#contributors: +msgid "Options" +msgstr "选项" -msgid "There was a problem generating the PostScript file." -msgstr "ç”Ÿæˆ PostScript 文件时出现问题." +#contributors: +msgid "Options > Change Parameters" +msgstr "选项 > 修改å‚æ•°" -msgid "Sample Data" -msgstr "示例数æ®" +#contributors: +msgid "Options:" +msgstr "选项:" -msgid "Colocation Cluster" -msgstr "Colocationèšç±»" +#contributors: +msgid "Order of contiguity" +msgstr "邻接的秩" -msgid "Time Editor" -msgstr "时间编辑器" +#contributors: +msgid "Other (up to 99999)" +msgstr "其他(最多99999)" -msgid "Please enter minimum number of observations per regions, or use minimum bound instead." -msgstr "请输入æ¯ä¸ªåŒºåŸŸçš„最å°è§‚测次数, 或者使用最å°èŒƒå›´ã€‚" +#contributors: +msgid "Other Pos" +msgstr "其他正相关" -msgid "Local G Statistics Maps" -msgstr "局部G统计地图" +#contributors: +msgid "Other Positive" +msgstr "其他正相关" -msgid "These are the row numbers of the records without location information." -msgstr "这些是没有ä½ç½®ä¿¡æ¯çš„è¡Œå·ã€‚" +#contributors: +msgid "Outline Color" +msgstr "轮廓色" -msgid "Number of Categories" -msgstr "分类数" +#contributors: +msgid "Outline Color for Category" +msgstr "分类的轮廓色" -msgid "Rook contiguity" -msgstr "Rook邻接" +#contributors: +msgid "Outline Visible" +msgstr "设置轮廓å¯è§" -msgid "X-Coordinates" -msgstr "Xåæ ‡" +#contributors: +msgid "Outlines Visible" +msgstr "轮廓线å¯è§†" -msgid "3rd Variable (Z)" -msgstr "第三å˜é‡ï¼ˆz)" +#contributors: +msgid "Output file (*.shp)" +msgstr "输出文件(*.shp)" -msgid "Sum" -msgstr "总数" +#contributors: +msgid "Output file (text file)" +msgstr "输出文件(文本文件)" -msgid "Moran's I (%s): %s" -msgstr "Moran's I(%s):%s" +#contributors: +msgid "Output:" +msgstr "输出:" -msgid "# Iterations:" -msgstr "迭代次数:" +#contributors: +msgid "Overwrite?" +msgstr "覆盖?" -msgid "" -" has duplicate values. Please choose a different ID Variable.\n" -"\n" -"Details:" +#contributors: +msgid "PCA" +msgstr "主æˆåˆ†åˆ†æž" + +#contributors: +msgid "PCA Settings" +msgstr "PCA设置" + +#contributors: +msgid "POLY&ID" +msgstr "POLY&ID" + +#contributors: +msgid "Pan" +msgstr "平移" + +#contributors: +msgid "Panning Mode" +msgstr "平移模å¼" + +#contributors: +msgid "Parallel Coordinate Plot" +msgstr "平行å标图" + +#contributors: +msgid "Parallel Coordinate Plot: " +msgstr "平行å标图: " + +#contributors: +msgid "Parameters" +msgstr "å‚æ•°" + +#contributors: +msgid "Parameters:" +msgstr "å‚数:" + +#contributors: +msgid "Password" +msgstr "密ç " + +#contributors: +msgid "Paste" +msgstr "粘贴" + +#contributors: +msgid "Percentile" +msgstr "百分ä½æ•°(Percentile)" + +#contributors: +msgid "Percentile Map" +msgstr "百分ä½æ•°(Percentile)地图" + +#contributors: +msgid "Period 1" +msgstr "时段1" + +#contributors: +msgid "Period 1:" +msgstr "时段1:" + +#contributors: +msgid "Period 2" +msgstr "时段2" + +#contributors: +msgid "Period 2:" +msgstr "时段2:" + +#contributors: +msgid "Please briefly describe what went wrong." +msgstr "请简è¦æ述出什么地方出错了。" + +#contributors: +msgid "Please check input values are valid" msgstr "" -" 有é‡å¤çš„值。请选择一个ä¸åŒçš„IDå˜é‡ã€‚\n" -"\n" -"详情:" -msgid "Color Scheme" -msgstr "é…色方案" +#contributors: +msgid "Please check the selected variables are all valid." +msgstr "请检查所选å˜é‡æ˜¯å¦éƒ½æœ‰æ•ˆã€‚" -msgid "Values assigned to target field successfully." -msgstr "æˆåŠŸä¸ºç›®æ ‡å­—段赋值。" +#contributors: +msgid "Please check your network connection, or contact GeoDa support team." +msgstr "请检查您的网络连接,或è”ç³»GEODA支æŒå›¢é˜Ÿã€‚" -msgid "OLS Model with White test has been selected." -msgstr "选择了OLS模型(White测试)。" +#contributors: +msgid "Please choose Period 1 first." +msgstr "请先选择时段1。" + +#contributors: +msgid "Please choose Period 1." +msgstr "请选择时段1。" -msgid "(Please note: Only supported for smaller datasets.)" -msgstr "(请注æ„: åªæ”¯æŒè¾ƒå°çš„æ•°æ®é›†ã€‚)" +#contributors: +msgid "Please choose Period 2 first." +msgstr "请先选择时段2。" -msgid "The number of records in current table is larger than the number of records in import table. Please choose import table >= %d records" -msgstr "当å‰è¡¨ä¸­çš„记录数大于导入表中的记录数。请选择至少有 %d æ¡è®°å½•çš„表导入" +#contributors: +msgid "Please choose Period 2." +msgstr "请选择 时段2。" -msgid "Lower outlier" -msgstr "低异常值" +#contributors: +msgid "Please choose Periods first." +msgstr "请首先选择时段。" -msgid "Specified key value field \"%s\" in weights file contains duplicate values in the currently loaded Table." -msgstr "空间æƒé‡æ–‡ä»¶ä¸­æŒ‡å®šçš„键值字段 \"%s\" 在当å‰çš„æ•°æ®è¡¨ä¸­æœ‰é‡å¤çš„值。" +#contributors: +msgid "Please choose a Result field." +msgstr "请选择结果字段。" -msgid "Hide system table in Postgresql connection:" -msgstr "在PostgreSQL连接中éšè—系统表:" +#contributors: +msgid "Please click to choose a highlighting style in GeoDa:" +msgstr "请点击选择高亮样å¼ï¼š" -msgid "Plots:" -msgstr "制图:" +#contributors: +msgid "Please describe steps you took before something went wrong." +msgstr "请æ述在出错之å‰é‡‡å–的步骤。" -msgid "Multivariate Local Geary" -msgstr "多å˜é‡å±€éƒ¨Geary" +#contributors: +msgid "Please enter a field name for saving clustering results." +msgstr "请输入用于ä¿å­˜èšç±»ç»“果的字段å。" -msgid "Dependent Variable" -msgstr "å› å˜é‡" +#contributors: +msgid "Please enter a valid number of cluster." +msgstr "" -msgid "Cut" -msgstr "剪切" +#contributors: +msgid "Please enter a valid number of clusters." +msgstr "" -msgid "Please enter number of regions" -msgstr "请输入区域数" +#contributors: +msgid "Please enter a valid positive integer" +msgstr "" +#contributors: +msgid "Please enter iteration number" +msgstr "请输入迭代次数" + +#contributors: msgid "Please enter maximum number of regions." msgstr "请输入最大区域数。" -msgid "day:" -msgstr "天:" +#contributors: +msgid "Please enter minimum bound value" +msgstr "请输入最å°ç•Œé™å€¼" -msgid "Diff Values" -msgstr "差异值" +#contributors: +msgid "Please enter minimum number of observations per regions, or use minimum bound instead." +msgstr "请输入æ¯ä¸ªåŒºåŸŸçš„最å°è§‚测次数, 或者使用最å°èŒƒå›´ã€‚" -msgid "Description" -msgstr "æè¿°" +#contributors: +msgid "Please enter number of regions" +msgstr "请输入区域数" -msgid "Custom Breaks" -msgstr "自定义分类" +#contributors: +msgid "Please enter values of bounding box." +msgstr "" -msgid "Use classic yellow cross-hatching to highlight selection in maps:" -msgstr "使用ç»å…¸çš„黄色交å‰é˜´å½±æ¥é«˜äº®åœ°å›¾ä¸­çš„选中的对象:" +#contributors: +msgid "Please first select observations in one of the other data or map views." +msgstr "请首先在其他窗å£é€‰å–观察对象。" -msgid "Setup Locale of GeoDa Table" -msgstr "区域设置" +#contributors: +msgid "Please fix the grid bounding box." +msgstr "请修å¤ç½‘格边界。" -msgid "Can't get bounding box information from this datasource. Please try another datasource." -msgstr "无法从此数æ®æºèŽ·å–边界信æ¯ã€‚请å°è¯•å¦ä¸€ä¸ªæ•°æ®æºã€‚" +#contributors: +msgid "Please input Carto App Key." +msgstr "请输入Carto App密钥。" -msgid "Conditional Scatter Plot Variables" -msgstr "æ¡ä»¶æ•£ç‚¹å›¾å˜é‡" +#contributors: +msgid "Please input Carto User Name." +msgstr "请输入Carto用户å。" -msgid "199 Permutations" -msgstr "199次置æ¢" +#contributors: +msgid "Please input a valid url address." +msgstr "请输入有效的URL地å€ã€‚" + +#contributors: +msgid "Please input a valid url." +msgstr "请输入有效的URL。" + +#contributors: +msgid "Please input database host." +msgstr "请输入数æ®åº“主机。" + +#contributors: +msgid "Please input database name." +msgstr "请输入数æ®åº“å称。" + +#contributors: +msgid "Please input database port." +msgstr "请输入数æ®åº“端å£ã€‚" + +#contributors: +msgid "Please input minimum bound value." +msgstr "请输入最å°è¾¹ç•Œå€¼ã€‚" + +#contributors: +msgid "Please input password." +msgstr "请输入密ç ã€‚" + +#contributors: +msgid "Please input table name." +msgstr "请输入表å。" +#contributors: +msgid "Please input user name." +msgstr "请输入用户å。" + +#contributors: +msgid "Please load another layer using map window to apply Spatial Join." +msgstr "" + +#contributors: +msgid "Please open a data file rather than a project file (*.gda)." +msgstr "请打开一个数æ®æ–‡ä»¶ï¼Œè€Œä¸æ˜¯ä¸€ä¸ªé¡¹ç›®æ–‡ä»¶ï¼ˆ*.gda)。" + +#contributors: +msgid "Please provide paths for both Project file and Datasource." +msgstr "请æ供项目文件和数æ®æºçš„路径。" + +#contributors: +msgid "Please restart GeoDa to apply the language setup." +msgstr "请é‡æ–°å¯åŠ¨GEODAæ¥åº”用语言设置。" + +#contributors: +msgid "Please restart GeoDa to finish installing updates." +msgstr "请é‡æ–°å¯åŠ¨GeoDa完æˆå®‰è£…更新。" + +#contributors: +msgid "Please right-click or use
" +msgstr "å³é”®æˆ–者使用èœå•" + +#contributors: +msgid "Please select Join Operation with Join Variable." +msgstr "" + +#contributors: +msgid "Please select a binary variable for Local Join Count." +msgstr "" + +#contributors: +msgid "Please select a map layer to apply spatial join to current map (%s):" +msgstr "" + +#contributors: +msgid "Please select a results field." +msgstr "请选择ä¿å­˜ç»“果的字段。" + +#contributors: +msgid "Please select a time variable first, and make sure more than one time steps have been defined." +msgstr "请首先选择一个时间å˜é‡, 并确ä¿å·²å®šä¹‰äº†å¤šä¸ªæ—¶é—´æ­¥é•¿ã€‚" + +#contributors: +msgid "Please select a weights type." +msgstr "请选择一个空间æƒé‡ç±»åž‹ã€‚" + +#contributors: +msgid "Please select an Base field." +msgstr "请选择一个基本字段。" + +#contributors: +msgid "Please select an Event field." +msgstr "请选择一个事件字段。" + +#contributors: +msgid "Please select an Variable field." +msgstr "请选择一个å˜é‡å­—段。" + +#contributors: +msgid "Please select another variable with values more suitable for computing a correlogram." +msgstr "请选择å¦ä¸€ä¸ªå˜é‡è¿›è¡Œéžå‚空间自相关分æžã€‚" + +#contributors: +msgid "Please select at least %d variables." +msgstr "请至少选择%d个å˜é‡ã€‚" + +#contributors: +msgid "Please select at least 2 variables." +msgstr "请选择至少2个å˜é‡ã€‚" + +#contributors: +msgid "Please select at least one variable." +msgstr "" + +#contributors: +msgid "Please select binary variables for Co-location Join Count." +msgstr "" + +#contributors: +msgid "Please select features first." +msgstr "请首先选择需è¦å¯¼å‡ºçš„对象." + +#contributors: +msgid "Please select the layer name to connect:" +msgstr "请选择è¦è¿žæŽ¥çš„æ•°æ®/图层å称:" + +#contributors: +msgid "Please select two binary variables for Bivariate Local Join Count." +msgstr "请选择两个二分(binary)å˜é‡ç”¨äºŽåŒå˜é‡å±€éƒ¨Join Count。" + +#contributors: +msgid "Please setup co-locations first." +msgstr "请先设置Co-location。" + +#contributors: +msgid "Please specify a Weights matrix." +msgstr "请指定一个空间æƒé‡çŸ©é˜µã€‚" + +#contributors: +msgid "Please specify a valid data source name." +msgstr "请指定一个有效的数æ®æºå称。" + +#contributors: +msgid "Please specify distance metric." +msgstr "请指定一个è·ç¦»åº¦é‡ã€‚" + +#contributors: +msgid "Please specify the p-value to be used in tests; \ndefault: p-value = 0.01" +msgstr "请指定在测试中使用的p值;\n默认值:p值= 0.01" + +#contributors: +msgid "Please specify weights in Tools > Weights Manager." +msgstr "请在èœå•ï¼šå·¥å…·>æƒé‡ç®¡ç†å™¨ 中指定空间æƒé‡ã€‚" + +#contributors: +msgid "Please use
Options > Change Variable
to specify a variable." +msgstr "请用
选项>更改å˜é‡
æ¥æŒ‡å®šä¸€ä¸ªå˜é‡ã€‚" + +#contributors: +msgid "Plots:" +msgstr "制图:" + +#contributors: +msgid "Point Color" +msgstr "æ•°æ®ç‚¹é¢œè‰²" + +#contributors: +msgid "Point Radius:" +msgstr "点的åŠå¾„:" + +#contributors: +msgid "Points from Table" +msgstr "从表生æˆç‚¹æ•°æ®" + +#contributors: +msgid "Positive" +msgstr "正相关" + +#contributors: +msgid "Power" +msgstr "幂" + +#contributors: +msgid "Precision threshold" +msgstr "精度阈值" + +#contributors: +msgid "Pred. Val. and Res." +msgstr "预测值与残差" + +#contributors: +msgid "Preferences..." +msgstr "å好设置…" + +#contributors: +msgid "Produce bounding-box file?" +msgstr "生æˆè¾¹ç•Œæ¡†(Bounding-box)文件?" + +#contributors: +msgid "Progress" +msgstr "进度" + +#contributors: msgid "Project Information" msgstr "项目信æ¯" -msgid "The length of an integral numeric field must be at least %d and at most %d. Keeping original value." -msgstr "整数值字段的长度必须至少为%d, 最多为%d。" +#contributors: +msgid "Project file path is empty." +msgstr "项目文件路径为空。" + +#contributors: +msgid "Project filename not specified." +msgstr "未指定项目文件å。" + +#contributors: +msgid "Project to X-Y" +msgstr "投影到X-Y" + +#contributors: +msgid "Project to X-Z" +msgstr "投影到X-Z" + +#contributors: +msgid "Project to Z-Y" +msgstr "投影到Z-Y" + +#contributors: +msgid "Property" +msgstr "属性" + +#contributors: +msgid "Publish Maps and Plots to GeoDa-Web" +msgstr "å‘布地图和图标到GeoDa-Web" + +#contributors: +msgid "Publish to GeoDa-Web" +msgstr "å‘布到GeoDa-Web" + +#contributors: +msgid "Quantile" +msgstr "分ä½æ•°(Quantile)" + +#contributors: +msgid "Quantile Map" +msgstr "分ä½æ•°(Quantile)地图" + +#contributors: +msgid "Queen contiguity" +msgstr "Queen邻接" + +#contributors: +msgid "REDCAP Settings" +msgstr "REDCAP设置" + +#contributors: +msgid "Random Gaussian dist with mean=%s, sd=%s" +msgstr "éšæœºé«˜æ–¯è·ç¦»ï¼Œå‡å€¼ï¼%s,sd=%s" + +#contributors: +msgid "Random Sample" +msgstr "éšæœºé‡‡æ ·æ³•" + +#contributors: +msgid "Random uniform dist on unit interval" +msgstr "å•ä½é—´éš”上的éšæœºå‡åŒ€åˆ†å¸ƒ" + +#contributors: +msgid "Randomization" +msgstr "éšæœºåŒ–" + +#contributors: +msgid "Rate calculation successful." +msgstr "比率计算æˆåŠŸã€‚" + +#contributors: +msgid "Rates" +msgstr "比率" + +#contributors: +msgid "Rates Variable Settings" +msgstr "比率å˜é‡è®¾ç½®" + +#contributors: +msgid "Rates-Calculated Map" +msgstr "比率计算地图" + +#contributors: +msgid "Rates-Calculated Maps" +msgstr "计算比率的地图" + +#contributors: +msgid "Raw Rate" +msgstr "原始比率" + +#contributors: +msgid "Raw Rate Smoothed Variable Settings" +msgstr "原始比率平滑å˜é‡è®¾ç½®" + +#contributors: +msgid "Re&set" +msgstr "é‡ç½®" + +#contributors: +msgid "Read from an ASCII file" +msgstr "从ASCII文件中读å–" + +#contributors: +msgid "Recent" +msgstr "最近访问" + +#contributors: +msgid "Record order specified, but found minimum and maximum observation values of %d and %d which is incompatible with number of observations specified in first line of weights file: %d ." +msgstr "按记录顺åº, 最å°å’Œæœ€å¤§è§‚测值为%d å’Œ%d , 这与空间æƒé‡æ–‡ä»¶ä¸­ç¬¬ä¸€è¡ŒæŒ‡å®šçš„对象数ä¸ä¸€è‡´:%d。" + +#contributors: +msgid "Rectangle" +msgstr "矩形" + +#contributors: +msgid "Redo" +msgstr "é‡åš" + +#contributors: +msgid "Refresh" +msgstr "" + +#contributors: +msgid "Regimes Regression" +msgstr "分区域(Regimes)回归" + +#contributors: +msgid "Regression" +msgstr "回归分æž" + +#contributors: +msgid "Regression Line Color" +msgstr "回归线颜色" + +#contributors: +msgid "Regression Output Text File" +msgstr "回归输出文本文件" + +#contributors: +msgid "Regression Report" +msgstr "回归分æžæŠ¥å‘Š" + +#contributors: +msgid "Remove" +msgstr "删除" + +#contributors: +msgid "Remove Time" +msgstr "删除时间" + +#contributors: +msgid "Rename Space-Time Variable" +msgstr "é‡å‘½å时空å˜é‡" -msgid "Creating Grid" -msgstr "创建网格" +#contributors: +msgid "Rename Variable" +msgstr "é‡å‘½åå˜é‡" -msgid "Open Project" -msgstr "打开项目文件" +#contributors: +msgid "Reset" +msgstr "é‡ç½®" -msgid "ID_DEFAULT_MENU_OPTIONS" -msgstr "ID_DEFAULT_MENU_OPTIONS" +#contributors: +msgid "Reset to default" +msgstr "é‡ç½®ä¸ºé»˜è®¤" -msgid "Univariate Local Join Count" -msgstr "å•å˜é‡å±€éƒ¨Joint Count" +#contributors: +msgid "Reset to system locale information" +msgstr "é‡ç½®ç³»ç»ŸåŒºåŸŸä¿¡æ¯" -msgid "Displayed decimals" -msgstr "显示å°æ•°" +#contributors: +msgid "Reset to system locale successfully. Please re-open current project with system locale." +msgstr "æˆåŠŸé‡ç½®ä¸ºç³»ç»ŸåŒºåŸŸè®¾ç½®ã€‚请é‡æ–°æ‰“开当å‰é¡¹ç›®ä½¿ç”¨ç³»ç»ŸåŒºåŸŸè®¾ç½®ã€‚" -msgid "User name" -msgstr "用户å" +#contributors: +msgid "Resize" +msgstr "调整大å°" -msgid "Points from Table" -msgstr "从表生æˆç‚¹æ•°æ®" +#contributors: +msgid "Resolution(dpi):" +msgstr "分辨率(dpi):" -msgid "Edit Title" -msgstr "编辑标题" +#contributors: +msgid "Result" +msgstr "结果" -msgid "Hierarchical Clustering Settings" -msgstr "层次èšç±»è®¾ç½®" +#contributors: +msgid "Reverse" +msgstr "åå‘" -msgid "Please input password." -msgstr "请输入密ç ã€‚" +#contributors: +msgid "Right" +msgstr "" -msgid "Cluster Maps" -msgstr "èšç±»åœ°å›¾" +#contributors: +msgid "Rook contiguity" +msgstr "Rook邻接" -msgid "This field name already exists (non-integer type). Please input a unique name." -msgstr "此字段å称已存在(éžæ•´æ•°ç±»åž‹ï¼‰ã€‚请输入一个唯一的å称。" +#contributors: +msgid "Root Variable:" +msgstr "æ ¹(Root)å˜é‡:" -msgid "Please choose Period 2." -msgstr "请选择 时段2。" +#contributors: +msgid "Run" +msgstr "è¿è¡Œ" -msgid "Locale for numbers has been setup successfully. Please re-open current project to enable this locale." -msgstr "å·²æˆåŠŸè®¾ç½®åŒºåŸŸè®¾ç½®ã€‚请é‡æ–°æ‰“开当å‰é¡¹ç›®ä»¥å¯ç”¨æ­¤åŒºåŸŸè®¾ç½®ã€‚" +#contributors: +msgid "Run Diff-in-Diff Test" +msgstr "è¿è¡ŒDiff-in-Diff测试" -msgid "Table Name" -msgstr "表å" +#contributors: +msgid "S.D" +msgstr "标准差" -msgid "Can't open output file!" -msgstr "无法打开输出文件!" +#contributors: +msgid "SELECTED" +msgstr "已选中" -msgid "Grid Bounding Box" -msgstr "网格边界" +#contributors: +msgid "SQLite/SpatiaLite (*.sqlite)|*.sqlite" +msgstr "" -msgid "Select From Current Selection" -msgstr "从当å‰å·²é€‰æ‹©å¯¹è±¡ä¸­é€‰å–" +#contributors: +msgid "SVD will be automatically used for PCA since the number of rows is less than the number of columns." +msgstr "由于行数少于列数,SVD将自动用于PCA。" -msgid "Empirical Bayes" -msgstr "ç»éªŒè´å¶æ–¯" +#contributors: +msgid "Sample Autocorrelation" +msgstr "样本自相关" -msgid "Time:" -msgstr "时间:" +#contributors: +msgid "Sample Data" +msgstr "示例数æ®" -msgid "System:" -msgstr "系统:" +#contributors: +msgid "Sample Size:" +msgstr "样本大å°:" -msgid "Language:" -msgstr "语言:" +#contributors: +msgid "Save" +msgstr "ä¿å­˜" -msgid " Bivariate LocalGeary Significance Map" -msgstr " åŒå˜é‡å±€éƒ¨Geary显著性地图" +#contributors: +msgid "Save " +msgstr "ä¿å­˜ " -msgid "Add" -msgstr "添加" +#contributors: +msgid "Save As" +msgstr "å¦å­˜" -msgid "Web" -msgstr "Web" +#contributors: +msgid "Save As Datasource" +msgstr "å¦å­˜æ•°æ®" -msgid "Time Variable Options" -msgstr "时间å˜é‡é€‰é¡¹" +#contributors: +msgid "Save As has been cancelled." +msgstr "“å¦å­˜â€å·²è¢«å–消。" -msgid "About GeoDa" -msgstr "关于GeoDa" +#contributors: +msgid "Save Categories" +msgstr "ä¿å­˜åˆ†ç±»" -msgid "GAL files (*.gal)|*.gal" -msgstr "GAL files (*.gal)|*.gal" +#contributors: +msgid "Save Categories to Table" +msgstr "将自定义分类ä¿å­˜åˆ°è¡¨ä¸­" -msgid "Parallel Coordinate Plot" -msgstr "平行å标图" +#contributors: +msgid "Save Centroids" +msgstr "ä¿å­˜è´¨å¿ƒ" -msgid "Chosen key field '%s' s a time variant. Please choose a non-time variant field as key." -msgstr "选择的键字段 \"%s\" 是一个时间å˜é‡ã€‚请选择一个éžæ—¶é—´å˜é‡å­—段作为键。" +#contributors: +msgid "Save Cluster in Field:" +msgstr "èšç±»ç»“果字段:" -msgid "Horizontal Bins Breaks" -msgstr "ç«–ç›´æ–¹å‘区间(Bins)断点" +#contributors: +msgid "Save Connectivity To Table" +msgstr "将连接性ä¿å­˜åˆ°è¡¨ä¸­" -msgid "Carto Dark" -msgstr "Carto Dark" +#contributors: +msgid "Save Details" +msgstr "ä¿å­˜è¯¦æƒ…" -msgid "LOWESS Smoother Help" -msgstr "LOWESS 平滑器帮助" +#contributors: +msgid "Save Diff-in-Diff Test Results" +msgstr "ä¿å­˜Diff-in-Diff测试结果" -msgid "X-coordinate" -msgstr "Xåæ ‡" +#contributors: +msgid "Save Dummy" +msgstr "ä¿å­˜è™šå˜é‡" -msgid "GeoDa Project File (*.gda)|*.gda" -msgstr "GeoDa Project File (*.gda)|*.gda" +#contributors: +msgid "Save Duplicate Thiessen Polygon Ids" +msgstr "ä¿å­˜é‡å¤çš„泰森多边形ID" -msgid "field name:" -msgstr "字段å:" +#contributors: +msgid "Save Duplicate Thiessen Polygons to Table" +msgstr "å°†é‡å¤çš„泰森多边形ä¿å­˜åˆ°è¡¨ä¸­" -msgid "(Dendrogram is too complex to draw. Please view clustering results in map.)" -msgstr "(树状图太å¤æ‚,请在地图中查看èšç±»ç»“果。)" +#contributors: +msgid "Save Image As" +msgstr "图åƒå¦å­˜ä¸º" -msgid "Iterations:" -msgstr "迭代次数 :" +#contributors: +msgid "Save Image to File" +msgstr "将图åƒä¿å­˜åˆ°æ–‡ä»¶" -msgid "This datasource is not supported. Please export to other datasource that GeoDa supports first." -msgstr "ä¸æ”¯æŒæ­¤æ•°æ®æºã€‚请先导出到 GeoDa 支æŒçš„其他数æ®æºã€‚" +#contributors: +msgid "Save Mean Centers" +msgstr "ä¿å­˜å¹³å‡ä¸­å¿ƒ" -msgid "Breaks with same values were created. Please choose a smaller categories." -msgstr "创建了相åŒçš„断点值。请选择更å°çš„分类。" +#contributors: +msgid "Save OSM roads file" +msgstr "" -msgid "[Please briefly describe what went wrong]" -msgstr "[请简è¦æ述出错的地方]" +#contributors: +msgid "Save OSM roads to file successfully." +msgstr "" -msgid "New Group Details" -msgstr "新建组(时间)å˜é‡" +#contributors: +msgid "Save Project" +msgstr "ä¿å­˜é¡¹ç›®" -msgid "Time Setup" -msgstr "时间设置" +#contributors: +msgid "Save Project File As..." +msgstr "将项目文件ä¿å­˜ä¸ºâ€¦" -msgid "Enter new ID variable name:" -msgstr "输入新IDå˜é‡å:" +#contributors: +msgid "Save Projet File As" +msgstr "将项目文件ä¿å­˜ä¸º" -msgid "Can't get layers from unknown datasource. Please complete the datasource fields." -msgstr "无法从未知数æ®æºèŽ·å–图层。 请填写数æ®æºå­—段。" +#contributors: +msgid "Save Rates" +msgstr "ä¿å­˜æ¯”率值" -msgid "Carto Dark (No Labels)" -msgstr "Carto Dark (No Labels)" +#contributors: +msgid "Save Rates - %s over %s" +msgstr "ä¿å­˜æ¯”率å˜é‡ - %s 比 %s" -msgid "Get a free Nokia/HERE account: " -msgstr "获得å…费诺基亚/HERE地图å¸æˆ·ï¼š " +#contributors: +msgid "Save Regression Results" +msgstr "ä¿å­˜å›žå½’结果" -msgid "Exporting Shape to Boundary" -msgstr "导出矢é‡æ•°æ®çš„边界" +#contributors: +msgid "Save Results" +msgstr "ä¿å­˜ç»“æžœ" -msgid "Pred. Val. and Res." -msgstr "预测值与残差" +#contributors: +msgid "Save Results to Table: " +msgstr "" -msgid "Auto Weighting" -msgstr "自动加æƒ" +#contributors: +msgid "Save Results: HDBScan (Core Distances/Probabilities/Outliers)" +msgstr "" -msgid "Save Diff-in-Diff Test Results" -msgstr "ä¿å­˜Diff-in-Diff测试结果" +#contributors: +msgid "Save Results: Local Join Count stats, " +msgstr "" -msgid "Selection Shape" -msgstr "选择形状" +#contributors: +msgid "Save Results: LocalGeary" +msgstr "ä¿å­˜ç»“æžœ: 局部Geary" -msgid "GeoDa could not find the required weights file." -msgstr "GeoDa找ä¸åˆ°æ‰€éœ€çš„空间æƒé‡æ–‡ä»¶ã€‚" +#contributors: +msgid "Save Results: MDS" +msgstr "ä¿æŒç»“æžœ: MDS" -msgid "Maps and Rates" -msgstr "地图和比率" +#contributors: +msgid "Save Results: Moran's I" +msgstr "ä¿å­˜ç»“æžœ: Moran's I" -msgid "Display Thiessen Polygons" -msgstr "显示泰森多边形" +#contributors: +msgid "Save Selected As" +msgstr "ä¿å­˜é€‰ä¸­çš„为" -msgid "" -"GeoDa could not find the required weights file. \n" -"Please specify weights in Tools > Weights Manager." -msgstr "GeoDa找ä¸åˆ°æ‰€éœ€çš„空间æƒé‡æ–‡ä»¶ã€‚请在:工具>æƒé‡ç®¡ç†å™¨ 中指定æƒé‡ã€‚" +#contributors: +msgid "Save Selection" +msgstr "ä¿å­˜é€‰æ‹©" -msgid "Your Github account (Optional):" -msgstr "您的Githubå¸æˆ·ï¼ˆå¯é€‰ï¼‰ï¼š" +#contributors: +msgid "Save Space-Time Table/Weights" +msgstr "ä¿å­˜æ—¶ç©ºå˜é‡å’Œç©ºé—´æƒé‡" -msgid "Output ASCII file" -msgstr "输出 ASCII 文件" +#contributors: +msgid "Save Spanning Tree" +msgstr "ä¿å­˜ç”Ÿæˆæ ‘" -msgid "Please input Carto App Key." -msgstr "请输入Carto App密钥。" +#contributors: +msgid "Save Spanning Tree to a Weights File" +msgstr "将生æˆæ ‘ä¿å­˜ä¸ºç©ºé—´æƒé‡æ–‡ä»¶" -msgid "custom" -msgstr "自定义" +#contributors: +msgid "Save Statistics file" +msgstr "ä¿å­˜ç»Ÿè®¡æ–‡ä»¶" -msgid "Setup co-locations:" -msgstr "设置相åŒå€¼å åŠ åœ°å›¾:" +#contributors: +msgid "Save Table As CSV File" +msgstr "将表ä¿å­˜ä¸ºCSV文件" -msgid "Connect to Data Source" -msgstr "连接数æ®æº" +#contributors: +msgid "Save Test Results" +msgstr "ä¿å­˜æµ‹è¯•ç»“æžœ" -msgid "New selection" -msgstr "新选择" +#contributors: +msgid "Save Thiessen Polygons" +msgstr "ä¿å­˜æ³°æ£®å¤šè¾¹å½¢" -msgid "Save latitude to field:" -msgstr "ä¿å­˜çº¬åº¦åˆ°å­—段:" +#contributors: +msgid "Save as data source (%s) failed.\n\nDetails:" +msgstr "ä¿å­˜æ•°æ® (%s) 失败。\n\n详细:" -msgid "Create Grid" -msgstr "创建格网数æ®" +#contributors: +msgid "Save data source progress dialog" +msgstr "ä¿å­˜æ•°æ®è¿›åº¦å¯¹è¯æ¡†" -msgid "Parameters" -msgstr "å‚æ•°" +#contributors: +msgid "Save is not supported on current data source type: %s. Please try to use \"File->Save As\" other data source. However, the project file can still be saved as other project file." +msgstr "ä¸æ”¯æŒä¿å­˜å½“å‰æ•°æ®æºç±»åž‹ï¼š%s 。请å°è¯•ä½¿ç”¨â€œæ–‡ä»¶ - >å¦å­˜ä¸ºâ€å…¶ä»–æ•°æ®æºã€‚ 但是,项目文件ä»ç„¶å¯ä»¥ä¿å­˜ä¸ºå…¶ä»–项目文件。" -msgid "Groups:" -msgstr "分组:" +#contributors: +msgid "Save to File" +msgstr "ä¿å­˜åˆ°æ–‡ä»¶" -msgid "Group" -msgstr "分组" +#contributors: +msgid "Save/Show Map" +msgstr "ä¿å­˜/显示地图" -msgid "Obs." -msgstr "对象数" +#contributors: +msgid "Saved successfully." +msgstr "ä¿å­˜æˆåŠŸã€‚" -msgid "Mean" -msgstr "å¹³å‡å€¼" +#contributors: +msgid "Saving data source cancelled." +msgstr "ä¿å­˜æ•°æ®å·²è¢«å–消." -msgid "SVD will be automatically used for PCA since the number of rows is less than the number of columns." -msgstr "由于行数少于列数,SVD将自动用于PCA。" +#contributors: +msgid "Saving data..." +msgstr "ä¿å­˜æ•°æ®â€¦" -msgid "Spatial Rate Smoothed Variable Settings" -msgstr "空间比率平滑å˜é‡è®¾ç½®" +#contributors: +msgid "Saving failed: GeoDa can't save as empty datasource." +msgstr "ä¿å­˜å¤±è´¥ï¼šGeoDaä¸èƒ½ä¿å­˜ç©ºæ•°æ®æºã€‚" -msgid "Please input a field name for saving longitude" -msgstr "请输入一个ä¿å­˜ç»åº¦çš„字段å" +#contributors: +msgid "Saving to data source (%s) failed.\n\nDetails: %s" +msgstr "ä¿å­˜åˆ°æ•°æ®æºï¼ˆ%s)失败。\n\n详情:%s" -msgid "Open Layer:" -msgstr "打开层:" +#contributors: +msgid "Scale Basemap" +msgstr "缩放底图" -msgid "Intervals" -msgstr "é—´éš”" +#contributors: +msgid "Scale Options" +msgstr "缩放选项" -msgid "Error: Chosen theme requires more cateogries than observations." -msgstr "错误:所选主题需è¦æ›´å¤šæ•°é‡çš„分类。" +#contributors: +msgid "Scatter Plot" +msgstr "散点图" -msgid "The categories of the selected variables do not overlap in space. Please select other variables." -msgstr "所选å˜é‡çš„分类在空间中ä¸é‡å ï¼Œè¯·é€‰æ‹©å…¶ä»–å˜é‡ã€‚" +#contributors: +msgid "Scatter Plot - x: %s, y: %s" +msgstr "散点图 - x: %s, y: %s" +#contributors: msgid "Scatter Plot Matrix" msgstr "散点图矩阵" -msgid "<=" -msgstr "<=" - -msgid "Reset to system locale information" -msgstr "é‡ç½®ç³»ç»ŸåŒºåŸŸä¿¡æ¯" +#contributors: +msgid "Scatter Plot Matrix Help" +msgstr "散点图矩阵帮助" -msgid "Equal Intervals" -msgstr "等间隔断点" +#contributors: +msgid "Scatter Plot Matrix Variables Add/Remove" +msgstr "散点图矩阵å˜é‡æ·»åŠ /删除" -msgid "y:" -msgstr "y:" +#contributors: +msgid "Scatter Plot Variables" +msgstr "散点图å˜é‡" -msgid "Project filename not specified." -msgstr "未指定项目文件å。" +#contributors: +msgid "Scatter Plot- x: %s, y: %s" +msgstr "散点图-x:%s, y:%s" -msgid "MDS" -msgstr "多维标度分æž(MDS)" +#contributors: +msgid "Second Variable (Y)" +msgstr "第二å˜é‡ï¼ˆY)" -msgid "Fixed Aspect Ratio Mode" -msgstr "固定长宽比模å¼" +#contributors: +msgid "Second Variable (Y/Latitude)" +msgstr "第二个å˜é‡ (Y/纬度)" -msgid "Only 'gal', 'gwt', 'kwt', 'mat' and 'swm' weights files supported." -msgstr "åªæ”¯æŒ'gal','gwt','kwt','mat'å’Œ'swm’空间æƒé‡æ–‡ä»¶ã€‚" +#contributors: +msgid "Select" +msgstr "选择" -msgid "can't compute" -msgstr "无法计算" +#contributors: +msgid "Select All" +msgstr "全选" -msgid "Clear Selection" -msgstr "清除选择" +#contributors: +msgid "Select All In Range" +msgstr "选择范围内所有对象" -msgid "Output file (*.shp)" -msgstr "输出文件(*.shp)" +#contributors: +msgid "Select All Undefined" +msgstr "选择所有未定义的" -msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name." -msgstr "å˜é‡å \"%s\" é‡å¤æˆ–无效。请é‡æ–°è¾“入一个其他的å˜é‡å。" +#contributors: +msgid "Select All..." +msgstr "选择所有…" -msgid "Axis Option" -msgstr "轴选项" +#contributors: +msgid "Select From Current Selection" +msgstr "从当å‰å·²é€‰æ‹©å¯¹è±¡ä¸­é€‰å–" -msgid "Average Comparison Chart" -msgstr "å¹³å‡å€¼æ¯”较图" +#contributors: +msgid "Select ID Variable" +msgstr "选择IDå˜é‡" -msgid "The number of covariates should be more than the number of observations." -msgstr "å˜é‡æ•°åº”多于观察数。" +#contributors: +msgid "Select ID Variable (Optional)" +msgstr "选择IDå˜é‡ (å¯é€‰)" -msgid "Fixed y-axis scale over time" -msgstr "固定 y 轴范围ä¸éšæ—¶é—´æ”¹å˜" +#contributors: +msgid "Select Neighborless Observations" +msgstr "选择无邻居的对象" -msgid "Selection Variable" +#contributors: +msgid "Select Variables" msgstr "选择å˜é‡" -msgid "The number of observations specified in chosen weights file is incompatible with current Table." -msgstr "空间æƒé‡æ–‡ä»¶ä¸­å®šä¹‰çš„观察对象数与当å‰è¡¨ä¸ä¸€è‡´ã€‚" +#contributors: +msgid "Select Variables (Multi-Selection)" +msgstr "选择å˜é‡ï¼ˆå¤šé€‰ï¼‰" -msgid "Carto" -msgstr "Carto" +#contributors: +msgid "Select a file:" +msgstr "选择文件:" -msgid "GeoDa can't save a Table-only data source as a Geometry enabled data source. Please try to add a geometry layer and then use File->Save As." -msgstr "GeoDa无法将表格数æ®æºä¿å­˜ä¸ºçŸ¢é‡æ•°æ®ã€‚请å°è¯•æ·»åŠ ä¸€ä¸ªçŸ¢é‡å›¾å±‚,然åŽä½¿ç”¨ï¼šæ–‡ä»¶ - >å¦å­˜ä¸ºã€‚" +#contributors: +msgid "Select an existing *.gdb directory, or create an New Folder named *.gdb" +msgstr "选择一个现有的*.gdb目录,或者创建一个å称已*.gdb结尾的新文件夹" -msgid "This is not a shape datasource. Please open a valid shape datasource, e.g. ESRI Shapefile, PostGIS layer..." -msgstr "è¿™ä¸æ˜¯çŸ¢é‡æ•°æ®ã€‚请打开有效的矢é‡æ•°æ®æºï¼Œä¾‹å¦‚ ESRI 矢é‡æ–‡ä»¶ã€PostGIS图层等。" +#contributors: +msgid "Select color scheme:" +msgstr "选择é…色方案:" -msgid "Datasource in project is not valid." -msgstr "项目文件中的数æ®æºæ— æ•ˆã€‚" +#contributors: +msgid "Select datasource" +msgstr "选择数æ®æº" -msgid "Save Spanning Tree to a Weights File" -msgstr "将生æˆæ ‘ä¿å­˜ä¸ºç©ºé—´æƒé‡æ–‡ä»¶" +#contributors: +msgid "Select encoding (optional): " +msgstr "选择编ç (å¯é€‰): " -msgid "Include Variable Names" -msgstr "包å«å˜é‡å" +#contributors: +msgid "Select field is not integer type. Default record order will be used instead." +msgstr "" -msgid "GeoDa can't save changes to this datasource. Please try to use File->Export." -msgstr "GeoDa 无法ä¿å­˜å¯¹æ­¤æ•°æ®æ‰€åšçš„更改。请å°è¯•ä½¿ç”¨ï¼šæ–‡ä»¶-> 导出。" +#contributors: +msgid "Select fields:" +msgstr "选择字段:" -msgid "User Defined" -msgstr "用户定义" +#contributors: +msgid "Select from current selection" +msgstr "从当å‰é€‰æ‹©ä¸­é€‰æ‹©" -msgid "Select ID Variable" -msgstr "选择IDå˜é‡" +#contributors: +msgid "Select key:" +msgstr "选择键:" -msgid "Merge" -msgstr "åˆå¹¶" +#contributors: +msgid "Select layer" +msgstr "选择图层" -msgid "Could not create a new variable. Possibly a read-only data source." -msgstr "无法创建新å˜é‡ã€‚æ•°æ®æºå¯èƒ½ä¸ºåªè¯»ã€‚" +#contributors: +msgid "Select the language" +msgstr "选择语言" -msgid "View Standardized Data" -msgstr "查看标准化的数æ®" +#contributors: +msgid "Select variable " +msgstr "选择å˜é‡ " -msgid "Convert ASCII to SHP" -msgstr "å°†ASCII转æ¢ä¸º.shpæ ¼å¼çš„矢é‡æ–‡ä»¶" +#contributors: +msgid "Select variable for dissolving:" +msgstr "选择进行èžåˆ(dissolve)çš„å˜é‡:" -msgid "Dependent Var (y-axis)" -msgstr "å› å˜é‡ï¼ˆy轴)" +#contributors: +msgid "Select variables to delete " +msgstr "选择需è¦åˆ é™¤çš„å˜é‡å " -msgid "Copy Legend To Clipboard" -msgstr "å¤åˆ¶å›¾ä¾‹åˆ°å‰ªè´´æ¿" +#contributors: +msgid "Select variables:" +msgstr "选择å˜é‡:" -msgid "Select" -msgstr "选择" +#contributors: +msgid "Select, hold CMD for brushing" +msgstr "选中,按CMD键进行动æ€åŒæ­¥é€‰å–" -msgid "Input:" -msgstr "输入:" +#contributors: +msgid "Select, hold CTRL for brushing" +msgstr "选中,按CTRL键进行动æ€åŒæ­¥é€‰å–" -msgid "Scatter Plot" -msgstr "散点图" +#contributors: +msgid "Selectable Fill Color" +msgstr "å¯é€‰å¡«å……颜色" -msgid "records:" -msgstr "记录:" +#contributors: +msgid "Selected" +msgstr "选中" -msgid "Saving data source cancelled." -msgstr "ä¿å­˜æ•°æ®å·²è¢«å–消." +#contributors: +msgid "Selected =" +msgstr "选中=" -msgid "Geography Markup Language (*.gml)|*.gml" -msgstr "Geography Markup Language (*.gml)|*.gml" +#contributors: +msgid "Selected vs. Unselected" +msgstr "选中的与未选中的" -msgid "Error: number of records must be > 0." -msgstr "错误: 记录数必须大于0." +#contributors: +msgid "Selection" +msgstr "选择" -msgid "Weight matrix required for chosen spatial rate method." -msgstr "空间比率地图方法需è¦æŒ‡å®šç©ºé—´æƒé‡çŸ©é˜µã€‚" +#contributors: +msgid "Selection Mode" +msgstr "选择模å¼" -msgid "Bandwidth:" -msgstr "带宽:" +#contributors: +msgid "Selection Shape" +msgstr "选择形状" -msgid "bandwidth" -msgstr "带宽" +#contributors: +msgid "Selection Tool" +msgstr "选择工具" -msgid "Enter a seed value" -msgstr "输入ç§å­å€¼" +#contributors: +msgid "Selection Variable" +msgstr "选择å˜é‡" -msgid "Enter a seed value for random number generator:" -msgstr "输入一个用于生æˆéšæœºæ•°çš„ç§å­ï¼š" +#contributors: +msgid "Send Crash Report" +msgstr "å‘é€å´©æºƒæŠ¥å‘Š" -msgid "The selected database driver is not supported on this platform. Please check GeoDa website for more information about database support and connection." -msgstr "此平å°ä¸æ”¯æŒæ‰€é€‰çš„æ•°æ®åº“驱动程åºã€‚请查看GeoDa网站以获å–关于数æ®åº“支æŒå’Œè¿žæŽ¥çš„更多信æ¯ã€‚" +#contributors: +msgid "September" +msgstr "ä¹æœˆ" -msgid "Regression Report" -msgstr "回归分æžæŠ¥å‘Š" +#contributors: +msgid "Set Association Dialog" +msgstr "图层关è”设置对è¯æ¡†" -msgid "Save Rates" -msgstr "ä¿å­˜æ¯”率值" +#contributors: +msgid "Set Display Precision" +msgstr "设置显示精度" -msgid " and " -msgstr " å’Œ " +#contributors: +msgid "Set Display Precision of Y-Axis" +msgstr "设置Y轴显示精度" -msgid "Geometries have been added to existing Table-only data source. Do you want to save them as a new datasource?" -msgstr "已将几何形状添加到当å‰æ•°æ®ã€‚当å‰æ•°æ®ä¸æ”¯æŒçŸ¢é‡æ ¼å¼ï¼Œæ˜¯å¦å¦å­˜ä¸ºä¸€ä¸ªæ–°çš„æ•°æ®æºï¼Ÿ" +#contributors: +msgid "Set Display Precision on Axes" +msgstr "设置轴上的显示精度" -msgid "Variable Setting" -msgstr "å˜é‡è®¾ç½®" +#contributors: +msgid "Set Display Precision:" +msgstr "设置显示精度:" -msgid "Language" -msgstr "语言" +#contributors: +msgid "Set Highlight Association" +msgstr "设置图层关è”" -msgid "Low" -msgstr "低" +#contributors: +msgid "Set Number Separators" +msgstr "设置数字分隔符" -msgid "Select variable " -msgstr "选择å˜é‡ " +#contributors: +msgid "Set Number Separators in Table" +msgstr "设置表中的数分隔符" -msgid "Maximum Iterations:" -msgstr "最大迭代:" +#contributors: +msgid "Set Number of Permutation" +msgstr "设置置æ¢æ¬¡æ•°" -msgid "Datasource path is empty." -msgstr "æ•°æ®æºè·¯å¾„为空。" +#contributors: +msgid "Set number of CPU cores manually:" +msgstr "手动设置CPU(Cores)æ•°é‡ï¼š" -msgid "Variable Value Error" -msgstr "å˜é‡å€¼é”™è¯¯" +#contributors: +msgid "Set seed for randomization:" +msgstr "设置éšæœºæ“作的ç§å­ï¼š" -msgid "Change Current Map Type" -msgstr "更改当å‰åœ°å›¾ç±»åž‹" +#contributors: +msgid "Set the threshold to bridge the gap between disconnected polygons (often caused by digitizing errors). The value depends on your measurement unit (e.g. 1 foot or 0.0000001 degrees). Use the weights histogram to detect neighborless observations." +msgstr "由于地图数字化时的错误,相邻多边形之间的最å°è·ç¦»å¹¶ä¸ä¸º0。请设置一个åˆé€‚阈值(å³ï¼šé‚»æŽ¥å¤šè¾¹å½¢çš„最å°è·ç¦»ï¼‰æ¥ä¿è¯æ¯ä¸€ä¸ªå¤šè¾¹å½¢éƒ½èƒ½å¤Ÿæ‰¾åˆ°è‡³å°‘一个邻居。这个阈值å–决于你的测é‡å•ä½ï¼ˆä¾‹å¦‚1英尺或0.0000001度)。你å¯ä»¥ä½¿ç”¨æƒé‡ç›´æ–¹å›¾æ¥æŸ¥çœ‹å“ªäº›å¯¹è±¡æ²¡æœ‰ä»»ä½•é‚»å±…。" -msgid "Input significance:" -msgstr "输入显著性值:" +#contributors: +msgid "Set transparency of highlighted objects in selection:" +msgstr "设置高亮对象的é€æ˜Žåº¦ï¼š" -msgid "Please choose a Result field." -msgstr "请选择结果字段。" +#contributors: +msgid "Set transparency of unhighlighted objects in selection:" +msgstr "在选择中设置未çªå‡ºå¯¹è±¡çš„é€æ˜Žåº¦ï¼š" -msgid "Period 1:" -msgstr "时段1:" +#contributors: +msgid "Set value to cell failed." +msgstr "" -msgid "Period 1" -msgstr "时段1" +#contributors: +msgid "Setup Locale of GeoDa Table" +msgstr "区域设置" + +#contributors: +msgid "Setup co-locations:" +msgstr "设置相åŒå€¼å åŠ åœ°å›¾:" + +#contributors: +msgid "Shape" +msgstr "矢é‡æ•°æ®" + +#contributors: +msgid "Shape Centers" +msgstr "形状中心" + +#contributors: +msgid "Show As Conditional Map" +msgstr "显示为æ¡ä»¶åœ°å›¾" + +#contributors: +msgid "Show Axes" +msgstr "显示轴" -msgid "Standard Deviation Map" -msgstr "标准å差地图" +#contributors: +msgid "Show Axes Through Origin" +msgstr "显示通过原点的轴" -msgid "Select key:" -msgstr "选择键:" +#contributors: +msgid "Show CSV Configuration in Merge Data Dialog:" +msgstr "使用åˆå¹¶æ•°æ®æ—¶æ˜¾ç¤ºCSVé…置:" -msgid "Please right-click or use
" -msgstr "å³é”®æˆ–者使用èœå•" +#contributors: +msgid "Show Graph" +msgstr "显示图" -msgid "Options > Change Parameters" -msgstr "选项 > 修改å‚æ•°" +#contributors: +msgid "Show LOWESS Smoother" +msgstr "显示LOWESS平滑器" -msgid "to specify variable and distance parameters." -msgstr "æ¥æŒ‡å®šå˜é‡å’Œè·ç¦»å‚æ•°" +#contributors: +msgid "Show Legend" +msgstr "显示图例" -msgid "autocorrelation is " -msgstr "自相关系数为" +#contributors: +msgid "Show Linear Smoother" +msgstr "显示线性平滑" -msgid " for obs within distance band " -msgstr " 观察对象在è·ç¦»å¸¦ï¼š" +#contributors: +msgid "Show Map Boundary" +msgstr "显示地图边界" -msgid " to " -msgstr " 至 " +#contributors: +msgid "Show Recent/Sample Data panel in Connect Datasource Dialog:" +msgstr "在连接数æ®æºå¯¹è¯æ¡†ä¸­æ˜¾ç¤ºæœ€è¿‘/示例数æ®é¢æ¿ï¼š" -msgid " in range:" -msgstr " 大致在范围:" +#contributors: +msgid "Show Selection and Neighbors" +msgstr "显示当å‰é€‰ä¸­çš„åŠå…¶é‚»å±…" -msgid " = 0 at " -msgstr "=0 时的è·ç¦»çº¦" +#contributors: +msgid "Show Status Bar" +msgstr "显示状æ€æ " -msgid " pairs in distance band " -msgstr "对观察对象在è·ç¦»å¸¦ï¼š" +#contributors: +msgid "Show Vertical Axis" +msgstr "显示垂直轴" -msgid "min dist" -msgstr "最å°è·ç¦»" +#contributors: +msgid "Show connect line" +msgstr "显示关è”连接线" -msgid "max dist" -msgstr "最大è·ç¦»" +#contributors: +msgid "Significance Filter" +msgstr "显著性过滤器" -msgid "Min" -msgstr "最å°å€¼" +#contributors: +msgid "Significance Map" +msgstr "显著性地图" -msgid "Set Number of Permutation" -msgstr "设置置æ¢æ¬¡æ•°" +#contributors: +msgid "Simulated Annealing" +msgstr "模拟退ç«ç®—法" -msgid "Models" -msgstr "模型" +#contributors: +msgid "Skater Settings" +msgstr "Skater设置" -msgid "Save Statistics file" -msgstr "ä¿å­˜ç»Ÿè®¡æ–‡ä»¶" +#contributors: +msgid "Smoother" +msgstr "平滑器" -msgid "Fourth Variable" -msgstr "第四å˜é‡" +#contributors: +msgid "Some calculated values were undefined and this is most likely due to neighborless observations in the weight matrix. Rate calculation successful for observations with neighbors." +msgstr "一些数æ®ä¸ºç©ºæˆ–者未定义,å¯èƒ½æ˜¯ç”±äºŽæƒé‡çŸ©é˜µä¸­æœ‰æ— é‚»åŸŸè§‚测。" -msgid "Bug Report" -msgstr "软件缺陷报告" +#contributors: +msgid "Sort" +msgstr "排åº" -msgid "Can't write output file!" -msgstr "无法写入输出文件!" +#contributors: +msgid "South European Latin-3 (ISO-8859-3)" +msgstr "" -msgid "Add New ID Variable" -msgstr "添加新IDå˜é‡" +#contributors: +msgid "Space-time variables with duplicate name \"%s\" found." +msgstr "找到é‡å¤å称为 \"%s\" 的时空å˜é‡ã€‚" -msgid "Use Power Iteration:" -msgstr "使用幂迭代法:" +#contributors: +msgid "Spatial Constraint:" +msgstr "空间约æŸ:" -msgid "Create Custom Breaks" -msgstr "创建自定义分类" +#contributors: +msgid "Spatial Correlogram" +msgstr "éžå‚空间自相关分æž" -msgid "file size:" -msgstr "文件大å°ï¼š" +#contributors: +msgid "Spatial Empirical Bayes" +msgstr "空间ç»éªŒè´å¶æ–¯" -msgid "Change Outline Color of Neighbors" -msgstr "改å˜é‚»å±…的轮廓颜色" +#contributors: +msgid "Spatial Error" +msgstr "空间误差模型" -msgid "Show Linear Smoother" -msgstr "显示线性平滑" +#contributors: +msgid "Spatial Join" +msgstr "空间åˆå¹¶(Spatial Join)" -msgid "GeoDa Help" +#contributors: +msgid "Spatial Join can not be applied on two points layers. Please select another layer." msgstr "" -"GeoDa\n" -"帮助" - -msgid "Random Gaussian dist with mean=%s, sd=%s" -msgstr "éšæœºé«˜æ–¯è·ç¦»ï¼Œå‡å€¼ï¼%s,sd=%s" -msgid "Enable User Defined Value Range of Y-Axis" -msgstr "å¯ç”¨ç”¨æˆ·å®šä¹‰çš„Y轴值范围" +#contributors: +msgid "Spatial Join can not be applied on unknonwn layers. Please select another layer." +msgstr "" -msgid "Linear Smoother" -msgstr "线性平滑器" +#contributors: +msgid "Spatial Join does not work with Table only datasource." +msgstr "" -msgid "Save Results: Bivariate Local Join Count stats, " -msgstr "ä¿å­˜ç»“æžœ: åŒå˜é‡å±€éƒ¨Join Count统计, " +#contributors: +msgid "Spatial Lag" +msgstr "空间滞åŽæ¨¡åž‹" -msgid "" -"Invalid Weights Information:\n" -" The selected weights file is not valid.\n" -" Please choose another weights file, or use Tools > Weights > Weights Manager to define a valid weights file." -msgstr "" -"无效的æƒé‡ä¿¡æ¯: \n" -"所选æƒé‡æ–‡ä»¶æ— æ•ˆã€‚\n" -"请选择å¦ä¸€ä¸ªæƒé‡æ–‡ä»¶, 或使用:工具 > æƒé‡ > æƒé‡ç®¡ç†å™¨ æ¥å®šä¹‰ä¸€ä¸ªæœ‰æ•ˆçš„æƒé‡æ–‡ä»¶ã€‚" +#contributors: +msgid "Spatial Rate" +msgstr "空间比率" -msgid "Please specify a Weights matrix." -msgstr "请指定一个空间æƒé‡çŸ©é˜µã€‚" +#contributors: +msgid "Spatial Rate Smoothed Variable Settings" +msgstr "空间比率平滑å˜é‡è®¾ç½®" -msgid "Differential Local Moran's I" -msgstr "差分局部Moran’s I" +#contributors: +msgid "Spatial lag and error regressions require symmetric weights (not KNN). You can still use KNN weights to obtain spatial diagnostics for classic regressions." +msgstr "空间滞åŽå’Œè¯¯å·®å›žå½’需è¦å¯¹ç§°æƒé‡ (ä¸æ˜¯KNN)。您ä»ç„¶å¯ä»¥åœ¨ç»å…¸å›žå½’的空间诊断中使用 KNN æƒé‡ã€‚" -msgid "Circle Color" -msgstr "圆圈颜色" +#contributors: +msgid "Special" +msgstr "特殊å˜é‡" -msgid "On line %d of weights file, observation id %d encountered which is out of allowed observation range of 1 through %d." -msgstr "空间æƒé‡æ–‡ä»¶çš„第%d行中指定的id=%d ä¸åœ¨å…许的范围中:1 - %d。" +#contributors: +msgid "Specified id field (%s) not found in currently loaded Table." +msgstr "当å‰åŠ è½½çš„表中找未到指定的ID字段(%s)。" -msgid "Min # per Region:" -msgstr "æ¯åŒºåŸŸæœ€å°å¯¹è±¡æ•°é‡ï¼š" +#contributors: +msgid "Specified key (%d) not found in currently loaded Table." +msgstr "在当å‰åŠ è½½çš„表中未找到指定的键(%d)。" -msgid "Improve Cartogram" -msgstr "加强形å˜åœ°å›¾" +#contributors: +msgid "Specified key (%s) not found in currently loaded Table." +msgstr "指定的键(%s)在当å‰åŠ è½½çš„表中没有找到。" -msgid "Basemap Configuration" -msgstr "底图é…ç½®" +#contributors: +msgid "Specified key value field \"%s\" in weights file contains duplicate values in the currently loaded Table." +msgstr "空间æƒé‡æ–‡ä»¶ä¸­æŒ‡å®šçš„键值字段 \"%s\" 在当å‰çš„æ•°æ®è¡¨ä¸­æœ‰é‡å¤çš„值。" -msgid "to define weights." -msgstr "定义空间æƒé‡ã€‚" +#contributors: +msgid "Specified key value field \"%s\" on first line of weights file is not an integer type in the currently loaded Table." +msgstr "空间æƒé‡æ–‡ä»¶ä¸­ç¬¬ä¸€è¡ŒæŒ‡å®šçš„键值字段“%sâ€ä¸æ˜¯æ•´æ•°ç±»åž‹ã€‚" -msgid "High-Low" -msgstr "高-低" +#contributors: +msgid "Specified key value field \"%s\" on first line of weights file not found in currently loaded Table." +msgstr "在当å‰åŠ è½½çš„表中找ä¸åˆ°ç¬¬ä¸€è¡Œæƒé‡æ–‡ä»¶ä¸­æŒ‡å®šçš„键值字段%s。" -msgid "Color for Category" -msgstr "分类颜色" +#contributors: +msgid "Specify Seed..." +msgstr "指定ç§å­â€¦" -msgid "Differential Moran's I" -msgstr "差分Moran’s I" +#contributors: +msgid "Specify bandwidth" +msgstr "指定带宽" -msgid "(Leave empty for undefined values)" -msgstr "(未定义的值为空)" +#contributors: +msgid "Specify manually" +msgstr "手动指定" -msgid "CSV Contains Variable Names?" -msgstr "CSV是å¦åŒ…å«å˜é‡å?" +#contributors: +msgid "Spectral" +msgstr "è°±èšç±»(Spectral)" -msgid "Smoother" -msgstr "平滑器" +#contributors: +msgid "Spectral Clustering Map (%d clusters)" +msgstr "è°±èšç±»åœ°å›¾ (%d èšç±»)" -msgid "Central European (CP852)" -msgstr "中欧(CP852)" +#contributors: +msgid "Spectral Clustering Settings" +msgstr "è°±èšç±»è®¾ç½®" -msgid "" -".\n" -"Enter a seed value to use between\n" -"0 and " -msgstr "" -".\n" -"输入一个ç§å­å€¼ï¼ŒèŒƒå›´æ˜¯0å’Œ " +#contributors: +msgid "Speed" +msgstr "速度" -msgid "GeoDa was unable to save the file." -msgstr "GeoDa 无法ä¿å­˜è¯¥æ–‡ä»¶ã€‚" +#contributors: +msgid "Stable Version and Bug Fixes Only" +msgstr "稳定版本" -msgid "None of your observations have neighbors. This could be related to digitizing problems, which can be fixed by adjusting the precision threshold." -msgstr "所有观测对象都ä¸èƒ½æ‰¾åˆ°é‚»å±…。 è¿™å¯èƒ½ä¸Žåœ°å›¾æ•°å­—化的问题有关(比如:相邻矢é‡å½¢çŠ¶ä¹‹é—´çš„è·ç¦»ä¸ä¸º0),å¯é€šè¿‡è°ƒæ•´æœ€å°ç²¾åº¦é˜ˆå€¼ï¼ˆå³ï¼šç›¸é‚»çŸ¢é‡å½¢çŠ¶ä¹‹é—´çš„å¯èƒ½çš„最å°è·ç¦»ï¼‰æ¥è§£å†³é—®é¢˜ã€‚" +#contributors: +msgid "Stack" +msgstr "å †å " -msgid "Please choose Periods first." -msgstr "请首先选择时段。" +#contributors: +msgid "Standard Deviation" +msgstr "标准差" -msgid "Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data." -msgstr "å˜é‡%så·²ç»ä¸åœ¨è¡¨ä¸­ã€‚ 请关闭并é‡æ–°æ‰“开回归分æžå¯¹è¯æ¡†ã€‚" +#contributors: +msgid "Standard Deviation Color" +msgstr "标准å差颜色" -msgid "File" -msgstr "文件" +#contributors: +msgid "Standard Deviation Map" +msgstr "标准å差地图" -msgid "file" -msgstr "文件" +#contributors: +msgid "Standardized Data" +msgstr "标准化数æ®" -msgid "The first line should have comma separated number of rows and ID name!" -msgstr "第一行应该有逗å·åˆ†éš”的行数和ID字段å" +#contributors: +msgid "Statistics" +msgstr "统计" -msgid "Table" -msgstr "表格" +#contributors: +msgid "Status Bar" +msgstr "状æ€æ " -msgid "#obs" -msgstr "对象数" +#contributors: +msgid "Stopping criterion for power iteration:" +msgstr "设置幂迭代算法åœæ­¢çš„æ¡ä»¶:" -msgid "#obs:" -msgstr "对象数:" +#contributors: +msgid "Strong" +msgstr "ç²—" -msgid "obs:" -msgstr "对象:" +#contributors: +msgid "Submit Bug Error" +msgstr "æ交错误" -msgid "#obs=" -msgstr "对象数=" +#contributors: +msgid "Submit Bug Report" +msgstr "æ交错误报告" -msgid "#row=" -msgstr "行数=" +#contributors: +msgid "Success" +msgstr "æˆåŠŸ" -msgid "#selected=" -msgstr "选中数é‡=" +#contributors: +msgid "Success / Warning" +msgstr "æˆåŠŸ/警告" -msgid "#hover obs " -msgstr "é¼ æ ‡ä½ç½®å¯¹è±¡ " +#contributors: +msgid "Successful aggregation." +msgstr "èšåˆæˆåŠŸã€‚" -msgid "obs " -msgstr "对象 " +#contributors: +msgid "Suggested field name:" +msgstr "建议字段å:" -msgid "(undefined:" -msgstr "(未定义:" +#contributors: +msgid "Sum" +msgstr "总数" -msgid "from" -msgstr "开始值" +#contributors: +msgid "Summary" +msgstr "总结报告" -msgid "to" -msgstr "结æŸå€¼" +#contributors: +msgid "Synchronize %s with Time Control" +msgstr "å°†%s与时间控制åŒæ­¥" -msgid "% of total" -msgstr "å æ€»é‡ç™¾åˆ†æ¯”" +#contributors: +msgid "System" +msgstr "系统" -msgid "sd from mean" -msgstr "标准差" +#contributors: +msgid "System:" +msgstr "系统:" -msgid "s.d.:" -msgstr "标准差:" +#contributors: +msgid "T&able" +msgstr "表格" -msgid "uniform distribution" -msgstr "å‡åŒ€åˆ†å¸ƒ" +#contributors: +msgid "Table" +msgstr "表格" -msgid "Equal Intervals Map" -msgstr "等间隔地图" +#contributors: +msgid "Table Name" +msgstr "表å" -msgid "Weights Name" -msgstr "空间æƒé‡å称" +#contributors: +msgid "Tabu Length:" +msgstr "ç¦å¿Œæœç´¢ç®—法长度:" -msgid "" -"List of existing ungrouped variables. To group variables by time, move them to the list on the right.\n" -"\n" -"For example, to group Pop80 and Pop90, select them on the left and move them to the right." -msgstr "" -"未分组å˜é‡åˆ—表。 如è¦åˆ›å»ºæ—¶é—´ï¼ˆåˆ†ç»„)å˜é‡ï¼Œè¯·å°†å®ƒä»¬ç§»åˆ°å³ä¾§çš„列表中。\n" -"\n" -"例如,è¦å°†Pop80å’ŒPop90组åˆåˆ›å»ºä¸€ä¸ªæ—¶é—´å˜é‡ï¼Œè¯·åœ¨å·¦ä¾§é€‰æ‹©å®ƒä»¬å¹¶å°†å®ƒä»¬ç§»åˆ°å³ä¾§ã€‚" +#contributors: +msgid "Tabu Search" +msgstr "ç¦å¿Œæœç´¢ç®—法(Tabu)" -msgid "Choose Cateogry Color" -msgstr "选择分类颜色" +#contributors: +msgid "Tabu length for Tabu Search algorithm has to be an integer number larger than 1 (e.g. 85)." +msgstr "ç¦å¿Œæœç´¢ç®—法的ç¦å¿Œé•¿åº¦å¿…须是大于1的整数(例如85)。" -msgid "K Medians" -msgstr "K中ä½æ•°èšç±»" +#contributors: +msgid "Tabu length:" +msgstr "ç¦å¿Œæœç´¢ç®—法长度:" -msgid "K Medoids" -msgstr "K中心èšç±»" +#contributors: +msgid "Target" +msgstr "目标" -msgid "Edit LOWESS Parameters" -msgstr "编辑LOWESSå‚æ•°" +#contributors: +msgid "Target Variable" +msgstr "目标å˜é‡" -msgid "Save Project File As..." -msgstr "将项目文件ä¿å­˜ä¸ºâ€¦" +#contributors: +msgid "Thank you for helping us improve GeoDa with your bug report! \n\nYou can track our response and add screenshots or details here (or email us at spatial@uchicago.edu):" +msgstr "感谢您帮助我们改进 GeoDa 与您的 bug 报告!\n\n您å¯ä»¥è·Ÿè¸ªæˆ‘们的å“应, 并在链接的网页中添加截图或细节 (或å‘é€ç”µå­é‚®ä»¶è‡³ spatial@uchicago.edu):" -msgid " Differential LISA Cluster Map" -msgstr " 差分LISAèšç±»å›¾" +#contributors: +msgid "The GeoDa project file cannot find one or more associated data sources.\n\nDetails: GeoDa is looking for: %s\n\nTip: You can open the .gda project file in a text editor to modify the path(s) of the data source associated with your project." +msgstr "GeoDa项目文件ä¸èƒ½æ‰¾åˆ°ä¸€ä¸ªæˆ–多个相关数æ®æºã€‚\n详情:GeoDa找ä¸åˆ°æ•°æ®ï¼š%s\n\næ示:您å¯ä»¥åœ¨æ–‡æœ¬ç¼–辑器中打开.gda项目文件,以修改与您的项目关è”çš„æ•°æ®æºçš„路径。" -msgid "Yes" -msgstr "是" +#contributors: +msgid "The Table should always be open, although somtimes it is hidden while the project is open. This condition has been violated. Please report this to the program developers." +msgstr "表格应始终打开,尽管在项目打开状æ€æ—¶å®ƒå·²éšè—。这ç§æƒ…况ä¸ç¬¦åˆæ ‡å‡†ï¼Œè¯·å°†æ­¤æŠ¥å‘Šç»™ç¨‹åºå¼€å‘人员。" -msgid "Conditional Map" -msgstr "æ¡ä»¶åœ°å›¾" +#contributors: +msgid "The between-cluster sum of squares:\t" +msgstr "èšç±»é—´ä¹‹æ€»å¹³æ–¹å’Œ(between-cluster S.S.):\t" -msgid "Min cluster size:" -msgstr "èšç±»æœ€å°å¯¹è±¡æ•°(Min Cluster size):" +#contributors: +msgid "The categories of the selected variables do not overlap in space. Please select other variables." +msgstr "所选å˜é‡çš„分类在空间中ä¸é‡å ï¼Œè¯·é€‰æ‹©å…¶ä»–å˜é‡ã€‚" -msgid "Min Samples:" -msgstr "最å°é‡‡æ ·æ•°(Min Samples):" +#contributors: +msgid "The connectivity of selected spatial weights is incomplete, please adjust the spatial weights." +msgstr "所选空间æƒé‡çš„连通性ä¸å®Œæ•´ï¼Œè¯·è°ƒæ•´ç©ºé—´æƒé‡ã€‚" -msgid "\"Method of selecting clusters:" -msgstr "选择生æˆèšç±»æ–¹æ³•:" +#contributors: +msgid "The currently entered threshold value is not a valid number. Please move the slider, or enter a valid number." +msgstr "当å‰è¾“入的阈值ä¸æ˜¯æœ‰æ•ˆçš„数字。请移动滑å—,或输入一个有效的数值。" -msgid "Allow a single cluster:" -msgstr "å…许åªç”Ÿæˆä¸€ä¸ªèšç±»:" +#contributors: +msgid "The currently entered threshold value is not a valid number. Please move the slider, or enter a valid number." +msgstr "" -msgid "No clusters can be found using current parameters." -msgstr "使用当å‰çš„å‚æ•°é…置找ä¸åˆ°ä»»ä½•èšç±»ã€‚" +#contributors: +msgid "The currently entered threshold value of %f is less than %f which is the minimum value for which there will be no neighborless observations (isolates). \n\nPress Yes to proceed anyhow, press No to abort." +msgstr "当å‰è¾“入的阈值%få°äºŽ%f(该值是ä¿è¯æ¯ä¸ªå¯¹è±¡éƒ½æœ‰è‡³å°‘一个邻居的最å°å€¼ï¼‰ã€‚\n\n点击“是â€ç»§ç»­è¿›è¡Œï¼Œç‚¹å‡»â€œå¦â€ä¸­æ­¢ã€‚" -msgid "File merged into Table successfully." -msgstr "文件已æˆåŠŸåˆå¹¶åˆ°è¡¨ä¸­ã€‚" +#contributors: +msgid "The data source is read only. Please try to save as other data source." +msgstr "æ•°æ®æºåªè¯»ï¼Œè¯·å°è¯•å°†å…¶å¯¼å‡ºä¸ºå…¶ä»–å¯è¯»å†™æ•°æ®æ ¼å¼." -msgid "New Categories Title" -msgstr "新建分类标题" +#contributors: +msgid "The first line should have comma separated number of rows and ID name!" +msgstr "第一行应该有逗å·åˆ†éš”的行数和ID字段å" -msgid "Save Test Results" -msgstr "ä¿å­˜æµ‹è¯•ç»“æžœ" +#contributors: +msgid "The geometries will not be saved when exporting to a Table-only data source.\n\nDo you want to continue?" +msgstr "注æ„:导出到表格数æ®æ ¼å¼æ—¶çŸ¢é‡æ•°æ®å°†ä¼šä¸¢å¤± 。\n\nç»§ç»­å¯¼å‡ºå— ï¼Ÿ" -msgid "Save Mean Centers" -msgstr "ä¿å­˜å¹³å‡ä¸­å¿ƒ" +#contributors: +msgid "The last seed used by the pseudo random\nnumber generator was " +msgstr "伪éšæœºæ•°ç”Ÿæˆå™¨ä½¿ç”¨çš„最åŽä¸€ä¸ªç§å­æ˜¯ " -msgid "Specify manually" -msgstr "手动指定" +#contributors: +msgid "The length of a string field must be at least %d and at most %d. Keeping original value." +msgstr "字符串字段的长度必须至少为%d, 最多%d 个。" -msgid " should contains only numbers/letters as IDs. Please choose a different ID Variable." -msgstr " 应该åªåŒ…å«æ•°å­—/å­—æ¯ä½œä¸ºid. 请选择一个ä¸åŒçš„IDå˜é‡." +#contributors: +msgid "The length of an integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "整数值字段的长度必须至少为%d, 最多为%d。" -msgid "Please use
Options > Change Variable
to specify a variable." -msgstr "请用
选项>更改å˜é‡
æ¥æŒ‡å®šä¸€ä¸ªå˜é‡ã€‚" +#contributors: +msgid "The length of an non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "éžæ•´æ•°æ•°å€¼å­—段的长度必须至少为%d, 最多为%d。" -msgid "Copy Image To Clipboard" -msgstr "å¤åˆ¶å›¾åƒåˆ°å‰ªè´´æ¿" +#contributors: +msgid "The length of field name should be between 1 and %d.\nCurrent field length (%d) is not valid" +msgstr "字段å的长度应介于1å’Œ%d 之间。\n当å‰å­—段长度 (%d) 无效" -msgid "Copy" -msgstr "å¤åˆ¶" +#contributors: +msgid "The new theme chosen will no longer include rates smoothing. Please use the Rates submenu to choose a theme with rates again." +msgstr "请使用èœå• 地图->比率计算的地图 从新选择比率平滑" -msgid "Move Down" -msgstr "å‘下移动" +#contributors: +msgid "The number of covariates should be more than the number of observations." +msgstr "å˜é‡æ•°åº”多于观察数。" -msgid "Normal" -msgstr "正常" +#contributors: +msgid "The number of decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "éžæ•´æ•°æ•°å­—字段的å°æ•°ä½æ•°å¿…须至少为%d, 最多为%d。" -msgid "About Precision Threshold" -msgstr "关于精确度阈值" +#contributors: +msgid "The number of displayed decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." +msgstr "éžæ•´æ•°æ•°å­—字段的显示å°æ•°ä½æ•°å¿…须至少为%d, 最多为%d。" -msgid "Regimes Regression" -msgstr "分区域(Regimes)回归" +#contributors: +msgid "The number of identified clusters is less than " +msgstr "识别的èšç±»çš„æ•°ç›®å°äºŽ " -msgid "Bivariate Local Join Count " -msgstr "åŒå˜é‡å±€éƒ¨Joint Count " +#contributors: +msgid "The number of observations specified in chosen weights file is %d, but the number in the current Table is %d, which is incompatible." +msgstr "在所选æƒé‡æ–‡ä»¶ä¸­æŒ‡å®šçš„观察值的数é‡æ˜¯%d,但当å‰è¡¨ä¸­çš„数字是%d,它ä¸å…¼å®¹ã€‚" -msgid "Type 2" -msgstr "Type 2" +#contributors: +msgid "The number of observations specified in chosen weights file is incompatible with current Table." +msgstr "空间æƒé‡æ–‡ä»¶ä¸­å®šä¹‰çš„观察对象数与当å‰è¡¨ä¸ä¸€è‡´ã€‚" -msgid "Save longitude to field:" -msgstr "ä¿å­˜ç»åº¦åˆ°å­—段:" +#contributors: +msgid "The number of records in current table is larger than the number of records in import table. Please choose import table >= %d records" +msgstr "当å‰è¡¨ä¸­çš„记录数大于导入表中的记录数。请选择至少有 %d æ¡è®°å½•çš„表导入" -msgid "Cyrillic (ISO-8859-5)" -msgstr "西里尔(ISO-855-5)" +#contributors: +msgid "The original datasource %s is not a valid file. GeoDa \"Save\" only works on file datasource." +msgstr "原始数æ®æº%s ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„文件。\"ä¿å­˜\" 功能仅适用于文件数æ®æºã€‚" -msgid "Use Scientific Notation" -msgstr "使用科学记数法" +#contributors: +msgid "The ratio of between to total sum of squares:\t" +msgstr "èšç±»é—´ä¹‹æ€»å¹³æ–¹å’Œ / 总平方和 :\t" -msgid "Group 1:" -msgstr "第1组:" +#contributors: +msgid "The sample size for random sampling is too small.\nPlease increase the number of iterations." +msgstr "éšæœºæŠ½æ ·çš„样本数太å°ã€‚请增加迭代次数。" -msgid "Raw Rate Smoothed Variable Settings" -msgstr "原始比率平滑å˜é‡è®¾ç½®" +#contributors: +msgid "The selected database driver is not supported on this platform. Please check GeoDa website for more information about database support and connection." +msgstr "此平å°ä¸æ”¯æŒæ‰€é€‰çš„æ•°æ®åº“驱动程åºã€‚请查看GeoDa网站以获å–关于数æ®åº“支æŒå’Œè¿žæŽ¥çš„更多信æ¯ã€‚" -msgid "choose a variable" -msgstr "选择å˜é‡" +#contributors: +msgid "The selected group variable should contains %d items. Please modify the group variable in Time Editor, or select another variable." +msgstr "" -msgid "Choose Weights" -msgstr "选择空间æƒé‡" +#contributors: +msgid "The selected group variable should contains %d items. Please modify the group variable in Time->Time Editor, or select another variable." +msgstr "所选的时间(分组)å˜é‡åº”该有%d项。请通过 时间->时间编辑器 æ¥ä¿®æ”¹è¯¥æ—¶é—´(分组)å˜é‡ï¼Œæˆ–指定其他的时间(分组)å˜é‡ã€‚" -msgid "Adaptive bandwidth" -msgstr "自适应带宽" +#contributors: +msgid "The selected variable %s is not valid. If it's a grouped variable, please modify it in Time->Time Editor. Or please select another variable." +msgstr "所选å˜é‡%s无效。如果它是一个时间(分组)å˜é‡ï¼Œè¯·åœ¨Time-> Time Editor中进行修改。或者请选择å¦ä¸€ä¸ªå˜é‡ã€‚" -msgid "The number of decimal places for a non-integral numeric field must be at least %d and at most %d. Keeping original value." -msgstr "éžæ•´æ•°æ•°å­—字段的å°æ•°ä½æ•°å¿…须至少为%d, 最多为%d。" +#contributors: +msgid "The selected variable is not numeric. Please select another variable." +msgstr "所选å˜é‡ä¸æ˜¯æ•°å€¼ç±»åž‹ï¼Œè¯·é€‰æ‹©å…¶ä»–å˜é‡ã€‚" -msgid "Checking Symmetry..." -msgstr "检查对称性……" +#contributors: +msgid "The set of values in the import key fields has no match in current table. Please choose keys with matching sets of values." +msgstr "导入的键字段的值集在当å‰è¡¨ä¸­æ²¡æœ‰åŒ¹é…项。请选择具有匹é…值的字段。" -msgid "Kernel function" -msgstr "核函数" +#contributors: +msgid "The total sum of squares:\t" +msgstr "总平方和:\t" -msgid "Cyrillic (Windows-1251)" -msgstr "西里尔(Windows 1251)" +#contributors: +msgid "The total within-cluster sum of squares:\t" +msgstr "The total within-cluster sum of squares:\t" -msgid "Multi-Variable Settings" -msgstr "多å˜é‡è®¾ç½®" +#contributors: +msgid "Themeless" +msgstr "无主题" -msgid "Error: \"%s\" already exists in Table, please specify a different name." -msgstr "错误:表中已ç»å­˜åœ¨â€œ%sâ€ï¼Œè¯·æŒ‡å®šä¸€ä¸ªä¸åŒçš„å称。" +#contributors: +msgid "Themeless Map" +msgstr "无主题地图" -msgid "minimum" -msgstr "最å°å€¼" +#contributors: +msgid "There are spatial objects being counted more than once. Please check the results." +msgstr "" -msgid "Y" -msgstr "Y" +#contributors: +msgid "There are unsaved data source or weights/time definition changes." +msgstr "有未ä¿å­˜çš„æ•°æ®ï¼Œç©ºé—´æƒé‡æˆ–定义的时间å˜é‡." -msgid "Please choose Period 1." -msgstr "请选择时段1。" +#contributors: +msgid "There is a view could not be closed. Please manually close and try again." +msgstr "有一个视图ä¸èƒ½å…³é—­ã€‚请手动关闭并é‡è¯•ã€‚" -msgid "Diagonal weights = 1" -msgstr "对角线æƒé‡å€¼ï¼1" +#contributors: +msgid "There is an error during PCA calculation. Please check if the data is valid." +msgstr "计算PCA过程中出现错误。请检查数æ®æ˜¯å¦æœ‰æ•ˆã€‚" -msgid "(Duplicate field name)" -msgstr "(字段åé‡å¤)" +#contributors: +msgid "There is at least one neighborless observation. Check the islands in weights histogram and linked map." +msgstr "" -msgid "Display Slope Values" -msgstr "显示斜率值" +#contributors: +msgid "There is at least one neighborless observation. Check the weights histogram and linked map to see if the islands are real or not. If not, adjust the distance threshold (points) or the precision threshold (polygons)." +msgstr "至少有一个无邻域观测。检查æƒé‡ç›´æ–¹å›¾å’Œé“¾æŽ¥çš„地图, 看看这些孤立值是å¦çœŸå®žã€‚如果没有, 则调整è·ç¦»é˜ˆå€¼ (点) 或精度阈值 (多边形)。" -msgid "Histogram" -msgstr "直方图" +#contributors: +msgid "There is at least one view could not be closed. Please manually close and try again." +msgstr "至少有一个窗å£æ— æ³•å…³é—­ã€‚请手动关闭并é‡è¯•ã€‚" -msgid "Open weights file" -msgstr "打开空间æƒé‡æ–‡ä»¶" +#contributors: +msgid "There is at least one view open that depends on this matrix. Ok to close these views and remove?" +msgstr "至少有一个打开的窗å£ä½¿ç”¨äº†è¯¥çŸ©é˜µã€‚确定关闭这些窗å£å¹¶åˆ é™¤è¯¥çŸ©é˜µï¼Ÿ" -msgid "Hide Map" -msgstr "éšè—地图" +#contributors: +msgid "There is one other view open that depends on this matrix. Ok to close this view and remove?" +msgstr "有其他的窗å£ä¾èµ–于这个矩阵。 是å¦å…³é—­è¿™äº›çª—å£å¹¶ç»§ç»­ï¼Ÿ" -msgid "Rates-Calculated Maps" -msgstr "计算比率的地图" +#contributors: +msgid "There was a problem associating the weights file." +msgstr "å…³è”空间æƒé‡æ–‡ä»¶æ—¶å‡ºçŽ°é—®é¢˜ã€‚" -msgid "Time Player" -msgstr "时间播放器" +#contributors: +msgid "There was a problem generating voronoi contiguity neighbors. Please report this." +msgstr "生æˆVoronoi空间æƒé‡æ—¶å‡ºçŽ°é—®é¢˜ã€‚请报告该错误。" -msgid "There are unsaved data source or weights/time definition changes." -msgstr "有未ä¿å­˜çš„æ•°æ®ï¼Œç©ºé—´æƒé‡æˆ–定义的时间å˜é‡." +#contributors: +msgid "There was a problem reading the layer" +msgstr "读å–图层时出现问题" -msgid "Distance Function:" -msgstr "è·ç¦»å‡½æ•°ï¼š" +#contributors: +msgid "There was a problem reading the table" +msgstr "读å–表时出现问题" -msgid "Project to Z-Y" -msgstr "投影到Z-Y" +#contributors: +msgid "There was a problem requesting the weights file." +msgstr "请求æƒé‡æ–‡ä»¶æ—¶å‡ºçŽ°é—®é¢˜ã€‚" -msgid "3 Iteration" -msgstr "3次迭代" +#contributors: +msgid "These are the row numbers of the records without location information." +msgstr "这些是没有ä½ç½®ä¿¡æ¯çš„è¡Œå·ã€‚" +#contributors: msgid "Thiessen Polygons" msgstr "泰森多边形" -msgid "Conditional Map Variables" -msgstr "æ¡ä»¶åœ°å›¾å˜é‡" +#contributors: +msgid "Third Variable (Z)" +msgstr "第三å˜é‡ï¼ˆZ)" -msgid "When \"all times\" selected for either variable, result field must also be \"all times.\"" -msgstr "当选择å˜é‡çš„时间为“all timesâ€æ—¶, ä¿å­˜ç»“果的字段也必须选“all timesâ€." +#contributors: +msgid "This datasource is not supported. Please export to other datasource that GeoDa supports first." +msgstr "ä¸æ”¯æŒæ­¤æ•°æ®æºã€‚请先导出到 GeoDa 支æŒçš„其他数æ®æºã€‚" -msgid "Please input Carto User Name." -msgstr "请输入Carto用户å。" +#contributors: +msgid "This field name already exists (non-integer type). Please input a unique name." +msgstr "此字段å称已存在(éžæ•´æ•°ç±»åž‹ï¼‰ã€‚请输入一个唯一的å称。" -msgid "Preferences..." -msgstr "å好设置…" +#contributors: +msgid "This format is not supported." +msgstr "ä¸æ”¯æŒæ­¤æ ¼å¼ã€‚" -msgid "Arabic (Windows-1256)" -msgstr "阿拉伯语(Windows 1256)" +#contributors: +msgid "This is the list of existing grouped variables. As new groups are created, they will appear on this list. You can open an existing .gda file and edit it here." +msgstr "新的分组(时间)å˜é‡åˆ›å»ºåŽï¼Œå°†å‡ºçŽ°åœ¨æ­¤åˆ—表中。您å¯ä»¥æ‰“开现有的.gda文件并在此处进行编辑。" -msgid "Save Projet File As" -msgstr "将项目文件ä¿å­˜ä¸º" +#contributors: +msgid "This view currently supports data with at most 1000 observations. The Spatial Correlogram Scatterplot plots distances between all pairs of observations. The current data set has %d observations and %d unordered pairs of observations." +msgstr "此视图目å‰æ”¯æŒæœ€å¤š1000个观察对象。空间 Correlogram 散点图绘制所有的对象两两之间的è·ç¦»ã€‚当å‰æ•°æ®é›†æœ‰%d 个对象产生%d 对è·ç¦»ã€‚" -msgid "Vietnamese (Windows-1258)" -msgstr "越å—语(Windows 1258)" +#contributors: +msgid "Thousands:" +msgstr "åƒä½æ•°ï¼š" -msgid "Explore" -msgstr "探索分æž" +#contributors: +msgid "Tim&e" +msgstr "时间编辑" -msgid "" -"Thank you for helping us improve GeoDa with your bug report! \n" -"\n" -"You can track our response and add screenshots or details here (or email us at spatial@uchicago.edu):" -msgstr "" -"感谢您帮助我们改进 GeoDa 与您的 bug 报告!\n" -"\n" -"您å¯ä»¥è·Ÿè¸ªæˆ‘们的å“应, 并在链接的网页中添加截图或细节 (或å‘é€ç”µå­é‚®ä»¶è‡³ spatial@uchicago.edu):" +#contributors: +msgid "Time" +msgstr "时间分æž" -msgid "Weights file/format is not valid." -msgstr "空间æƒé‡æ–‡ä»¶/æ ¼å¼æ— æ•ˆâ€ã€‚" +#contributors: +msgid "Time Editor" +msgstr "时间编辑器" -msgid "Information" -msgstr "ä¿¡æ¯" +#contributors: +msgid "Time Player" +msgstr "时间播放器" -msgid "Regression" -msgstr "回归分æž" +#contributors: +msgid "Time Setup" +msgstr "时间设置" -msgid "Warning: loss data" -msgstr "警告:数æ®å¯èƒ½ä¼šä¸¢å¤±" +#contributors: +msgid "Time Variable Options" +msgstr "时间å˜é‡é€‰é¡¹" -msgid "Adjust Value Range of Y-Axis" -msgstr "调整Y轴的范围" +#contributors: +msgid "Time:" +msgstr "时间:" -msgid "Type 1a" -msgstr "1aåž‹" +#contributors: +msgid "Title of Visualization" +msgstr "å¯è§†åŒ–标题" -msgid "Loading data..." -msgstr "加载数æ®ä¸­..." +#contributors: +msgid "Tools" +msgstr "工具" -msgid "# Max Iteration:" -msgstr "最大迭代次数:" +#contributors: +msgid "Top" +msgstr "" -msgid "Excess Risk" -msgstr "超é¢é£Žé™©åº¦(Excess Risk)" +#contributors: +msgid "Transformation:" +msgstr "æ•°æ®è½¬æ¢:" -msgid "Hebrew (ISO-8859-8-1)" -msgstr "希伯æ¥è¯­ï¼ˆISO-8598-1)" +#contributors: +msgid "Transformation: " +msgstr "æ•°æ®è½¬æ¢: " -msgid ">" -msgstr ">" +#contributors: +msgid "Transformation:\t" +msgstr "æ•°æ®è½¬æ¢:\t" -msgid "" -"Differential Moran's I tests whether the change in a variable over time is spatially correlated.\n" -"\n" -"Please first group variables by time period: Select Time --> Time Editor." +#contributors: +msgid "Travel Distances Tool" msgstr "" -"差分Moran’s I 检验å˜é‡éšæ—¶é—´çš„å˜åŒ–是å¦åœ¨ç©ºé—´ä¸Šå­˜åœ¨ç›¸å…³æ€§ã€‚\n" -"\n" -"请首先按时间段对å˜é‡è¿›è¡Œåˆ†ç»„:选择“时间†- >“时间编辑器â€ã€‚" -msgid "Error: Base values contain non-positive numbers which will result in undefined values." -msgstr "错误: 有基值(Base value)为负数, 这将导致计算结果出现未定义的值或空值。" +#contributors: +msgid "Turkish (Windows-1254)" +msgstr "" +#contributors: +msgid "Turkish Latin-5 (ISO-8859-9)" +msgstr "土耳其拉ä¸5å·ï¼ˆISO-859ï¼9)" + +#contributors: msgid "Type" msgstr "类型" -msgid "type" -msgstr "类型" +#contributors: +msgid "Type 1" +msgstr "Type 1" -msgid "kernel method" -msgstr "核函数" +#contributors: +msgid "Type 1a" +msgstr "1aåž‹" -msgid "Fail in reading the Boundary file: at polygon-%d" -msgstr "读å–边界文件失败:在多边形-%d" +#contributors: +msgid "Type 2" +msgstr "Type 2" -msgid "GeoDa Preference Setup" -msgstr "GeoDaå好设置" +#contributors: +msgid "Type 2a" +msgstr "Type 2a" -msgid "Scatter Plot- x: %s, y: %s" -msgstr "散点图-x:%s, y:%s" +#contributors: +msgid "Unable to overwrite " +msgstr "无法覆盖 " -msgid "New Map Coordinates" -msgstr "新地图åæ ‡" +#contributors: +msgid "Undefined" +msgstr "未定义/空值" -msgid "All Rights Reserved" -msgstr "All Rights Reserved" +#contributors: +msgid "Undo" +msgstr "撤销" -msgid "Z" -msgstr "Z" +#contributors: +msgid "Ungrouped Variables" +msgstr "未分组å˜é‡" -msgid "Please input database host." -msgstr "请输入数æ®åº“主机。" +#contributors: +msgid "Unicode (UTF-16LE)" +msgstr "" -msgid "Select the language" -msgstr "选择语言" +#contributors: +msgid "Unicode (UTF-8)" +msgstr "Unicode(UTF-8)" -msgid "" -"The currently entered threshold value of %f is less than %f which is the minimum value for which there will be no neighborless observations (isolates). \n" -"\n" -"Press Yes to proceed anyhow, press No to abort." -msgstr "" -"当å‰è¾“入的阈值%få°äºŽ%f(该值是ä¿è¯æ¯ä¸ªå¯¹è±¡éƒ½æœ‰è‡³å°‘一个邻居的最å°å€¼ï¼‰ã€‚\n" -"\n" -"点击“是â€ç»§ç»­è¿›è¡Œï¼Œç‚¹å‡»â€œå¦â€ä¸­æ­¢ã€‚" +#contributors: +msgid "Unique Values" +msgstr "唯一值" -msgid "Show As Conditional Map" -msgstr "显示为æ¡ä»¶åœ°å›¾" +#contributors: +msgid "Unique Values Map" +msgstr "唯一值地图" -msgid "Cumulative" -msgstr "累积" +#contributors: +msgid "Univariate" +msgstr "å•å˜é‡" -msgid "" -"The last seed used by the pseudo random\n" -"number generator was " -msgstr "伪éšæœºæ•°ç”Ÿæˆå™¨ä½¿ç”¨çš„最åŽä¸€ä¸ªç§å­æ˜¯ " +#contributors: +msgid "Univariate Local Geary" +msgstr "å•å˜é‡å±€éƒ¨Geary" -msgid "A project file contains extra information not directly stored in the data source such as variable order and grouping." -msgstr "项目文件包å«ä¸ç›´æŽ¥å­˜å‚¨åœ¨æ•°æ®æºä¸­çš„é¢å¤–ä¿¡æ¯, 例如:å˜é‡é¡ºåºå’Œæ—¶é—´ï¼ˆåˆ†ç»„)å˜é‡." +#contributors: +msgid "Univariate Local Join Count" +msgstr "å•å˜é‡å±€éƒ¨Joint Count" -msgid "Open Datasource:" -msgstr "打开数æ®æºï¼š" +#contributors: +msgid "Univariate Local Moran's I" +msgstr "å•å˜é‡å±€éƒ¨Moran’s I" -msgid "Tools" -msgstr "工具" +#contributors: +msgid "Univariate Moran's I" +msgstr "å•å˜é‡Moran’s I" -msgid "Parallel Coordinate Plot: " -msgstr "平行å标图: " +#contributors: +msgid "Unknow exception. Please contact GeoDa support." +msgstr "未知异常。请è”ç³»GeoDa获å–帮助。" -msgid "Bivariate Moran's I (%s): %s and lagged %s" -msgstr "åŒå˜é‡Moran's I(%s):%s和滞åŽ%s" +#contributors: +msgid "Unselected" +msgstr "未选中" -msgid "Please fix the grid bounding box." -msgstr "请修å¤ç½‘格边界。" +#contributors: +msgid "Unselected =" +msgstr "未选中=" -msgid "Your GeoDa is already up-to-date." -msgstr "您的GeoDa版本已ç»æ˜¯æœ€æ–°çš„。" +#contributors: +msgid "Up" +msgstr "å‘上移动" -msgid "Password" -msgstr "密ç " +#contributors: +msgid "Update GeoDa completed" +msgstr "æ›´æ–°GeoDa完æˆ" -msgid "MDS Settings" -msgstr "多维标度分æž(MDS)设置" +#contributors: +msgid "Update GeoDa failed" +msgstr "æ›´æ–°GeoDa失败" -msgid "Database Name/Instance" -msgstr "æ•°æ®åº“å称/实例" +#contributors: +msgid "Update project information failed. \n\nDetails: The layer information defined in project file does no match opened datasource." +msgstr "更新项目信æ¯å¤±è´¥ã€‚\n\n详细信æ¯ï¼šé¡¹ç›®æ–‡ä»¶ä¸­å®šä¹‰çš„图层信æ¯ä¸Žæ‰“开的数æ®æºä¸åŒ¹é…。" -msgid "" -"Your table cannot be merged because the key field \"%s\" is not unique. \n" -"It contains undefined or duplicate values.\n" -"\n" -"Details:" -msgstr "" -"无法åˆå¹¶è¡¨, 因为键字段 \"%s\" ä¸æ˜¯å”¯ä¸€çš„。\n" -"它包å«æœªå®šä¹‰çš„或é‡å¤çš„值。\n" -"\n" -"详情:" +#contributors: +msgid "Upper outlier" +msgstr "高异常值" -msgid "Save Categories to Table" -msgstr "将自定义分类ä¿å­˜åˆ°è¡¨ä¸­" +#contributors: +msgid "Upper-right corner" +msgstr "å³ä¸Šè§’" -msgid "Bivariate Moran Variable Settings" -msgstr "二元Moranå˜é‡è®¾ç½®" +#contributors: +msgid "Use GPU to Accelerate computation:" +msgstr "使用GPUæ¥åŠ é€Ÿè®¡ç®—(部分功能)" -msgid "Error: field names listed in wrong format." -msgstr "错误: 字段å称以错误的格å¼åˆ—出。" +#contributors: +msgid "Use Power Iteration method:\tMax iterations=" +msgstr "使用幂迭代法:\t最大迭代次数=" -msgid "Data Point" -msgstr "æ•°æ®ç‚¹" +#contributors: +msgid "Use Power Iteration:" +msgstr "使用幂迭代法:" -msgid "New Project Filename" -msgstr "新建项目文件å" +#contributors: +msgid "Use Scientific Notation" +msgstr "使用科学记数法" -msgid "High-High" -msgstr "高-高" +#contributors: +msgid "Use Specified Seed" +msgstr "使用指定的éšæœºæ•°ç§å­" -msgid "Background" -msgstr "背景" +#contributors: +msgid "Use Transparent Legend Background" +msgstr "图例使用é€æ˜Žçš„背景" -msgid "Remove" -msgstr "删除" +#contributors: +msgid "Use Weights:" +msgstr "使用空间æƒé‡ï¼š" -msgid "Load" -msgstr "打开" +#contributors: +msgid "Use bounding box of input datasource" +msgstr "使用输入数æ®çš„边框" -msgid "Univariate Local Moran's I" -msgstr "å•å˜é‡å±€éƒ¨Moran’s I" +#contributors: +msgid "Use classic yellow cross-hatching to highlight selection in maps:" +msgstr "使用ç»å…¸çš„黄色交å‰é˜´å½±æ¥é«˜äº®åœ°å›¾ä¸­çš„选中的对象:" -msgid "GeoDa Bug Report Dialog" -msgstr "GeoDa错误报告对è¯æ¡†" +#contributors: +msgid "Use existing field name" +msgstr "使用现有字段å" -msgid "Apply kernel to diagonal weights" -msgstr "将核函数应用于对角线æƒé‡å€¼" +#contributors: +msgid "Use geometric centroids" +msgstr "使用几何质心" -msgid "kernel to diagonal" -msgstr "核函数应用于对角线æƒé‡å€¼" +#contributors: +msgid "Use geometric centroids (weighting): \n" +msgstr "使用几何质心加æƒ: \n" -msgid "Scatter Plot Matrix Variables Add/Remove" -msgstr "散点图矩阵å˜é‡æ·»åŠ /删除" +#contributors: +msgid "Use inverse distance?" +msgstr "使用åè·ç¦»ï¼Ÿ" -msgid "Hide system table in SQLITE connection:" -msgstr "在SQLite连接中éšè—系统表:" +#contributors: +msgid "Use max knn distance as bandwidth" +msgstr "使用最大KNNè·ç¦»ä½œä¸ºå¸¦å®½" -msgid "Please input a valid url address." -msgstr "请输入有效的URL地å€ã€‚" +#contributors: +msgid "Use outline + motorway(~bbox) of input datasource" +msgstr "" -msgid " Differential Local Geary Cluster Map" -msgstr " 差分局部Gearyèšç±»å›¾" +#contributors: +msgid "Use outline of input datasource" +msgstr "" -msgid "Japanese (EUC-JP)" -msgstr "日语(EUC-JP)" +#contributors: +msgid "Use row-standardized weights" +msgstr "使用行标准化空间æƒé‡" -msgid "No fields found!" -msgstr "没有找到字段!" +#contributors: +msgid "Use selected as specified alpha level" +msgstr "使用上é¢é€‰ä¸­çš„值为alpha值" -msgid "K Means" -msgstr "Kå‡å€¼èšç±»" +#contributors: +msgid "Use specified seed:" +msgstr "使用指定的ç§å­ï¼š" -msgid "Axis Selection" -msgstr "轴选择" +#contributors: +msgid "Use the bounding box of shape datasource" +msgstr "使用数æ®çš„边界框(bbox)" -msgid "Axes Through Origin" -msgstr "通过原点的轴" +#contributors: +msgid "User Defined" +msgstr "用户定义" -msgid "Rename Space-Time Variable" -msgstr "é‡å‘½å时空å˜é‡" +#contributors: +msgid "User Name" +msgstr "用户å" -msgid "Custom Inference" -msgstr "自定义推断" +#contributors: +msgid "User name" +msgstr "用户å" -msgid "Independent Var (x-axis)" -msgstr "自å˜é‡ï¼ˆx轴)" +#contributors: +msgid "Value" +msgstr "值" -msgid "Correlogram" -msgstr "éžå‚空间自相关分æž(Correlogram)" +#contributors: +msgid "Values assigned to target field successfully." +msgstr "æˆåŠŸä¸ºç›®æ ‡å­—段赋值。" -msgid "Correlogram Parameters" -msgstr "éžå‚空间自相关分æž" +#contributors: +msgid "Var Calc Container" +msgstr "Var Calc Container" -msgid "Correlogram Parameters Help" -msgstr "éžå‚空间自相关分æžè®¾ç½®å¸®åŠ©" +#contributors: +msgid "Variable" +msgstr "å˜é‡" -msgid "Euclidean Distance" -msgstr "欧å¼è·ç¦»" +#contributors: +msgid "Variable %s at time %d could not be standardized." +msgstr "å˜é‡ %s 在时间段 %d 无法被标准化" -msgid "Arc Distance" -msgstr "弧度è·ç¦»" +#contributors: +msgid "Variable %s at time %d is a placeholer" +msgstr "å˜é‡ %s 在时间段 %d ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆå˜é‡" + +#contributors: +msgid "Variable %s is a placeholer" +msgstr "å˜é‡ %s ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆå˜é‡" + +#contributors: +msgid "Variable %s is a time-grouped variable. Please ungroup this variable to delete." +msgstr "å˜é‡%s 是一个时间å˜é‡ã€‚ 请å–消定义该时间å˜é‡åŽå†è¿›è¡Œåˆ é™¤ã€‚" + +#contributors: +msgid "Variable %s is no longer in the Table. Please close and reopen the Regression Dialog to synchronize with Table data." +msgstr "å˜é‡%så·²ç»ä¸åœ¨è¡¨ä¸­ã€‚ 请关闭并é‡æ–°æ‰“开回归分æžå¯¹è¯æ¡†ã€‚" + +#contributors: +msgid "Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data." +msgstr "å˜é‡%så·²ä¸åœ¨è¡¨ä¸­ã€‚ 请关闭并é‡æ–°æ‰“开此对è¯æ¡†ä»¥ä¸Žè¡¨æ•°æ®åŒæ­¥ã€‚" -msgid " mi" -msgstr " 英里" +#contributors: +msgid "Variable %s is not valid. Please select another variable." +msgstr "å˜é‡%s无效。请选择å¦ä¸€ä¸ªå˜é‡ã€‚" -msgid " km" -msgstr " 公里" +#contributors: +msgid "Variable / Constant" +msgstr "å˜é‡/常é‡" -msgid "OK to Exit?" -msgstr "确定退出?" +#contributors: +msgid "Variable %s is specified. " +msgstr "å˜é‡%s已被指定. " -msgid "fields:" -msgstr "字段:" +#contributors: +msgid "Variable Choice" +msgstr "å˜é‡é€‰æ‹©" -msgid "Grouped Variables" -msgstr "分组的å˜é‡" +#contributors: +msgid "Variable Name" +msgstr "å˜é‡å" -msgid "Lower-left corner" -msgstr "左下角" +#contributors: +msgid "Variable Properties" +msgstr "å˜é‡å±žæ€§" -msgid "Target" -msgstr "目标" +#contributors: +msgid "Variable Properties - " +msgstr "å˜é‡å±žæ€§- " -msgid "Central European (Windows-1250)" -msgstr "中欧(Windows-1250)" +#contributors: +msgid "Variable Setting" +msgstr "å˜é‡è®¾ç½®" -msgid "Save As" -msgstr "å¦å­˜" +#contributors: +msgid "Variable Settings" +msgstr "å˜é‡è®¾ç½®" -msgid "Key" -msgstr "é”®" +#contributors: +msgid "Variable Type Error" +msgstr "å˜é‡ç±»åž‹é”™è¯¯" -msgid "Bubble Chart - x: %s, y: %s, size: %s, %s" -msgstr "气泡图-x:%s, y:%s, 大å°:%s,%s" +#contributors: +msgid "Variable Value Error" +msgstr "å˜é‡å€¼é”™è¯¯" -msgid "Map Color Classification" -msgstr "地图颜色分类" +#contributors: +msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name." +msgstr "å˜é‡å \"%s\" é‡å¤æˆ–无效。请é‡æ–°è¾“入一个其他的å˜é‡å。" -msgid "Bubble Chart" -msgstr "气泡图" +#contributors: +msgid "Variable name \"%s\" is either a duplicate or is invalid. Please enter an alternative, non-duplicate variable name. The first character must be a letter, and the remaining characters can be either letters, numbers or underscores. For DBF table, a valid variable name is between one and ten characters long." +msgstr "å˜é‡å \"%s\" é‡å¤æˆ–无效。请é‡æ–°è¾“入一个其他å˜é‡å。第一个字符必须是字æ¯, 其余字符å¯ä»¥æ˜¯å­—æ¯ã€æ•°å­—或下划线。对于 DBF 表, 一个有效的å˜é‡å介于å个字符之间。" -msgid "Neighbors of Cores" -msgstr "核心的邻居" +#contributors: +msgid "Variable name can't be empty." +msgstr "å˜é‡åä¸èƒ½ä¸ºç©ºã€‚" -msgid "Continue" -msgstr "继续" +#contributors: +msgid "Variable name is either a duplicate or is invalid. Please\nenter an alternative, non-duplicate variable name.\n\n" +msgstr "å˜é‡å称是é‡å¤çš„或无效的。请é‡æ–°è¾“入一个新的å˜é‡å。\n" -msgid "Notice" -msgstr "通知" +#contributors: +msgid "Variable:" +msgstr "å˜é‡ï¼š" -msgid "Maximum # of regions:" -msgstr "最大区域数é‡ï¼š" +#contributors: +msgid "Variables" +msgstr "å˜é‡" -msgid "The selected variable %s is not valid. If it's a grouped variable, please modify it in Time->Time Editor. Or please select another variable." -msgstr "所选å˜é‡%s无效。如果它是一个时间(分组)å˜é‡ï¼Œè¯·åœ¨Time-> Time Editor中进行修改。或者请选择å¦ä¸€ä¸ªå˜é‡ã€‚" +#contributors: +msgid "Variables:" +msgstr "å˜é‡:" -msgid "Hinge=1.5" -msgstr "Hinge=1.5" +#contributors: +msgid "Vertical Bins Breaks" +msgstr "ç«–ç›´æ–¹å‘区间(Bins)断点" -msgid "Submit Bug Report" -msgstr "æ交错误报告" +#contributors: +msgid "Vertical Cells" +msgstr "åž‚ç›´å•å…ƒ" -msgid "Finished" -msgstr "完æˆ" +#contributors: +msgid "Vietnamese (Windows-1258)" +msgstr "越å—语(Windows 1258)" -msgid "Standard Deviation Color" -msgstr "标准å差颜色" +#contributors: +msgid "View" +msgstr "视图" -msgid "S.D" -msgstr "标准差" +#contributors: +msgid "View Original Data" +msgstr "查看原始数æ®" -msgid "Rates-Calculated Map" -msgstr "比率计算地图" +#contributors: +msgid "View Standardized Data" +msgstr "查看标准化的数æ®" -msgid "Transformation:" -msgstr "æ•°æ®è½¬æ¢ï¼š" +#contributors: +msgid "Voronoi Contiguity Error" +msgstr "泰森多边形有邻接性错误" -msgid "Other Positive" -msgstr "其他正相关" +#contributors: +msgid "WFS URL" +msgstr "WFS 网å€" -msgid "Chinese Simplified (GB2312)" -msgstr "中文简化版(GB23 12)" +#contributors: +msgid "Warning" +msgstr "警告" -msgid "Delete" -msgstr "删除" +#contributors: +msgid "Warning: %d observations are neighborless." +msgstr "警告:%d 个对象没有找到任何邻居。" -msgid "Sample Autocorrelation" -msgstr "样本自相关" +#contributors: +msgid "Warning: %d observations is neighborless." +msgstr "警告:%d 个对象没有任何邻居。" -msgid "Wrote GeoDa Project File: " -msgstr "写入GeoDa项目文件: " +#contributors: +msgid "Warning: NULL geometry" +msgstr "警告:空的几何形状" -msgid "Failed to create the weights file." -msgstr "创建空间æƒé‡æ–‡ä»¶å¤±è´¥ã€‚" +#contributors: +msgid "Warning: loss data" +msgstr "警告:数æ®å¯èƒ½ä¼šä¸¢å¤±" -msgid "Manual Resize Column" -msgstr "手动调整列的大å°" +#contributors: +msgid "Was not able to load weights matrix." +msgstr "ä¸èƒ½åŠ è½½ç©ºé—´æƒé‡çŸ©é˜µã€‚" -msgid "Please select an Variable field." -msgstr "请选择一个å˜é‡å­—段。" +#contributors: +msgid "Web" +msgstr "网路" -msgid "View" -msgstr "视图" +#contributors: +msgid "Weight" +msgstr "空间æƒé‡" -msgid "Save/Show Map" -msgstr "ä¿å­˜/显示地图" +#contributors: +msgid "Weight matrix required for chosen spatial rate method." +msgstr "空间比率地图方法需è¦æŒ‡å®šç©ºé—´æƒé‡çŸ©é˜µã€‚" -msgid "Open" -msgstr "打开" +#contributors: +msgid "Weighting:" +msgstr "æƒé‡:" -msgid "Include" -msgstr "包å«" +#contributors: +msgid "Weights" +msgstr "空间æƒé‡" -msgid "1st Variable (X)" -msgstr "第一å˜é‡ï¼ˆx)" +#contributors: +msgid "Weights File" +msgstr "æƒé‡æ–‡ä»¶" -msgid "Progress" -msgstr "进度" +#contributors: +msgid "Weights File Creation" +msgstr "创建空间æƒé‡æ–‡ä»¶" -msgid "Randomization" -msgstr "éšæœºåŒ–" +#contributors: +msgid "Weights Intersection" +msgstr "求空间æƒé‡äº¤é›†" -msgid "break 0" -msgstr "间断点 0" +#contributors: +msgid "Weights Manager" +msgstr "空间æƒé‡ç®¡ç†" -msgid "The original datasource %s is not a valid file. GeoDa \"Save\" only works on file datasource." -msgstr "原始数æ®æº%s ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„文件。\"ä¿å­˜\" 功能仅适用于文件数æ®æºã€‚" +#contributors: +msgid "Weights Name" +msgstr "空间æƒé‡å称" -msgid "Update GeoDa failed" -msgstr "æ›´æ–°GeoDa失败" +#contributors: +msgid "Weights Symmetry Check" +msgstr "空间æƒé‡å¯¹ç§°æ€§æ£€éªŒ" -msgid "White Test" -msgstr "White测试" +#contributors: +msgid "Weights Union" +msgstr "求空间æƒé‡å¹¶é›†" -msgid "Period 2:" -msgstr "时段2:" +#contributors: +msgid "Weights file \"%s\" created successfully." +msgstr "空间æƒé‡æ–‡ä»¶â€œ%sâ€æˆåŠŸåˆ›å»ºã€‚" -msgid "Period 2" -msgstr "时段2" +#contributors: +msgid "Weights file/format is not valid." +msgstr "空间æƒé‡æ–‡ä»¶/æ ¼å¼æ— æ•ˆâ€ã€‚" -msgid "Do Means Differ? (ANOVA)" -msgstr "å‡å€¼æ¯”较检验(ANOVA)" +#contributors: +msgid "Weights:" +msgstr "空间æƒé‡ï¼š" -msgid "Conditional G Cluster Map Variables" -msgstr "æ¡ä»¶Gèšç±»åœ°å›¾å˜é‡" +#contributors: +msgid "Welcome to GeoDa" +msgstr "欢迎使用GeoDa" -msgid "Please setup co-locations first." -msgstr "请先设置Co-location。" +#contributors: +msgid "Welcome to GeoDa 1.8.16" +msgstr "欢迎æ¥åˆ°GeoDa 1.8.16" -msgid "Specify bandwidth" -msgstr "指定带宽" +#contributors: +msgid "West European Latin-1 (ISO-8859-1)" +msgstr "" -msgid "Specify Seed..." -msgstr "指定ç§å­â€¦" +#contributors: +msgid "West European Latin-9 (ISO-8859-15)" +msgstr "" -msgid "Categories of " -msgstr "分类 " +#contributors: +msgid "What windows to open?" +msgstr "打开什么窗å£ï¼Ÿ" -msgid "Input is required" -msgstr "输入是必需的" +#contributors: +msgid "When \"all times\" selected for either variable, result field must also be \"all times.\"" +msgstr "当选择å˜é‡çš„时间为“all timesâ€æ—¶, ä¿å­˜ç»“果的字段也必须选“all timesâ€." -msgid "Was not able to load weights matrix." -msgstr "ä¸èƒ½åŠ è½½ç©ºé—´æƒé‡çŸ©é˜µã€‚" +#contributors: +msgid "When \"all times\" selected for variable, result field must also be \"all times.\"" +msgstr "当选择å˜é‡çš„时间为“all timesâ€æ—¶, ä¿å­˜ç»“果的字段也必须选“all timesâ€." -msgid "Unique Values Map" -msgstr "唯一值地图" +#contributors: +msgid "White Test" +msgstr "White测试" -msgid "Add Neighbors To Selection" -msgstr "添加邻居到选中的对象" +#contributors: +msgid "Width in pixels" +msgstr "åƒç´ å®½åº¦" -msgid "Project to X-Z" -msgstr "投影到X-Z" +#contributors: +msgid "Width:" +msgstr "宽度:" -msgid "Click here to get a Google API key" -msgstr "点击这里获å–Google API key" +#contributors: +msgid "Within cluster S.S." +msgstr "å„èšç±»ä¹‹æ€»å¹³æ–¹å’Œ(Within cluster S.S.)" -msgid "Could not initialize new project." -msgstr "无法åˆå§‹åŒ–一个新的项目。" +#contributors: +msgid "Within-cluster sum of squares:\n" +msgstr "èšç±»å¯¹è±¡çš„平方和(Within-cluster sum of squares):\n" -msgid "Speed" -msgstr "速度" +#contributors: +msgid "Wrong number of rows!" +msgstr "行数错误ï¼" -msgid "No Colocation" -msgstr "没有Colocation" +#contributors: +msgid "Wrote GeoDa Project File: " +msgstr "写入GeoDa项目文件: " -msgid "Show CSV Configuration in Merge Data Dialog:" -msgstr "使用åˆå¹¶æ•°æ®æ—¶æ˜¾ç¤ºCSVé…置:" +#contributors: +msgid "X" +msgstr "X" -msgid "Order of contiguity" -msgstr "邻接的秩" +#contributors: +msgid "X Variable" +msgstr "Xå˜é‡" -msgid "New datasource:" -msgstr "æ–°æ•°æ®æºï¼š" +#contributors: +msgid "X-Axis" +msgstr "Xè½´" -msgid "Display Centroids" -msgstr "显示质心" +#contributors: +msgid "X-Coordinates" +msgstr "Xåæ ‡" -msgid "suggested title:" -msgstr "建议标题:" +#contributors: +msgid "X-coord" +msgstr "Xåæ ‡" -msgid "Y-coordinate" -msgstr "Yåæ ‡" +#contributors: +msgid "X-coordinate" +msgstr "Xåæ ‡" -msgid "Data Type" -msgstr "æ•°æ®ç±»åž‹" +#contributors: +msgid "X-coordinate variable" +msgstr "Xåæ ‡å˜é‡" + +#contributors: +msgid "Y" +msgstr "Y" -msgid "When \"all times\" selected for variable, result field must also be \"all times.\"" -msgstr "当选择å˜é‡çš„时间为“all timesâ€æ—¶, ä¿å­˜ç»“果的字段也必须选“all timesâ€." +#contributors: +msgid "Y Variable" +msgstr "Yå˜é‡" -msgid "calculating..." -msgstr "计算中…" +#contributors: +msgid "Y-Axis" +msgstr "Yè½´" -msgid "Append To Current Selection" -msgstr "附加到当å‰é€‰æ‹©" +#contributors: +msgid "Y-Coordinates" +msgstr "Yåæ ‡" -msgid "MDS Plot - " -msgstr "多维尺度分æžå›¾(MDS) - " +#contributors: +msgid "Y-coord" +msgstr "Y-åæ ‡" -msgid "New project file:" -msgstr "新建项目:" +#contributors: +msgid "Y-coordinate" +msgstr "Yåæ ‡" -msgid "Local G Maps" -msgstr "局部G地图" +#contributors: +msgid "Y-coordinate variable" +msgstr "Yåæ ‡å˜é‡" -msgid "The length of a string field must be at least %d and at most %d. Keeping original value." -msgstr "字符串字段的长度必须至少为%d, 最多%d 个。" +#contributors: +msgid "Yes" +msgstr "是" -msgid "Clean Basemap Cache" -msgstr "清空底图缓存" +#contributors: +msgid "You can try to proceed but the current threshold distance value might be too large to compute. If it fails, please input a smaller distance band (which might leave some observations neighborless) or use other weights (e.g. KNN)." +msgstr "当å‰è·ç¦»é˜ˆå€¼å¤ªå¤§ï¼Œå¯èƒ½éœ€è¦å¾ˆé•¿æ—¶é—´è¿›è¡Œè®¡ç®—。请输入一个较å°çš„阈值(å¯èƒ½ä¼šäº§ç”Ÿä¸€äº›æ²¡æœ‰é‚»å±…的观测值)或使用其他æƒé‡ï¼ˆä¾‹å¦‚KNN)。" +#contributors: msgid "You have requested to create a new file project %s while another project is open. Please close project %s and try again." msgstr "该项目文件已ç»æ‰“å¼€, 请求创建新项目%s失败。请关闭项目%s 并é‡è¯•ã€‚" -msgid "Conditional Co-location Map Variables" -msgstr "æ¡ä»¶Co-location地图å˜é‡" +#contributors: +msgid "Your Email address (Optional):" +msgstr "电å­é‚®ä»¶åœ°å€ï¼ˆå¯é€‰ï¼‰ï¼š" -msgid "Cartogram Variables" -msgstr "å½¢å˜åœ°å›¾å˜é‡" +#contributors: +msgid "Your GeoDa is already up-to-date." +msgstr "您的GeoDa版本已ç»æ˜¯æœ€æ–°çš„。" -msgid "Specified key (%s) not found in currently loaded Table." -msgstr "指定的键(%s)在当å‰åŠ è½½çš„表中没有找到。" +#contributors: +msgid "Your Github account (Optional):" +msgstr "您的Githubå¸æˆ·ï¼ˆå¯é€‰ï¼‰ï¼š" -msgid "Turkish Latin-5 (ISO-8859-9)" -msgstr "土耳其拉ä¸5å·ï¼ˆISO-859ï¼9)" +#contributors: +msgid "Your table cannot be aggregated because the key field \"%s\" is unique. Please use another key." +msgstr "该表ä¸èƒ½è¢«èšåˆï¼Œå› ä¸ºé”®å­—段“%sâ€æ˜¯å”¯ä¸€çš„。请使用å¦ä¸€ä¸ªé”®ã€‚" -msgid "Save Thiessen Polygons" -msgstr "ä¿å­˜æ³°æ£®å¤šè¾¹å½¢" +#contributors: +msgid "Your table cannot be merged because the key field \"%s\" is not unique. \nIt contains undefined or duplicate values.\n\nDetails:" +msgstr "无法åˆå¹¶è¡¨, 因为键字段 \"%s\" ä¸æ˜¯å”¯ä¸€çš„。\n它包å«æœªå®šä¹‰çš„或é‡å¤çš„值。\n\n详情:" -msgid "The selected variable is not numeric. Please select another variable." -msgstr "所选å˜é‡ä¸æ˜¯æ•°å€¼ç±»åž‹ï¼Œè¯·é€‰æ‹©å…¶ä»–å˜é‡ã€‚" +#contributors: +msgid "Z" +msgstr "Z" -msgid "Redo" -msgstr "é‡åš" +#contributors: +msgid "Z Variable" +msgstr "Zå˜é‡" -msgid "Your table cannot be aggregated because the key field \"%s\" is unique. Please use another key." -msgstr "该表ä¸èƒ½è¢«èšåˆï¼Œå› ä¸ºé”®å­—段“%sâ€æ˜¯å”¯ä¸€çš„。请使用å¦ä¸€ä¸ªé”®ã€‚" +#contributors: +msgid "Zoom : press right-mouse button" +msgstr "缩放:按鼠标å³é”®" -msgid " BiLISA Significance Map" -msgstr " åŒå˜é‡LISA显著性地图" +#contributors: +msgid "Zoom In" +msgstr "缩å°" -msgid "Set Display Precision on Axis" -msgstr "设置轴上显示的精度" +#contributors: +msgid "Zoom Out" +msgstr "缩å°" -msgid "Create Project File Now?" -msgstr "是å¦åˆ›å»ºé¡¹ç›®æ–‡ä»¶ï¼Ÿ" +#contributors: +msgid "Zooming Mode" +msgstr "缩放模å¼" -msgid "Warning: %d observations are neighborless." -msgstr "警告:%d 个对象没有找到任何邻居。" +#contributors: +msgid "[Please briefly describe what went wrong]" +msgstr "[请简è¦æ述出错的地方]" -msgid "Please choose Period 2 first." -msgstr "请先选择时段2。" +#contributors: +msgid "[Steps you took before something went wrong]" +msgstr "[在å‘生错误之å‰çš„步骤]" -msgid "Encode" -msgstr "ç¼–ç " +#contributors: +msgid "\"%s\" is not a valid p-value. Default p-value (0.01) is used" +msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„p值。默认的p值(0.01)将被使用" -msgid "System" -msgstr "系统" +#contributors: +msgid "\"%s\" is not a valid seed. Seed unchanged." +msgstr "\"%s\" ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„ç§å­ã€‚" -msgid "Curve Color" -msgstr "曲线颜色" +#contributors: +msgid "\". \n\nDetails: Attemp to write a readonly database, or " +msgstr "" -msgid "Please select another variable with values more suitable for computing a correlogram." -msgstr "请选择å¦ä¸€ä¸ªå˜é‡è¿›è¡Œéžå‚空间自相关分æžã€‚" +#contributors: +msgid "\nREGRESSION\n----------\n" +msgstr "\n回归分æž\n----------\n" -msgid "Spatial Rate" -msgstr "空间比率" +#contributors: +msgid "\nSelect whether to use periods or commas as\nseparators in numeric fields. \n\nE.g., by default, GeoDa uses commas to\nseparate thousands and periods\nfor decimals (1,000.00).\n " +msgstr "" -msgid "Initialization Re-runs:" -msgstr "åˆå§‹åŒ–è¿è¡Œæ¬¡æ•°ï¼š" +#contributors: +msgid "\n\n95% threshold criterion: " +msgstr "\n\n贡献达95%阈值准则: " -msgid "Choose A Color" -msgstr "选择颜色" +#contributors: +msgid "\n\nCumulative proportion:\n" +msgstr "\n\nå˜é‡ç´¯è®¡è´¡çŒ®çŽ‡(Cumulative proportion):\n" -msgid "Set Number Separators in Table" -msgstr "设置表中的数分隔符" +#contributors: +msgid "\n\nDetails: " +msgstr "" -msgid "Set the threshold to bridge the gap between disconnected polygons (often caused by digitizing errors). The value depends on your measurement unit (e.g. 1 foot or 0.0000001 degrees). Use the weights histogram to detect neighborless observations." -msgstr "由于地图数字化时的错误,相邻多边形之间的最å°è·ç¦»å¹¶ä¸ä¸º0。请设置一个åˆé€‚阈值(å³ï¼šé‚»æŽ¥å¤šè¾¹å½¢çš„最å°è·ç¦»ï¼‰æ¥ä¿è¯æ¯ä¸€ä¸ªå¤šè¾¹å½¢éƒ½èƒ½å¤Ÿæ‰¾åˆ°è‡³å°‘一个邻居。这个阈值å–决于你的测é‡å•ä½ï¼ˆä¾‹å¦‚1英尺或0.0000001度)。你å¯ä»¥ä½¿ç”¨æƒé‡ç›´æ–¹å›¾æ¥æŸ¥çœ‹å“ªäº›å¯¹è±¡æ²¡æœ‰ä»»ä½•é‚»å±…。" +#contributors: +msgid "\n\nEigenvalues:\n" +msgstr "\n\n特å¾å€¼(Eigenvalues):\n" -msgid "Use Weights:" -msgstr "使用空间æƒé‡ï¼š" +#contributors: +msgid "\n\nKaiser criterion: " +msgstr "\n\nKaiser准则(特å¾å€¼>1): " -msgid "Resize" -msgstr "调整大å°" +#contributors: +msgid "\n\nProportion of variance:\n" +msgstr "\n\nå„å˜é‡è´¡çŒ®çŽ‡(Proportion of variance):\n" -msgid "Select variable with addresses:" -msgstr "选择带有地å€çš„å˜é‡ï¼š" +#contributors: +msgid "\n\nSquared correlations:\n" +msgstr "\n\nå˜é‡ä¸Žä¸»æˆåˆ†å¹³æ–¹ç›¸å…³ç³»æ•°(Squared correlations):\n" -msgid "Not enough memory!" -msgstr "内存ä¸è¶³ï¼" +#contributors: +msgid "\n\nStandard deviation:\n" +msgstr "\n\n标准差:\n" -msgid "Unicode (UTF-8)" -msgstr "Unicode(UTF-8)" +#contributors: +msgid "\n\nVariable Loadings:\n" +msgstr "\n\n主æˆåˆ†è½½è·(Variable Loadings):\n" -msgid "Add basemap automatically:" -msgstr "自动添加底图:" +#contributors: +msgid "adaptive kernel" +msgstr "自适应核" -msgid "Conditional Histogram Variables" -msgstr "æ¡ä»¶ç›´æ–¹å›¾å˜é‡" +#contributors: +msgid "and field" +msgstr "以åŠå­—段" -msgid "Save Regression Results" -msgstr "ä¿å­˜å›žå½’结果" +#contributors: +msgid "autocorrelation is " +msgstr "自相关系数为" -msgid "Please select a time variable first, and make sure more than one time steps have been defined." -msgstr "请首先选择一个时间å˜é‡, 并确ä¿å·²å®šä¹‰äº†å¤šä¸ªæ—¶é—´æ­¥é•¿ã€‚" +#contributors: +msgid "bandwidth" +msgstr "带宽" -msgid "Read from an ASCII file" -msgstr "从ASCII文件中读å–" +#contributors: +msgid "binary" +msgstr "二进制" -msgid "uni. dist. Min" -msgstr "å‡åŒ€åˆ†å¸ƒæœ€å°å€¼" +#contributors: +msgid "break 0" +msgstr "间断点 0" -msgid "Select from current selection" -msgstr "从当å‰é€‰æ‹©ä¸­é€‰æ‹©" +#contributors: +msgid "calculating..." +msgstr "计算中…" -msgid "Rate calculation successful." -msgstr "比率计算æˆåŠŸã€‚" +#contributors: +msgid "can't compute" +msgstr "无法计算" -msgid "\"%s\" is not a valid seed. Seed unchanged." -msgstr "\"%s\" ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„ç§å­ã€‚" +#contributors: +msgid "category 1" +msgstr "category 1" -msgid "Change" -msgstr "更改" +#contributors: +msgid "choice:" +msgstr "选择:" -msgid "\"%s\" is not a valid p-value. Default p-value (0.01) is used" -msgstr "“%sâ€ä¸æ˜¯æœ‰æ•ˆçš„p值。默认的p值(0.01)将被使用" +#contributors: +msgid "choose a variable" +msgstr "选择的å˜é‡" -msgid "symmetry" -msgstr "对称空间æƒé‡" +#contributors: +msgid "csv file:" +msgstr "csv文件:" -msgid "Weights Symmetry Check" -msgstr "空间æƒé‡å¯¹ç§°æ€§æ£€éªŒ" +#contributors: +msgid "current table key" +msgstr "当å‰è¡¨æ ¼é”®å€¼" -msgid "Choose an output weights file name." -msgstr "选择一个输出空间æƒé‡æ–‡ä»¶å。" +#contributors: +msgid "custom" +msgstr "自定义" -msgid "Selected vs. Unselected" -msgstr "选中的与未选中的" +#contributors: +msgid "dBase Database File (*.dbf)|*.dbf" +msgstr "dBase Database File (*.dbf)|*.dbf" -msgid "3D Scatter Plot Variables" -msgstr "3D散点图å˜é‡" +#contributors: +msgid "datasource.type %s unknown.." +msgstr "æ•°æ®æºç±»åž‹%s未知.." -msgid "Column Number (from 0)" -msgstr "Column Number (from 0)" +#contributors: +msgid "day:" +msgstr "天:" -msgid "Please briefly describe what went wrong." -msgstr "请简è¦æ述出什么地方出错了。" +#contributors: +msgid "decimal\nplaces" +msgstr "å°æ•°ç²¾åº¦\nä½æ•°" -msgid "Input file (text file)" -msgstr "输入文件(文本文件)" +#contributors: +msgid "displayed\ndecimal places" +msgstr "显示å°æ•°ç²¾åº¦\nä½æ•°" -msgid "Spectral Clustering Settings" -msgstr "è°±èšç±»è®¾ç½®" +#contributors: +msgid "distance metric" +msgstr "è·ç¦»åº¦é‡" -msgid "time" -msgstr "时间" +#contributors: +msgid "distance unit" +msgstr "è·ç¦»å•ä½" -msgid "Unique Values" -msgstr "唯一值" +#contributors: +msgid "distance vars" +msgstr "è·ç¦»å˜é‡" -msgid "Category Editor" -msgstr "自定义分类编辑器" +#contributors: +msgid "diverging" +msgstr "分散型" -msgid "Dependent Var Y" -msgstr "å› å˜é‡Y" +#contributors: +msgid "done" +msgstr "完æˆ" -msgid "Standard Deviation" -msgstr "标准差" +#contributors: +msgid "ds:" +msgstr "ds:" -msgid "Weights" -msgstr "空间æƒé‡" +#contributors: +msgid "enumerate as 1, 2, 3, ..." +msgstr "枚举,如:1, 2, 3,…" -msgid "Selection Tool" -msgstr "选择工具" +#contributors: +msgid "false" +msgstr "å¦" -msgid " Differential Significance Map" -msgstr " 差分显著性地图" +#contributors: +msgid "field name:" +msgstr "字段å:" -msgid "Save As Datasource" -msgstr "å¦å­˜æ•°æ®" +#contributors: +msgid "fields:" +msgstr "字段:" -msgid "diverging" -msgstr "分散型" +#contributors: +msgid "file" +msgstr "文件" -msgid "Classification Themes" -msgstr "分类主题" +#contributors: +msgid "file size:" +msgstr "文件大å°ï¼š" -msgid "The number of identified clusters is less than " -msgstr "识别的èšç±»çš„æ•°ç›®å°äºŽ " +#contributors: +msgid "from" +msgstr "开始值" -msgid "Method:\t" -msgstr "方法:\t" +#contributors: +msgid "id variable" +msgstr "idå˜é‡" -msgid "Number Bins:" -msgstr "分区(Bins)æ•°é‡" +#contributors: +msgid "import table key" +msgstr "导入表的关键字段" -msgid "Max Distance:" -msgstr "最大è·ç¦»:" +#contributors: +msgid "in current layer." +msgstr "在当å‰åœ°å›¾ä¸­ã€‚" -msgid "total # pairs" -msgstr "所有对数" +#contributors: +msgid "inches" +msgstr "英寸" + +#contributors: +msgid "include lower orders" +msgstr "是å¦åŒ…å«ä½Žé˜¶çš„邻居" + +#contributors: +msgid "inverse distance" +msgstr "使用åè·ç¦»" -msgid "Autocorr." -msgstr "自相关系数" +#contributors: +msgid "is associated to" +msgstr "å…³è”于" -msgid "Autocorr. of " -msgstr "自相关系数" +#contributors: +msgid "kernel method" +msgstr "核函数" -msgid "range, est. distance" -msgstr "范围(估计è·ç¦»ï¼‰" +#contributors: +msgid "kernel to diagonal" +msgstr "核函数应用于对角线æƒé‡å€¼" -msgid "# Pairs" -msgstr "对数" +#contributors: +msgid "large" +msgstr "大" -msgid "All Pairs" -msgstr "所有的对数(All pairs)" +#contributors: +msgid "length" +msgstr "长度" -msgid "Estimated Pairs:" -msgstr "估计的对数(Estimated Pairs):" +#contributors: +msgid "max dist" +msgstr "最大è·ç¦»" -msgid "Random Sample" -msgstr "éšæœºé‡‡æ ·æ³•" +#contributors: +msgid "max neighbors" +msgstr "最大邻居数" -msgid "Sample Size:" -msgstr "样本大å°:" +#contributors: +msgid "max-p" +msgstr "max-p" -msgid "Number of clusters:\t" -msgstr "èšç±»æ•°é‡:\t" +#contributors: +msgid "max:" +msgstr "最大值:" -msgid "Initialization method:\t" -msgstr "åˆå§‹åŒ–方法:\t" +#contributors: +msgid "maximum" +msgstr "最大值" -msgid "Initialization re-runs:\t" -msgstr "åˆå§‹åŒ–é‡å¤è¿è¡Œæ¬¡æ•°:\t" +#contributors: +msgid "maximum\npossible" +msgstr "å¯èƒ½æœ€å¤§å€¼" -msgid "Maximum iterations:\t" -msgstr "最大迭代次数:\t" +#contributors: +msgid "mean" +msgstr "å¹³å‡å€¼" -msgid "Minimum bound:\t" -msgstr "最å°è¾¹ç•Œå€¼:\t" +#contributors: +msgid "mean neighbors" +msgstr "å¹³å‡é‚»å±…æ•°" -msgid "Transformation:\t" -msgstr "æ•°æ®è½¬æ¢:\t" +#contributors: +msgid "mean:" +msgstr "å¹³å‡å€¼ï¼š" -msgid "Distance function:\t" -msgstr "è·ç¦»å‡½æ•°:\t" +#contributors: +msgid "median neighbors" +msgstr "中ä½é‚»å±…æ•°" -msgid "Distance:" -msgstr "è·ç¦»å‡½æ•°:" +#contributors: +msgid "median:" +msgstr "中ä½æ•°ï¼š" -msgid "Minimum region size:\t" -msgstr "最å°åŒºåŸŸæ•°:\t" +#contributors: +msgid "min dist" +msgstr "最å°è·ç¦»" -msgid "Affinity with Guassian Kernel:\tSigma=" -msgstr "基于高斯核函数的相似矩阵:\tSigma=" +#contributors: +msgid "min neighbors" +msgstr "最å°é‚»å±…æ•°" -msgid "Affinity with K-Nearest Neighbors:\tK=" -msgstr "基于KNN的相似举è¯:\tK=" +#contributors: +msgid "min:" +msgstr "最å°å€¼ï¼š" -msgid "# iterations:\t" -msgstr "迭代次数:\t" +#contributors: +msgid "minimum" +msgstr "最å°å€¼" -msgid "Skater Cluster Map (" -msgstr "Skaterèšç±»åœ°å›¾ (" +#contributors: +msgid "minimum\npossible" +msgstr "å¯èƒ½æœ€å°å€¼" -msgid "Not Clustered" -msgstr "无法进行èšç±»" +#contributors: +msgid "mm" +msgstr "毫米" -msgid "Cluster centers:\n" -msgstr "èšç±»ä¸­å¿ƒï¼š\n" +#contributors: +msgid "month:" +msgstr "月:" -msgid "Within-cluster sum of squares:\n" -msgstr "èšç±»å¯¹è±¡çš„平方和(Within-cluster sum of squares):\n" +#contributors: +msgid "name:" +msgstr "å称:" -msgid "Within cluster S.S." -msgstr "å„èšç±»ä¹‹æ€»å¹³æ–¹å’Œ(Within cluster S.S.)" +#contributors: +msgid "need two valid regressions" +msgstr "" -msgid "The total sum of squares:\t" -msgstr "总平方和:\t" +#contributors: +msgid "neighbors" +msgstr "邻居数" -msgid "Number of not clustered observations: " -msgstr "无法èšç±»çš„对象数:" +#contributors: +msgid "not saved" +msgstr "未ä¿å­˜" -msgid "The total within-cluster sum of squares:\t" -msgstr "The total within-cluster sum of squares:\t" +#contributors: +msgid "numeric" +msgstr "数值" -msgid "The between-cluster sum of squares:\t" -msgstr "èšç±»é—´ä¹‹æ€»å¹³æ–¹å’Œ(between-cluster S.S.):\t" +#contributors: +msgid "obs " +msgstr "对象 " -msgid "The ratio of between to total sum of squares:\t" -msgstr "èšç±»é—´ä¹‹æ€»å¹³æ–¹å’Œ / 总平方和 :\t" +#contributors: +msgid "obs#" +msgstr "obs#" -msgid "No field chosen for first variable." -msgstr "请选择第一个å˜é‡" +#contributors: +msgid "observation:" +msgstr "观察对象:" -msgid "No field chosen for second variable." -msgstr "请选择第二个å˜é‡" +#contributors: +msgid "order" +msgstr "" -msgid "No field chosen for third variable." -msgstr "请选择第三个å˜é‡" +#contributors: +msgid "parent group" +msgstr "所在分组(时间å˜é‡)" -msgid "No field chosen for fourth variable." -msgstr "请选择第四个å˜é‡" +#contributors: +msgid "pixels" +msgstr "åƒç´ " -msgid "Variable %s is a placeholer" -msgstr "å˜é‡ %s ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆå˜é‡" +#contributors: +msgid "power" +msgstr "幂" -msgid "Variable %s at time %d is a placeholer" -msgstr "å˜é‡ %s 在时间段 %d ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆå˜é‡" +#contributors: +msgid "range, est. distance" +msgstr "范围(估计è·ç¦»ï¼‰" -msgid "Variable %s at time %d could not be standardized." -msgstr "å˜é‡ %s 在时间段 %d 无法被标准化" +#contributors: +msgid "records:" +msgstr "记录:" -msgid "The new theme chosen will no longer include rates smoothing. Please use the Rates submenu to choose a theme with rates again." -msgstr "请使用èœå• 地图->比率计算的地图 从新选择比率平滑" +#contributors: +msgid "redcap" +msgstr "" -msgid "Please select two binary variables for Bivariate Local Join Count." -msgstr "请选择两个二分(binary)å˜é‡ç”¨äºŽåŒå˜é‡å±€éƒ¨Join Count。" +#contributors: +msgid "row-standardized" +msgstr "行标准化" -msgid "Adjust Bubble Size" -msgstr "调整气泡大å°" +#contributors: +msgid "row:\n" +msgstr "行:\n" -msgid "Bubble Size Adjust Dialog" -msgstr "气泡大å°è®¾ç½®" +#contributors: +msgid "s.d." +msgstr "标准差" -msgid "small" -msgstr "å°" +#contributors: +msgid "s.d.:" +msgstr "标准差:" -msgid "large" -msgstr "大" +#contributors: +msgid "sd from mean" +msgstr "标准差" -msgid "selected: %.4f" -msgstr "选中的: %.4f" +#contributors: +msgid "selected:" +msgstr "已选中:" -msgid "unselected: %.4f" -msgstr "未选中的: %.4f" +#contributors: +msgid "sequential" +msgstr "顺åºçš„" -msgid " (isolates in weights are removed)" -msgstr " (空间æƒé‡ä¸­çš„没有邻居的对象已被删除)" +#contributors: +msgid "show normal distribution p-val map" +msgstr "显示p值的正æ€åˆ†å¸ƒå›¾" -msgid "Property" -msgstr "属性" +#contributors: +msgid "show normal distribution p-val maps" +msgstr "显示p值的正æ€åˆ†å¸ƒåœ°å›¾" -msgid "Value" -msgstr "值" +#contributors: +msgid "show significance maps" +msgstr "显示显著性图" -msgid "Add Map Layer" -msgstr "Add Map Layer" +#contributors: +msgid "skater" +msgstr "" -msgid "Map Layer Setting" -msgstr "Map Layer Setting" +#contributors: +msgid "small" +msgstr "å°" -msgid "Set Highlight Association" -msgstr "Set Highlight Association" +#contributors: +msgid "space-time variable found with no name" +msgstr "找到未命å的时空å˜é‡" -msgid "Clear Highlight Association" -msgstr "Clear Highlight Association" +#contributors: +msgid "standard deviation" +msgstr "标准差" -msgid "Change Fill Color" -msgstr "Change Fill Color" +#contributors: +msgid "suggested title:" +msgstr "建议标题:" -msgid "Change Outline Color" -msgstr "Change Outline Color" +#contributors: +msgid "symmetry" +msgstr "对称空间æƒé‡" -msgid "Outline Visible" -msgstr "Outline Visible" +#contributors: +msgid "thematic" +msgstr "主题的(thematic)" -msgid "Only Map Boundary" -msgstr "Only Map Boundary" +#contributors: +msgid "threshold value" +msgstr "阈值" -msgid "Change Point Radius" -msgstr "Change Point Radius" +#contributors: +msgid "time" +msgstr "时间" -msgid "Set Association Dialog" -msgstr "Set Association Dialog" +#contributors: +msgid "to" +msgstr "结æŸå€¼" -msgid "Select layer" -msgstr "Select layer" +#contributors: +msgid "to define weights." +msgstr "定义空间æƒé‡ã€‚" -msgid "and field" -msgstr "and field" +#contributors: +msgid "to specify variable and distance parameters." +msgstr "æ¥æŒ‡å®šå˜é‡å’Œè·ç¦»å‚æ•°" -msgid "is associated to" -msgstr "is associated to" +#contributors: +msgid "total # pairs" +msgstr "所有对数" -msgid "in current layer." -msgstr "in current layer." +#contributors: +msgid "true" +msgstr "是" -msgid "Show connect line" -msgstr "Show connect line" +#contributors: +msgid "type" +msgstr "类型" -msgid "Point Radius:" -msgstr "Point Radius:" +#contributors: +msgid "undefined: " +msgstr "" -msgid "Map Layout Preview" -msgstr "Map Layout Preview" +#contributors: +msgid "uni. dist. Min" +msgstr "å‡åŒ€åˆ†å¸ƒæœ€å°å€¼" -msgid "Show Legend" -msgstr "Show Legend" +#contributors: +msgid "uniform distribution" +msgstr "å‡åŒ€åˆ†å¸ƒ" -msgid "Use Transparent Legend Background" -msgstr "Use Transparent Legend Background" +#contributors: +msgid "unknown" +msgstr "未知" -msgid "Image Dimension Setting" -msgstr "Image Dimension Setting" +#contributors: +msgid "using row-standardized weights" +msgstr "使用行标准化空间æƒé‡" -msgid "Width:" -msgstr "Width:" +#contributors: +msgid "value" +msgstr "值" -msgid "Height:" -msgstr "Height:" +#contributors: +msgid "value:" +msgstr "值:" -msgid "Resolution(dpi):" -msgstr "Resolution(dpi):" +#contributors: +msgid "var name:" +msgstr "å˜é‡å:" -msgid "pixels" -msgstr "pixels" +#contributors: +msgid "variable name" +msgstr "å˜é‡å" -msgid "inches" -msgstr "inches" +#contributors: +msgid "version:" +msgstr "版本:" -msgid "mm" -msgstr "mm" +#contributors: +msgid "weights:" +msgstr "空间æƒé‡ï¼š" -msgid "Basemap Sources: (Format: group_name.basemap_name,basemap_url)" -msgstr "Basemap Sources: (Format: group_name.basemap_name,basemap_url)" +#contributors: +msgid "wrong model number" +msgstr "错误的模型åºå·" -msgid "Basemap Parameters:" -msgstr "Basemap Parameters:" +#contributors: +msgid "y:" +msgstr "" -msgid "Multivariate Local Join Count" -msgstr "Multivariate Local Join Count" diff --git a/internationalization/token.pickle b/internationalization/token.pickle new file mode 100644 index 000000000..034b6d162 Binary files /dev/null and b/internationalization/token.pickle differ diff --git a/internationalization/xrc.pot b/internationalization/xrc.pot new file mode 100644 index 000000000..98493d603 --- /dev/null +++ b/internationalization/xrc.pot @@ -0,0 +1,1914 @@ +msgid "&File" +msgstr "" + +msgid "New From Recent" +msgstr "" + +msgid "&New" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save As" +msgstr "" + +msgid "Save Selected As" +msgstr "" + +msgid "&Open Project" +msgstr "" + +msgid "Save Project" +msgstr "" + +msgid "Project Information" +msgstr "" + +msgid "Preferences..." +msgstr "" + +msgid "Close" +msgstr "" + +msgid "Exit" +msgstr "" + +msgid "&Edit" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Category" +msgstr "" + +msgid "&Tools" +msgstr "" + +msgid "Weights Manager" +msgstr "" + +msgid "Shape" +msgstr "" + +msgid "Points from Table" +msgstr "" + +msgid "Create Grid" +msgstr "" + +msgid "Spatial Join" +msgstr "" + +msgid "Dissolve" +msgstr "" + +msgid "T&able" +msgstr "" + +msgid "Aggregate" +msgstr "" + +msgid "Merge" +msgstr "" + +msgid "Selection Tool" +msgstr "" + +msgid "Invert Selection" +msgstr "" + +msgid "Clear Selection" +msgstr "" + +msgid "Save Selection" +msgstr "" + +msgid "Move Selected to Top" +msgstr "" + +msgid "Calculator" +msgstr "" + +msgid "Add Variable" +msgstr "" + +msgid "Delete Variable(s)" +msgstr "" + +msgid "Edit Variable Properties" +msgstr "" + +msgid "Encode" +msgstr "" + +msgid "Unicode (UTF-8)" +msgstr "" + +msgid "Unicode (UTF-16LE)" +msgstr "" + +msgid "Arabic (Windows-1256)" +msgstr "" + +msgid "Central European Latin-2 (ISO-8859-2)" +msgstr "" + +msgid "Central European (Windows-1250)" +msgstr "" + +msgid "Central European (CP852)" +msgstr "" + +msgid "Chinese Simplified (GB2312)" +msgstr "" + +msgid "Chinese Traditional (Big5)" +msgstr "" + +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +msgid "Cyrillic (KOI8-R)" +msgstr "" + +msgid "Cyrillic (Windows-1251)" +msgstr "" + +msgid "Cyrillic/Russian (CP866)" +msgstr "" + +msgid "Greek (ISO-8859-7)" +msgstr "" + +msgid "Hebrew (ISO-8859-8-1)" +msgstr "" + +msgid "Hebrew (Windows-1255)" +msgstr "" + +msgid "Japanese (Shift&JIS)" +msgstr "" + +msgid "Japanese (EUC-JP)" +msgstr "" + +msgid "Korean (EUC-KR)" +msgstr "" + +msgid "Nordic Latin-6 (ISO-8859-10)" +msgstr "" + +msgid "South European Latin-3 (ISO-8859-3)" +msgstr "" + +msgid "Turkish Latin-5 (ISO-8859-9)" +msgstr "" + +msgid "Turkish (Windows-1254)" +msgstr "" + +msgid "Vietnamese (Windows-1258)" +msgstr "" + +msgid "West European Latin-1 (ISO-8859-1)" +msgstr "" + +msgid "West European Latin-9 (ISO-8859-15)" +msgstr "" + +msgid "&Map" +msgstr "" + +msgid "Themeless Map" +msgstr "" + +msgid "Quantile Map" +msgstr "" + +msgid "Percentile Map" +msgstr "" + +msgid "Box Map (Hinge=1.5)" +msgstr "" + +msgid "Box Map (Hinge=3.0)" +msgstr "" + +msgid "Standard Deviation Map" +msgstr "" + +msgid "Unique Values Map" +msgstr "" + +msgid "Co-location Map" +msgstr "" + +msgid "Natural Breaks Map" +msgstr "" + +msgid "Equal Intervals Map" +msgstr "" + +msgid "Hierarchical Map" +msgstr "" + +msgid "Custom Breaks" +msgstr "" + +msgid "Create New Custom" +msgstr "" + +msgid "Raw Rate" +msgstr "" + +msgid "Excess Risk" +msgstr "" + +msgid "Empirical Bayes" +msgstr "" + +msgid "Spatial Rate" +msgstr "" + +msgid "Spatial Empirical Bayes" +msgstr "" + +msgid "Rates-Calculated Map" +msgstr "" + +msgid "Conditional Map" +msgstr "" + +msgid "Cartogram" +msgstr "" + +msgid "Map Movie" +msgstr "" + +msgid "Histogram" +msgstr "" + +msgid "Box Plot" +msgstr "" + +msgid "Scatter Plot" +msgstr "" + +msgid "Scatter Plot Matrix" +msgstr "" + +msgid "Bubble Chart" +msgstr "" + +msgid "3D Scatter Plot" +msgstr "" + +msgid "Parallel Coordinate Plot" +msgstr "" + +msgid "Averages Chart" +msgstr "" + +msgid "Conditional Plot" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "E&xplore" +msgstr "" + +msgid "Clusters" +msgstr "" + +msgid "PCA" +msgstr "" + +msgid "MDS" +msgstr "" + +msgid "K Means" +msgstr "" + +msgid "K Medians" +msgstr "" + +msgid "K Medoids" +msgstr "" + +msgid "Spectral" +msgstr "" + +msgid "Hierarchical" +msgstr "" + +msgid "HDBScan" +msgstr "" + +msgid "skater" +msgstr "" + +msgid "redcap" +msgstr "" + +msgid "max-p" +msgstr "" + +msgid "&Space" +msgstr "" + +msgid "Univariate Moran's I" +msgstr "" + +msgid "Bivariate Moran's I" +msgstr "" + +msgid "Differential Moran's I" +msgstr "" + +msgid "Moran's I with EB Rate" +msgstr "" + +msgid "Univariate Local Moran's I" +msgstr "" + +msgid "Bivariate Local Moran's I" +msgstr "" + +msgid "Differential Local Moran's I" +msgstr "" + +msgid "Local Moran's I with EB Rate" +msgstr "" + +msgid "Local G" +msgstr "" + +msgid "Local G*" +msgstr "" + +msgid "Univariate Local Join Count" +msgstr "" + +msgid "Bivariate Local Join Count" +msgstr "" + +msgid "Co-location Join Count" +msgstr "" + +msgid "Local Geary Maps" +msgstr "" + +msgid "Univariate Local Geary" +msgstr "" + +msgid "Multivariate Local Geary" +msgstr "" + +msgid "Spatial Correlogram" +msgstr "" + +msgid "Tim&e" +msgstr "" + +msgid "Time Player" +msgstr "" + +msgid "Time Editor" +msgstr "" + +msgid "&Regression" +msgstr "" + +msgid "Regression" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "&Help" +msgstr "" + +msgid "Check Updates" +msgstr "" + +msgid "Bug Report" +msgstr "" + +msgid "Donate" +msgstr "" + +msgid "About GeoDa" +msgstr "" + +msgid "Color" +msgstr "" + +msgid "Point Color" +msgstr "" + +msgid "Highlight Color" +msgstr "" + +msgid "Background Color" +msgstr "" + +msgid "Hinge" +msgstr "" + +msgid "View" +msgstr "" + +msgid "Set Display Precision" +msgstr "" + +msgid "Set Display Precision on Axes" +msgstr "" + +msgid "Display Statistics" +msgstr "" + +msgid "Show Vertical Axis" +msgstr "" + +msgid "Show Status Bar" +msgstr "" + +msgid "Copy Image To Clipboard" +msgstr "" + +msgid "Save Image As" +msgstr "" + +msgid "Background" +msgstr "" + +msgid "Themeless" +msgstr "" + +msgid "Quantile" +msgstr "" + +msgid "Percentile" +msgstr "" + +msgid "Standard Deviation" +msgstr "" + +msgid "Unique Values" +msgstr "" + +msgid "Natural Breaks" +msgstr "" + +msgid "Equal Intervals" +msgstr "" + +msgid "Map Color Classification" +msgstr "" + +msgid "Vertical Bins Breaks" +msgstr "" + +msgid "Horizontal Bins Breaks" +msgstr "" + +msgid "Save Categories" +msgstr "" + +msgid "Selection Shape" +msgstr "" + +msgid "Rectangle" +msgstr "" + +msgid "Circle" +msgstr "" + +msgid "Line" +msgstr "" + +msgid "Outlines Visible" +msgstr "" + +msgid "Show Map Boundary" +msgstr "" + +msgid "Show Linear Smoother" +msgstr "" + +msgid "Show LOWESS Smoother" +msgstr "" + +msgid "Edit LOWESS Parameters" +msgstr "" + +msgid "Display Axes Scale Values" +msgstr "" + +msgid "Display Slope Values" +msgstr "" + +msgid "Regression Line Color" +msgstr "" + +msgid "Choose Intervals" +msgstr "" + +msgid "Show Axes" +msgstr "" + +msgid "Classification Themes" +msgstr "" + +msgid "Improve Cartogram" +msgstr "" + +msgid "1 Iteration" +msgstr "" + +msgid "2 Iteration" +msgstr "" + +msgid "3 Iteration" +msgstr "" + +msgid "4 Iteration" +msgstr "" + +msgid "5 Iteration" +msgstr "" + +msgid "6 Iteration" +msgstr "" + +msgid "Status Bar" +msgstr "" + +msgid "Save Connectivity To Table" +msgstr "" + +msgid "Select Neighborless Observations" +msgstr "" + +msgid "Display Thiessen Polygons" +msgstr "" + +msgid "Save Thiessen Polygons" +msgstr "" + +msgid "Save Duplicate Thiessen Polygons to Table" +msgstr "" + +msgid "Thiessen Polygons" +msgstr "" + +msgid "Selection Mode" +msgstr "" + +msgid "Panning Mode" +msgstr "" + +msgid "Zooming Mode" +msgstr "" + +msgid "Fit-To-Window Mode" +msgstr "" + +msgid "Fixed Aspect Ratio Mode" +msgstr "" + +msgid "Basemap" +msgstr "" + +msgid "Basemap Configuration" +msgstr "" + +msgid "Clean Basemap Cache" +msgstr "" + +msgid "Change Map Transparency" +msgstr "" + +msgid "No Basemap" +msgstr "" + +msgid "Randomization" +msgstr "" + +msgid "99 Permutations" +msgstr "" + +msgid "199 Permutations" +msgstr "" + +msgid "499 Permutations" +msgstr "" + +msgid "999 Permutations" +msgstr "" + +msgid "Other (up to 99999)" +msgstr "" + +msgid "Use Specified Seed" +msgstr "" + +msgid "Specify Seed..." +msgstr "" + +msgid "Significance Filter" +msgstr "" + +msgid "Custom Inference" +msgstr "" + +msgid "Save Results" +msgstr "" + +msgid "Show As Conditional Map" +msgstr "" + +msgid "Connectivity" +msgstr "" + +msgid "Show Selection and Neighbors" +msgstr "" + +msgid "Change Fill Color of Neighbors" +msgstr "" + +msgid "Show Graph" +msgstr "" + +msgid "Change Edge Thickness" +msgstr "" + +msgid "Light" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Strong" +msgstr "" + +msgid "Change Edge Color" +msgstr "" + +msgid "Hide Map" +msgstr "" + +msgid "Change Outline Color of Selected" +msgstr "" + +msgid "Select All..." +msgstr "" + +msgid "Cores" +msgstr "" + +msgid "Neighbors of Cores" +msgstr "" + +msgid "Cores and Neighbors" +msgstr "" + +msgid "Selectable Fill Color" +msgstr "" + +msgid "Change Size of Root" +msgstr "" + +msgid "Change Color of Root" +msgstr "" + +msgid "Add Mean Centers to Table" +msgstr "" + +msgid "Add Centroids to Table" +msgstr "" + +msgid "Display Mean Centers" +msgstr "" + +msgid "Display Centroids" +msgstr "" + +msgid "Save Mean Centers" +msgstr "" + +msgid "Save Centroids" +msgstr "" + +msgid "Shape Centers" +msgstr "" + +msgid "Regimes Regression" +msgstr "" + +msgid "Linear Smoother" +msgstr "" + +msgid "LOWESS Smoother" +msgstr "" + +msgid "Show Axes Through Origin" +msgstr "" + +msgid "Use Scientific Notation" +msgstr "" + +msgid "Legend Background Color" +msgstr "" + +msgid "Copy Legend To Clipboard" +msgstr "" + +msgid "Change Current Map Type" +msgstr "" + +msgid "Rates" +msgstr "" + +msgid "Save Rates" +msgstr "" + +msgid "Hinge=1.5" +msgstr "" + +msgid "Hinge=3.0" +msgstr "" + +msgid "Boxplot Theme" +msgstr "" + +msgid "Data" +msgstr "" + +msgid "View Standardized Data" +msgstr "" + +msgid "View Original Data" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Fixed scale over time" +msgstr "" + +msgid "Axis Option" +msgstr "" + +msgid "Enable User Defined Value Range of Y-Axis" +msgstr "" + +msgid "Adjust Value Range of Y-Axis" +msgstr "" + +msgid "Set Display Precision of Y-Axis" +msgstr "" + +msgid "Add/Remove Variables" +msgstr "" + +msgid "Smoother" +msgstr "" + +msgid "Change Parameters" +msgstr "" + +msgid "Curve Color" +msgstr "" + +msgid "Axes Through Origin" +msgstr "" + +msgid "Rename Variable" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "Change Font" +msgstr "" + +msgid "Moran Scatter Plot" +msgstr "" + +msgid "Local Moran's I Maps" +msgstr "" + +msgid "Local G Maps" +msgstr "" + +msgid "Rates-Calculated Maps" +msgstr "" + +msgid "ESRI Shapefile (*.shp)|*.shp" +msgstr "" + +msgid "ESRI File Geodatabase (*.gdb)|*.gdb" +msgstr "" + +msgid "GeoJSON (*.geojson;*.json)|*.geojson;*.json" +msgstr "" + +msgid "GeoPackage (*.gpkg)|*.gpkg" +msgstr "" + +msgid "SQLite/SpatiaLite (*.sqlite)|*.sqlite" +msgstr "" + +msgid "ESRI Personal Geodatabase (*.mdb)|*.mdb" +msgstr "" + +msgid "Geography Markup Language (*.gml)|*.gml" +msgstr "" + +msgid "Keyhole Markup Language (*.kml)|*.kml" +msgstr "" + +msgid "MapInfo (*.tab;*.mif;*.mid)|*.tab;*.mif;*.mid" +msgstr "" + +msgid "dBase Database File (*.dbf)|*.dbf" +msgstr "" + +msgid "Comma Separated Value (*.csv)|*.csv" +msgstr "" + +msgid "MS Excel (*.xls)|*.xls" +msgstr "" + +msgid "Open Document Spreadsheet (*.ods)|*.ods" +msgstr "" + +msgid "GeoDa Project File (*.gda)|*.gda" +msgstr "" + +msgid "Create Custom Breaks" +msgstr "" + +msgid "New" +msgstr "" + +msgid "Edit Title" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Assoc. Var." +msgstr "" + +msgid "Breaks" +msgstr "" + +msgid "User Defined" +msgstr "" + +msgid "Color Scheme" +msgstr "" + +msgid "sequential" +msgstr "" + +msgid "diverging" +msgstr "" + +msgid "thematic" +msgstr "" + +msgid "custom" +msgstr "" + +msgid "Categories" +msgstr "" + +msgid "uni. dist. Min" +msgstr "" + +msgid "Max" +msgstr "" + +msgid "Save Categories to Table" +msgstr "" + +msgid "Edit Custom Breaks" +msgstr "" + +msgid "Automatic Labels" +msgstr "" + +msgid "category 1" +msgstr "" + +msgid "break 0" +msgstr "" + +msgid "Copyright (C) year-year by Luc Anselin" +msgstr "" + +msgid "All Rights Reserved" +msgstr "" + +msgid "GeoDa maj.min.bld (type), day month year" +msgstr "" + +msgid "Stable Version and Bug Fixes Only" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "Set Display Precision:" +msgstr "" + +msgid "Always using fixed-point notation" +msgstr "" + +msgid "Number of Categories" +msgstr "" + +msgid "Min value of Y axis" +msgstr "" + +msgid "Max value of Y axis" +msgstr "" + +msgid "Adjust Value Range of Y Axis" +msgstr "" + +msgid "Intervals" +msgstr "" + +msgid "Intervals in the Histogram" +msgstr "" + +msgid "GeoDa could not find the required weights file." +msgstr "" + +msgid "Please specify weights in Tools > Weights Manager." +msgstr "" + +msgid "to define weights." +msgstr "" + +msgid "No Weights Found" +msgstr "" + +msgid "Variable" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Variable Setting" +msgstr "" + +msgid "Weights" +msgstr "" + +msgid "Distance" +msgstr "" + +msgid "1st Variable (X)" +msgstr "" + +msgid "2nd Variable (Y)" +msgstr "" + +msgid "Variable Settings" +msgstr "" + +msgid "Event Variable" +msgstr "" + +msgid "Base Variable" +msgstr "" + +msgid "Map Themes" +msgstr "" + +msgid "3rd Variable (Z)" +msgstr "" + +msgid "4th Variable" +msgstr "" + +msgid "Weights File Creation" +msgstr "" + +msgid "Select ID Variable" +msgstr "" + +msgid "&Add ID Variable..." +msgstr "" + +msgid "Queen contiguity" +msgstr "" + +msgid "Order of contiguity" +msgstr "" + +msgid "Rook contiguity" +msgstr "" + +msgid "Include lower orders" +msgstr "" + +msgid "Precision threshold" +msgstr "" + +msgid "Contiguity Weight" +msgstr "" + +msgid "Distance Weight" +msgstr "" + +msgid "Variables:" +msgstr "" + +msgid "X-coordinate variable" +msgstr "" + +msgid "Y-coordinate variable" +msgstr "" + +msgid " Distance metric: " +msgstr "" + +msgid "Geometric centroids" +msgstr "" + +msgid "Transformation: " +msgstr "" + +msgid "Distance metric: " +msgstr "" + +msgid "Variables" +msgstr "" + +msgid "Method:" +msgstr "" + +msgid "Specify bandwidth" +msgstr "" + +msgid "Use inverse distance?" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Distance band" +msgstr "" + +msgid "Number of neighbors" +msgstr "" + +msgid "K-Nearest neighbors" +msgstr "" + +msgid "Kernel function" +msgstr "" + +msgid "Diagonal weights = 1" +msgstr "" + +msgid "Apply kernel to diagonal weights" +msgstr "" + +msgid "Adaptive bandwidth" +msgstr "" + +msgid "Use max knn distance as bandwidth" +msgstr "" + +msgid "Adaptive kernel" +msgstr "" + +msgid "Create" +msgstr "" + +msgid "Add New ID Variable" +msgstr "" + +msgid "Enter new ID variable name:" +msgstr "" + +msgid "POLY&ID" +msgstr "" + +msgid "Existing Variables" +msgstr "" + +msgid "New Selection" +msgstr "" + +msgid "New selection" +msgstr "" + +msgid "Select From Current Selection" +msgstr "" + +msgid "Select from current selection" +msgstr "" + +msgid "Append To Current Selection" +msgstr "" + +msgid "Append to current selection" +msgstr "" + +msgid "Selection Variable" +msgstr "" + +msgid "Select All In Range" +msgstr "" + +msgid "<=" +msgstr "" + +msgid "choose a variable" +msgstr "" + +msgid "Select All Undefined" +msgstr "" + +msgid "Add Neighbors To Selection" +msgstr "" + +msgid "Selection" +msgstr "" + +msgid "Target Variable" +msgstr "" + +msgid "Selected =" +msgstr "" + +msgid "Unselected =" +msgstr "" + +msgid "(Leave empty for undefined values)" +msgstr "" + +msgid "Appl&y" +msgstr "" + +msgid "Assign Values to Currently Selected / Unselected" +msgstr "" + +msgid "Convert ASCII to SHP" +msgstr "" + +msgid "Input file (text file)" +msgstr "" + +msgid "Output file (*.shp)" +msgstr "" + +msgid "X-coord" +msgstr "" + +msgid "Y-coord" +msgstr "" + +msgid "C&reate" +msgstr "" + +msgid "&Close" +msgstr "" + +msgid "Exporting Shape to Boundary" +msgstr "" + +msgid "Input datasource" +msgstr "" + +msgid "Output file (text file)" +msgstr "" + +msgid "Key" +msgstr "" + +msgid "Type 1" +msgstr "" + +msgid "Type 1a" +msgstr "" + +msgid "Type 2" +msgstr "" + +msgid "Type 2a" +msgstr "" + +msgid "Produce bounding-box file?" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "Set Number of Permutation" +msgstr "" + +msgid "What windows to open?" +msgstr "" + +msgid "Significance Map" +msgstr "" + +msgid "Cluster Map " +msgstr "" + +msgid "show normal distribution p-val map" +msgstr "" + +msgid "using row-standardized weights" +msgstr "" + +msgid "Gi cluster map, pseudo p-val" +msgstr "" + +msgid "Gi* cluster map, pseudo p-val" +msgstr "" + +msgid "show significance maps" +msgstr "" + +msgid "show normal distribution p-val maps" +msgstr "" + +msgid "weights:" +msgstr "" + +msgid "row-standardized" +msgstr "" + +msgid "binary" +msgstr "" + +msgid "Local G Statistics Maps" +msgstr "" + +msgid "Result" +msgstr "" + +msgid "Add new column to table" +msgstr "" + +msgid "=" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "mean" +msgstr "" + +msgid "standard deviation" +msgstr "" + +msgid "Variable / Constant" +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "Open weights file" +msgstr "" + +msgid "Use row-standardized weights" +msgstr "" + +msgid "Include diagonal of weights matrix" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Variable Name" +msgstr "" + +msgid "SELECTED" +msgstr "" + +msgid "&Cancel" +msgstr "" + +msgid "Exclude" +msgstr "" + +msgid ">>" +msgstr "" + +msgid ">" +msgstr "" + +msgid "<" +msgstr "" + +msgid "<<" +msgstr "" + +msgid "Include" +msgstr "" + +msgid "Dependent Variable" +msgstr "" + +msgid "Covariates" +msgstr "" + +msgid "Weights File" +msgstr "" + +msgid "Classic " +msgstr "" + +msgid "Spatial Lag" +msgstr "" + +msgid "Spatial Error" +msgstr "" + +msgid "Pred. Val. and Res." +msgstr "" + +msgid "Coeff. Var. Mat." +msgstr "" + +msgid "White Test" +msgstr "" + +msgid "Models" +msgstr "" + +msgid "Progress" +msgstr "" + +msgid "&Run" +msgstr "" + +msgid "&Save to Table" +msgstr "" + +msgid "Save to File" +msgstr "" + +msgid "Re&set" +msgstr "" + +msgid "Regression Report" +msgstr "" + +msgid "Creating Grid" +msgstr "" + +msgid "Grid Bounding Box" +msgstr "" + +msgid "Specify manually" +msgstr "" + +msgid "X-coordinate" +msgstr "" + +msgid "Y-coordinate" +msgstr "" + +msgid "Lower-left corner" +msgstr "" + +msgid "Upper-right corner" +msgstr "" + +msgid "Read from an ASCII file" +msgstr "" + +msgid "Use the bounding box of shape datasource" +msgstr "" + +msgid "Grid Size" +msgstr "" + +msgid "Number of Rows" +msgstr "" + +msgid "Number of Columns" +msgstr "" + +msgid "Convert Boundary to Shape Datasource" +msgstr "" + +msgid "Axis Selection" +msgstr "" + +msgid "X Variable" +msgstr "" + +msgid "Y Variable" +msgstr "" + +msgid "Z Variable" +msgstr "" + +msgid "Data Point" +msgstr "" + +msgid "Project to Z-Y" +msgstr "" + +msgid "Project to X-Z" +msgstr "" + +msgid "Project to X-Y" +msgstr "" + +msgid "Select, hold CTRL for brushing" +msgstr "" + +msgid "X" +msgstr "" + +msgid "Y" +msgstr "" + +msgid "Z" +msgstr "" + +msgid "Zoom : press right-mouse button" +msgstr "" + +msgid "Welcome to GeoDa 1.8.16" +msgstr "" + +msgid "Please click to choose a highlighting style in GeoDa:" +msgstr "" + +msgid "Don't show this dialog again (You can always change this setting using menu: File->Preferences)" +msgstr "" + +msgid "Input file " +msgstr "" + +msgid "Data Source Overview/Help: " +msgstr "" + +msgid "File" +msgstr "" + +msgid "Database Type" +msgstr "" + +msgid "Database Host" +msgstr "" + +msgid "Database Port" +msgstr "" + +msgid "Database/Instance Name" +msgstr "" + +msgid "User name" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Table Name" +msgstr "" + +msgid "Database" +msgstr "" + +msgid "GeoJson URL" +msgstr "" + +msgid "WFS URL" +msgstr "" + +msgid "Web" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "App Key" +msgstr "" + +msgid "Get a free Carto account: " +msgstr "" + +msgid "Carto" +msgstr "" + +msgid "Recent" +msgstr "" + +msgid "Sample Data" +msgstr "" + +msgid "Don't show Recent/Sample Data panel again" +msgstr "" + +msgid "Connect" +msgstr "" + +msgid "Connect to Data Source" +msgstr "" + +msgid "Select encoding (optional): " +msgstr "" + +msgid "Japanese (Shift_JIS)" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Time Setup" +msgstr "" + +msgid "File Path" +msgstr "" + +msgid "Database Name/Instance" +msgstr "" + +msgid "CRS (proj4 format)" +msgstr "" + +msgid "Load CRS from a data source" +msgstr "" + +msgid "Create a project file?" +msgstr "" + +msgid "New project file:" +msgstr "" + +msgid "New datasource:" +msgstr "" + +msgid "Save Projet File As" +msgstr "" + +msgid "\nSelect whether to use periods or commas as\nseparators in numeric fields. \n\nE.g., by default, GeoDa uses commas to\nseparate thousands and periods\nfor decimals (1,000.00).\n " +msgstr "" + +msgid "Decimal:" +msgstr "" + +msgid "Thousands:" +msgstr "" + +msgid "Reset to default" +msgstr "" + +msgid "Set Number Separators in Table" +msgstr "" + +msgid "Title of Visualization" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Get a free GeoDa-Web account: " +msgstr "" + +msgid "Publish to GeoDa-Web" +msgstr "" + +msgid "Basemap Sources: (Format: group&name.basemap&name,basemap&url)" +msgstr "" + +msgid "Basemap Parameters:" +msgstr "" + +msgid "HERE App ID" +msgstr "" + +msgid "HERE App Key" +msgstr "" + +msgid "Get a free Nokia/HERE account: " +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Basemap Configuration Dialog" +msgstr "" + +msgid "observation:" +msgstr "" + +msgid "obs#" +msgstr "" + +msgid "value:" +msgstr "" + +msgid "value" +msgstr "" + +msgid "min:" +msgstr "" + +msgid "max:" +msgstr "" + +msgid "Loop" +msgstr "" + +msgid "Reverse" +msgstr "" + +msgid "Speed" +msgstr "" + +msgid "Cumulative" +msgstr "" + +msgid "Ascending order" +msgstr "" + +msgid "Descending order" +msgstr "" + +msgid "Animation" +msgstr "" + +msgid "Current time:" +msgstr "" + +msgid "time" +msgstr "" + +msgid "First row of CSV file" +msgstr "" + +msgid "First line of CSV is variable names?" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "CSV Contains Variable Names?" +msgstr "" + +msgid "Include Variable Names" +msgstr "" + +msgid "Save Table As CSV File" +msgstr "" + +msgid "Ungrouped Variables" +msgstr "" + +msgid "New Group Details" +msgstr "" + +msgid "name:" +msgstr "" + +msgid "numeric" +msgstr "" + +msgid "5 of 5 variables needed" +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Move Up" +msgstr "" + +msgid "Move Down" +msgstr "" + +msgid "Grouped Variables" +msgstr "" + +msgid "Load time definition from project file." +msgstr "" + +msgid "Save Space-Time Table/Weights" +msgstr "" + +msgid "About DBF Viewer" +msgstr "" + +msgid "Copyright (C) 1998-2011\nGeoDa Center for Geospatial Analysis and Computation\nand Arizona Board of Regents\nAll Rights Reserved" +msgstr "" + +msgid "DBF Viewer 0.8 (July 29, 2011)" +msgstr "" + +msgid "Select variables to delete " +msgstr "" + +msgid "Message area" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Insert before" +msgstr "" + +msgid "Length (max 254)" +msgstr "" + +msgid "Decimals (max 15)" +msgstr "" + +msgid "Displayed decimals places" +msgstr "" + +msgid "maximum" +msgstr "" + +msgid "minimum" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Displayed decimal places" +msgstr "" + +msgid "Displayed decimals" +msgstr "" + +msgid "Column Number (from 0)" +msgstr "" + +msgid "Width in pixels" +msgstr "" + +msgid "Resize" +msgstr "" + +msgid "Manual Resize Column" +msgstr "" + +msgid "DBF File Information" +msgstr "" + +msgid "version:" +msgstr "" + +msgid "0x03 (dBASE III+)" +msgstr "" + +msgid "year:" +msgstr "" + +msgid "month:" +msgstr "" + +msgid "day:" +msgstr "" + +msgid "fields:" +msgstr "" + +msgid "records:" +msgstr "" + +msgid "file size:" +msgstr "" + +msgid "Select datasource" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Stack" +msgstr "" + +msgid "Merge by key values" +msgstr "" + +msgid "current table key" +msgstr "" + +msgid "import table key" +msgstr "" + +msgid "Merge by record order" +msgstr "" + +msgid "Use existing field name" +msgstr "" + +msgid "Parameters" +msgstr "" + +msgid "&Merge" +msgstr "" + +msgid "Select variable for dissolving:" +msgstr "" + +msgid "Select variables:" +msgstr "" + +msgid "Count" +msgstr "" + +msgid "Average" +msgstr "" + +msgid "Min" +msgstr "" + +msgid "Sum" +msgstr "" + +msgid "Attributes (Optional)" +msgstr "" + +msgid "Select key:" +msgstr "" + +msgid "Select fields:" +msgstr "" + +msgid "Expression" +msgstr "" + +msgid "Make selection from expression " +msgstr "" + +msgid "Select" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Assign To Target" +msgstr "" + +msgid "Open" +msgstr "" + +msgid "Tools" +msgstr "" + +msgid "Maps and Rates" +msgstr "" + +msgid "Category Editor" +msgstr "" + +msgid "Cluster Maps" +msgstr "" + +msgid "Invert Select" +msgstr "" + +msgid "Add Map Layer" +msgstr "" + +msgid "Map Layer Settings" +msgstr "" + +msgid "Zoom In" +msgstr "" + +msgid "Zoom Out" +msgstr "" + +msgid "Pan" +msgstr "" + +msgid "Full Extent" +msgstr "" + +msgid "Base Map " +msgstr "" + +msgid "Refresh" +msgstr "" + diff --git a/ogl/basic.cpp b/ogl/basic.cpp index 717d87f14..673732e75 100644 --- a/ogl/basic.cpp +++ b/ogl/basic.cpp @@ -271,8 +271,8 @@ wxShape::wxShape(wxShapeCanvas *can) m_pen = g_oglBlackPen; m_brush = wxWHITE_BRUSH; m_font = g_oglNormalFont; - m_textColour = wxT("BLACK"); - m_textColourName = wxT("BLACK"); + m_textColour = "BLACK"; + m_textColourName = "BLACK"; m_visible = false; m_selected = false; m_attachmentMode = ATTACHMENT_MODE_NONE; @@ -291,7 +291,7 @@ wxShape::wxShape(wxShapeCanvas *can) m_shadowBrush = wxBLACK_BRUSH; m_textMarginX = 5; m_textMarginY = 5; - m_regionName = wxT("0"); + m_regionName = "0"; m_centreResize = true; m_maintainAspectRatio = false; m_highlighted = false; @@ -305,10 +305,10 @@ wxShape::wxShape(wxShapeCanvas *can) // the region eventually (the duplication is for compatibility) wxShapeRegion *region = new wxShapeRegion; m_regions.Append(region); - region->SetName(wxT("0")); + region->SetName("0"); region->SetFont(g_oglNormalFont); region->SetFormatMode(FORMAT_CENTRE_HORIZ | FORMAT_CENTRE_VERT); - region->SetColour(wxT("BLACK")); + region->SetColour("BLACK"); } wxShape::~wxShape() @@ -808,7 +808,7 @@ void wxShape::NameRegions(const wxString& parentName) for (int i = 0; i < n; i++) { if (parentName.Length() > 0) - buff << parentName << wxT(".") << i; + buff << parentName << "." << i; else buff << i; SetRegionName(buff, i); @@ -820,7 +820,7 @@ void wxShape::NameRegions(const wxString& parentName) buff.Empty(); wxShape *child = (wxShape *)node->GetData(); if (parentName.Length() > 0) - buff << parentName << wxT(".") << j; + buff << parentName << "." << j; else buff << j; child->NameRegions(buff); @@ -1686,27 +1686,27 @@ void wxShape::RemoveLine(wxLineShape *line) #if wxUSE_PROLOGIO void wxShape::WriteAttributes(wxExpr *clause) { - clause->AddAttributeValueString(_T("type"), GetClassInfo()->GetClassName()); - clause->AddAttributeValue(_T("id"), m_id); + clause->AddAttributeValueString("type", GetClassInfo()->GetClassName()); + clause->AddAttributeValue("id", m_id); if (m_pen) { int penWidth = m_pen->GetWidth(); int penStyle = m_pen->GetStyle(); if (penWidth != 1) - clause->AddAttributeValue(_T("pen_width"), (long)penWidth); + clause->AddAttributeValue("pen_width", (long)penWidth); if (penStyle != wxSOLID) - clause->AddAttributeValue(_T("pen_style"), (long)penStyle); + clause->AddAttributeValue("pen_style", (long)penStyle); wxString penColour = wxTheColourDatabase->FindName(m_pen->GetColour()); if (penColour == wxEmptyString) { wxString hex(oglColourToHex(m_pen->GetColour())); - hex = wxString(_T("#")) + hex; - clause->AddAttributeValueString(_T("pen_colour"), hex); + hex = wxString("#") + hex; + clause->AddAttributeValueString("pen_colour", hex); } - else if (penColour != _T("BLACK")) - clause->AddAttributeValueString(_T("pen_colour"), penColour); + else if (penColour != "BLACK") + clause->AddAttributeValueString("pen_colour", penColour); } if (m_brush) @@ -1716,14 +1716,14 @@ void wxShape::WriteAttributes(wxExpr *clause) if (brushColour == wxEmptyString) { wxString hex(oglColourToHex(m_brush->GetColour())); - hex = wxString(_T("#")) + hex; - clause->AddAttributeValueString(_T("brush_colour"), hex); + hex = wxString("#") + hex; + clause->AddAttributeValueString("brush_colour", hex); } - else if (brushColour != _T("WHITE")) - clause->AddAttributeValueString(_T("brush_colour"), brushColour); + else if (brushColour != "WHITE") + clause->AddAttributeValueString("brush_colour", brushColour); if (m_brush->GetStyle() != wxSOLID) - clause->AddAttributeValue(_T("brush_style"), (long)m_brush->GetStyle()); + clause->AddAttributeValue("brush_style", (long)m_brush->GetStyle()); } // Output line ids @@ -1740,40 +1740,40 @@ void wxShape::WriteAttributes(wxExpr *clause) list->Append(id_expr); node = node->GetNext(); } - clause->AddAttributeValue(_T("arcs"), list); + clause->AddAttributeValue("arcs", list); } // Miscellaneous members if (m_attachmentMode != 0) - clause->AddAttributeValue(_T("use_attachments"), (long)m_attachmentMode); + clause->AddAttributeValue("use_attachments", (long)m_attachmentMode); if (m_sensitivity != OP_ALL) - clause->AddAttributeValue(_T("sensitivity"), (long)m_sensitivity); + clause->AddAttributeValue("sensitivity", (long)m_sensitivity); if (!m_spaceAttachments) - clause->AddAttributeValue(_T("space_attachments"), (long)m_spaceAttachments); + clause->AddAttributeValue("space_attachments", (long)m_spaceAttachments); if (m_fixedWidth) - clause->AddAttributeValue(_T("fixed_width"), (long)m_fixedWidth); + clause->AddAttributeValue("fixed_width", (long)m_fixedWidth); if (m_fixedHeight) - clause->AddAttributeValue(_T("fixed_height"), (long)m_fixedHeight); + clause->AddAttributeValue("fixed_height", (long)m_fixedHeight); if (m_shadowMode != SHADOW_NONE) - clause->AddAttributeValue(_T("shadow_mode"), (long)m_shadowMode); + clause->AddAttributeValue("shadow_mode", (long)m_shadowMode); if (m_centreResize != true) - clause->AddAttributeValue(_T("centre_resize"), (long)0); - clause->AddAttributeValue(_T("maintain_aspect_ratio"), (long) m_maintainAspectRatio); + clause->AddAttributeValue("centre_resize", (long)0); + clause->AddAttributeValue("maintain_aspect_ratio", (long) m_maintainAspectRatio); if (m_highlighted != false) - clause->AddAttributeValue(_T("hilite"), (long)m_highlighted); + clause->AddAttributeValue("hilite", (long)m_highlighted); if (m_parent) // For composite objects - clause->AddAttributeValue(_T("parent"), (long)m_parent->GetId()); + clause->AddAttributeValue("parent", (long)m_parent->GetId()); if (m_rotation != 0.0) - clause->AddAttributeValue(_T("rotation"), m_rotation); + clause->AddAttributeValue("rotation", m_rotation); if (!this->IsKindOf(CLASSINFO(wxLineShape))) { - clause->AddAttributeValue(_T("neck_length"), (long) m_branchNeckLength); - clause->AddAttributeValue(_T("stem_length"), (long) m_branchStemLength); - clause->AddAttributeValue(_T("branch_spacing"), (long) m_branchSpacing); - clause->AddAttributeValue(_T("branch_style"), (long) m_branchStyle); + clause->AddAttributeValue("neck_length", (long) m_branchNeckLength); + clause->AddAttributeValue("stem_length", (long) m_branchStemLength); + clause->AddAttributeValue("branch_spacing", (long) m_branchSpacing); + clause->AddAttributeValue("branch_style", (long) m_branchStyle); } // Write user-defined attachment points, if any @@ -1791,7 +1791,7 @@ void wxShape::WriteAttributes(wxExpr *clause) attachmentList->Append(pointExpr); node = node->GetNext(); } - clause->AddAttributeValue(_T("user_attachments"), attachmentList); + clause->AddAttributeValue("user_attachments", attachmentList); } // Write text regions @@ -1809,8 +1809,8 @@ void wxShape::WriteRegions(wxExpr *clause) while (node) { wxShapeRegion *region = (wxShapeRegion *)node->GetData(); - wxSprintf(regionNameBuf, _T("region%d"), regionNo); - wxSprintf(textNameBuf, _T("text%d"), regionNo); + wxSprintf(regionNameBuf, "region%d", regionNo); + wxSprintf(textNameBuf, "text%d", regionNo); // Original text and region attributes: // region1 = (regionName regionText x y width height minWidth minHeight proportionX proportionY @@ -1868,15 +1868,15 @@ void wxShape::WriteRegions(wxExpr *clause) void wxShape::ReadAttributes(wxExpr *clause) { - clause->GetAttributeValue(_T("id"), m_id); + clause->GetAttributeValue("id", m_id); wxRegisterId(m_id); - clause->GetAttributeValue(_T("x"), m_xpos); - clause->GetAttributeValue(_T("y"), m_ypos); + clause->GetAttributeValue("x", m_xpos); + clause->GetAttributeValue("y", m_ypos); // Input text strings (FOR COMPATIBILITY WITH OLD FILES ONLY. SEE REGION CODE BELOW.) ClearText(); - wxExpr *strings = clause->AttributeValue(_T("text")); + wxExpr *strings = clause->AttributeValue("text"); if (strings && strings->Type() == wxExprList) { m_formatted = true; // Assume text is formatted unless we prove otherwise @@ -1932,71 +1932,71 @@ void wxShape::ReadAttributes(wxExpr *clause) int brush_style = wxSOLID; m_attachmentMode = ATTACHMENT_MODE_NONE; - clause->GetAttributeValue(_T("pen_colour"), pen_string); - clause->GetAttributeValue(_T("text_colour"), m_textColourName); + clause->GetAttributeValue("pen_colour", pen_string); + clause->GetAttributeValue("text_colour", m_textColourName); SetTextColour(m_textColourName); - clause->GetAttributeValue(_T("region_name"), m_regionName); + clause->GetAttributeValue("region_name", m_regionName); - clause->GetAttributeValue(_T("brush_colour"), brush_string); - clause->GetAttributeValue(_T("pen_width"), pen_width); - clause->GetAttributeValue(_T("pen_style"), pen_style); - clause->GetAttributeValue(_T("brush_style"), brush_style); + clause->GetAttributeValue("brush_colour", brush_string); + clause->GetAttributeValue("pen_width", pen_width); + clause->GetAttributeValue("pen_style", pen_style); + clause->GetAttributeValue("brush_style", brush_style); int iVal = (int) m_attachmentMode; - clause->GetAttributeValue(_T("use_attachments"), iVal); + clause->GetAttributeValue("use_attachments", iVal); m_attachmentMode = iVal; - clause->GetAttributeValue(_T("sensitivity"), m_sensitivity); + clause->GetAttributeValue("sensitivity", m_sensitivity); iVal = (int) m_spaceAttachments; - clause->GetAttributeValue(_T("space_attachments"), iVal); + clause->GetAttributeValue("space_attachments", iVal); m_spaceAttachments = (iVal != 0); iVal = (int) m_fixedWidth; - clause->GetAttributeValue(_T("fixed_width"), iVal); + clause->GetAttributeValue("fixed_width", iVal); m_fixedWidth = (iVal != 0); iVal = (int) m_fixedHeight; - clause->GetAttributeValue(_T("fixed_height"), iVal); + clause->GetAttributeValue("fixed_height", iVal); m_fixedHeight = (iVal != 0); - clause->GetAttributeValue(_T("format_mode"), m_formatMode); - clause->GetAttributeValue(_T("shadow_mode"), m_shadowMode); + clause->GetAttributeValue("format_mode", m_formatMode); + clause->GetAttributeValue("shadow_mode", m_shadowMode); iVal = m_branchNeckLength; - clause->GetAttributeValue(_T("neck_length"), iVal); + clause->GetAttributeValue("neck_length", iVal); m_branchNeckLength = iVal; iVal = m_branchStemLength; - clause->GetAttributeValue(_T("stem_length"), iVal); + clause->GetAttributeValue("stem_length", iVal); m_branchStemLength = iVal; iVal = m_branchSpacing; - clause->GetAttributeValue(_T("branch_spacing"), iVal); + clause->GetAttributeValue("branch_spacing", iVal); m_branchSpacing = iVal; - clause->GetAttributeValue(_T("branch_style"), m_branchStyle); + clause->GetAttributeValue("branch_style", m_branchStyle); iVal = (int) m_centreResize; - clause->GetAttributeValue(_T("centre_resize"), iVal); + clause->GetAttributeValue("centre_resize", iVal); m_centreResize = (iVal != 0); iVal = (int) m_maintainAspectRatio; - clause->GetAttributeValue(_T("maintain_aspect_ratio"), iVal); + clause->GetAttributeValue("maintain_aspect_ratio", iVal); m_maintainAspectRatio = (iVal != 0); iVal = (int) m_highlighted; - clause->GetAttributeValue(_T("hilite"), iVal); + clause->GetAttributeValue("hilite", iVal); m_highlighted = (iVal != 0); - clause->GetAttributeValue(_T("rotation"), m_rotation); + clause->GetAttributeValue("rotation", m_rotation); if (pen_string == wxEmptyString) - pen_string = _T("BLACK"); + pen_string = "BLACK"; if (brush_string == wxEmptyString) - brush_string = _T("WHITE"); + brush_string = "WHITE"; if (pen_string.GetChar(0) == '#') { @@ -2021,11 +2021,11 @@ void wxShape::ReadAttributes(wxExpr *clause) m_brush = wxWHITE_BRUSH; int point_size = 10; - clause->GetAttributeValue(_T("point_size"), point_size); + clause->GetAttributeValue("point_size", point_size); SetFont(oglMatchFont(point_size)); // Read user-defined attachment points, if any - wxExpr *attachmentList = clause->AttributeValue(_T("user_attachments")); + wxExpr *attachmentList = clause->AttributeValue("user_attachments"); if (attachmentList) { wxExpr *pointExpr = attachmentList->GetFirst(); @@ -2062,8 +2062,8 @@ void wxShape::ReadRegions(wxExpr *clause) wxExpr *regionExpr; wxExpr *textExpr = NULL; - wxSprintf(regionNameBuf, _T("region%d"), regionNo); - wxSprintf(textNameBuf, _T("text%d"), regionNo); + wxSprintf(regionNameBuf, "region%d", regionNo); + wxSprintf(textNameBuf, "text%d", regionNo); m_formatted = true; // Assume text is formatted unless we prove otherwise @@ -2140,7 +2140,7 @@ void wxShape::ReadRegions(wxExpr *clause) regionTextColour = colourExpr->StringValue(); } else - regionTextColour = _T("BLACK"); + regionTextColour = "BLACK"; if (penColourExpr) penColour = penColourExpr->StringValue(); @@ -2221,8 +2221,8 @@ void wxShape::ReadRegions(wxExpr *clause) } regionNo ++; - wxSprintf(regionNameBuf, _T("region%d"), regionNo); - wxSprintf(textNameBuf, _T("text%d"), regionNo); + wxSprintf(regionNameBuf, "region%d", regionNo); + wxSprintf(textNameBuf, "text%d", regionNo); } // Compatibility: check for no regions (old file). @@ -2233,7 +2233,7 @@ void wxShape::ReadRegions(wxExpr *clause) !this->IsKindOf(CLASSINFO(wxCompositeShape))) { wxShapeRegion *newRegion = new wxShapeRegion; - newRegion->SetName(_T("0")); + newRegion->SetName("0"); m_regions.Append((wxObject *)newRegion); if (m_text.GetCount() > 0) { @@ -2979,7 +2979,7 @@ bool wxShape::GetBranchingAttachmentInfo(int attachment, wxRealPoint& root, wxRe } default: { - wxFAIL_MSG( wxT("Unrecognised attachment point in GetBranchingAttachmentInfo.") ); + wxFAIL_MSG( "Unrecognised attachment point in GetBranchingAttachmentInfo." ); break; } } @@ -3038,7 +3038,7 @@ bool wxShape::GetBranchingAttachmentPoint(int attachment, int n, wxRealPoint& pt } default: { - wxFAIL_MSG( wxT("Unrecognised attachment point in GetBranchingAttachmentPoint.") ); + wxFAIL_MSG( "Unrecognised attachment point in GetBranchingAttachmentPoint." ); break; } } @@ -3103,7 +3103,7 @@ wxRealPoint wxShape::GetBranchingAttachmentRoot(int attachment) } default: { - wxFAIL_MSG( wxT("Unrecognised attachment point in GetBranchingAttachmentRoot.") ); + wxFAIL_MSG( "Unrecognised attachment point in GetBranchingAttachmentRoot." ); break; } } diff --git a/ogl/basic2.cpp b/ogl/basic2.cpp index 2661d2a11..0dcd764d7 100644 --- a/ogl/basic2.cpp +++ b/ogl/basic2.cpp @@ -573,8 +573,8 @@ void wxPolygonShape::WriteAttributes(wxExpr *clause) { wxShape::WriteAttributes(clause); - clause->AddAttributeValue(wxT("x"), m_xpos); - clause->AddAttributeValue(wxT("y"), m_ypos); + clause->AddAttributeValue("x", m_xpos); + clause->AddAttributeValue("y", m_ypos); // Make a list of lists for the coordinates wxExpr *list = new wxExpr(wxExprList); @@ -592,7 +592,7 @@ void wxPolygonShape::WriteAttributes(wxExpr *clause) node = node->GetNext(); } - clause->AddAttributeValue(wxT("points"), list); + clause->AddAttributeValue("points", list); // Save the original (unscaled) points list = new wxExpr(wxExprList); @@ -609,7 +609,7 @@ void wxPolygonShape::WriteAttributes(wxExpr *clause) node = node->GetNext(); } - clause->AddAttributeValue(wxT("m_originalPoints"), list); + clause->AddAttributeValue("m_originalPoints", list); } void wxPolygonShape::ReadAttributes(wxExpr *clause) @@ -621,7 +621,7 @@ void wxPolygonShape::ReadAttributes(wxExpr *clause) m_originalPoints = new wxList; wxExpr *points_list = NULL; - clause->AssignAttributeValue(wxT("points"), &points_list); + clause->AssignAttributeValue("points", &points_list); // If no points_list, don't crash!! Assume a diamond instead. double the_height = 100.0; @@ -663,7 +663,7 @@ void wxPolygonShape::ReadAttributes(wxExpr *clause) } points_list = NULL; - clause->AssignAttributeValue(wxT("m_originalPoints"), &points_list); + clause->AssignAttributeValue("m_originalPoints", &points_list); // If no points_list, don't crash!! Assume a diamond instead. if (!points_list) @@ -931,21 +931,21 @@ bool wxRectangleShape::GetPerimeterPoint(double WXUNUSED(x1), double WXUNUSED(y1 void wxRectangleShape::WriteAttributes(wxExpr *clause) { wxShape::WriteAttributes(clause); - clause->AddAttributeValue(wxT("x"), m_xpos); - clause->AddAttributeValue(wxT("y"), m_ypos); + clause->AddAttributeValue("x", m_xpos); + clause->AddAttributeValue("y", m_ypos); - clause->AddAttributeValue(wxT("width"), m_width); - clause->AddAttributeValue(wxT("height"), m_height); + clause->AddAttributeValue("width", m_width); + clause->AddAttributeValue("height", m_height); if (m_cornerRadius != 0.0) - clause->AddAttributeValue(wxT("corner"), m_cornerRadius); + clause->AddAttributeValue("corner", m_cornerRadius); } void wxRectangleShape::ReadAttributes(wxExpr *clause) { wxShape::ReadAttributes(clause); - clause->AssignAttributeValue(wxT("width"), &m_width); - clause->AssignAttributeValue(wxT("height"), &m_height); - clause->AssignAttributeValue(wxT("corner"), &m_cornerRadius); + clause->AssignAttributeValue("width", &m_width); + clause->AssignAttributeValue("height", &m_height); + clause->AssignAttributeValue("corner", &m_cornerRadius); // In case we're reading an old file, set the region's size if (m_regions.GetCount() == 1) @@ -1071,18 +1071,18 @@ void wxEllipseShape::SetSize(double x, double y, bool WXUNUSED(recursive)) void wxEllipseShape::WriteAttributes(wxExpr *clause) { wxShape::WriteAttributes(clause); - clause->AddAttributeValue(wxT("x"), m_xpos); - clause->AddAttributeValue(wxT("y"), m_ypos); + clause->AddAttributeValue("x", m_xpos); + clause->AddAttributeValue("y", m_ypos); - clause->AddAttributeValue(wxT("width"), m_width); - clause->AddAttributeValue(wxT("height"), m_height); + clause->AddAttributeValue("width", m_width); + clause->AddAttributeValue("height", m_height); } void wxEllipseShape::ReadAttributes(wxExpr *clause) { wxShape::ReadAttributes(clause); - clause->AssignAttributeValue(wxT("width"), &m_width); - clause->AssignAttributeValue(wxT("height"), &m_height); + clause->AssignAttributeValue("width", &m_width); + clause->AssignAttributeValue("height", &m_height); // In case we're reading an old file, set the region's size if (m_regions.GetCount() == 1) @@ -1763,10 +1763,10 @@ wxShapeRegion::wxShapeRegion() m_regionProportionY = -1.0; m_formatMode = FORMAT_CENTRE_HORIZ | FORMAT_CENTRE_VERT; m_regionName = wxEmptyString; - m_textColour = wxT("BLACK"); - m_penColour = wxT("BLACK"); + m_textColour = "BLACK"; + m_penColour = "BLACK"; m_penStyle = wxSOLID; - m_actualColourObject = wxTheColourDatabase->Find(wxT("BLACK")); + m_actualColourObject = wxTheColourDatabase->Find("BLACK"); m_actualPenObject = NULL; } @@ -1883,7 +1883,7 @@ wxPen *wxShapeRegion::GetActualPen() return m_actualPenObject; if (!m_penColour) return NULL; - if (m_penColour == wxT("Invisible")) + if (m_penColour == "Invisible") return NULL; m_actualPenObject = wxThePenList->FindOrCreatePen(m_penColour, 1, m_penStyle); return m_actualPenObject; diff --git a/ogl/bmpshape.cpp b/ogl/bmpshape.cpp index 1ff0bbd5a..836f41a5a 100644 --- a/ogl/bmpshape.cpp +++ b/ogl/bmpshape.cpp @@ -131,13 +131,13 @@ void wxBitmapShape::WriteAttributes(wxExpr *clause) // Can't really save the bitmap; so instantiate the bitmap // at a higher level in the application, from a symbol library. wxRectangleShape::WriteAttributes(clause); - clause->AddAttributeValueString(_T("filename"), m_filename); + clause->AddAttributeValueString("filename", m_filename); } void wxBitmapShape::ReadAttributes(wxExpr *clause) { wxRectangleShape::ReadAttributes(clause); - clause->GetAttributeValue(_T("filename"), m_filename); + clause->GetAttributeValue("filename", m_filename); } #endif diff --git a/ogl/canvas.cpp b/ogl/canvas.cpp index cbfe140f1..9deb85300 100644 --- a/ogl/canvas.cpp +++ b/ogl/canvas.cpp @@ -45,7 +45,7 @@ BEGIN_EVENT_TABLE(wxShapeCanvas, wxScrolledWindow) EVT_MOUSE_EVENTS(wxShapeCanvas::OnMouseEvent) END_EVENT_TABLE() -const wxChar* wxShapeCanvasNameStr = wxT("shapeCanvas"); +const wxChar* wxShapeCanvasNameStr = wxT("shapeCanvas"); // need to use wxT() // Object canvas wxShapeCanvas::wxShapeCanvas(wxWindow *parent, wxWindowID id, diff --git a/ogl/composit.cpp b/ogl/composit.cpp index 12cdc12d6..bbb076984 100644 --- a/ogl/composit.cpp +++ b/ogl/composit.cpp @@ -607,7 +607,7 @@ void wxCompositeShape::WriteAttributes(wxExpr *clause) while (node) { wxOGLConstraint *constraint = (wxOGLConstraint *)node->GetData(); - wxSprintf(m_constraintNameBuf, _T("constraint%d"), constraintNo); + wxSprintf(m_constraintNameBuf, "constraint%d", constraintNo); // Each constraint is stored in the form // (type name id xspacing yspacing m_constrainingObjectId constrainedObjectIdList) @@ -644,7 +644,7 @@ void wxCompositeShape::WriteAttributes(wxExpr *clause) childrenExpr->Append(new wxExpr(child->GetId())); node = node->GetNext(); } - clause->AddAttributeValue(_T("children"), childrenExpr); + clause->AddAttributeValue("children", childrenExpr); // Write the ids of all the division images if (m_divisions.GetCount() > 0) @@ -657,7 +657,7 @@ void wxCompositeShape::WriteAttributes(wxExpr *clause) divisionsExpr->Append(new wxExpr(child->GetId())); node = node->GetNext(); } - clause->AddAttributeValue(_T("divisions"), divisionsExpr); + clause->AddAttributeValue("divisions", divisionsExpr); } } @@ -681,7 +681,7 @@ void wxCompositeShape::ReadConstraints(wxExpr *clause, wxExprDatabase *database) while (haveConstraints) { - wxSprintf(m_constraintNameBuf, _T("constraint%d"), constraintNo); + wxSprintf(m_constraintNameBuf, "constraint%d", constraintNo); wxExpr *constraintExpr = NULL; clause->GetAttributeValue(m_constraintNameBuf, &constraintExpr); if (!constraintExpr) @@ -710,25 +710,25 @@ void wxCompositeShape::ReadConstraints(wxExpr *clause, wxExprDatabase *database) cName = nameExpr->StringValue(); long cId = idExpr->IntegerValue(); - wxExpr *objExpr1 = database->HashFind(_T("node_image"), constrainingExpr->IntegerValue()); + wxExpr *objExpr1 = database->HashFind("node_image", constrainingExpr->IntegerValue()); if (objExpr1 && objExpr1->GetClientData()) m_constrainingObject = (wxShape *)objExpr1->GetClientData(); else - wxLogFatalError(wxT("Object graphics error: Couldn't find constraining image of composite.")); + wxLogFatalError("Object graphics error: Couldn't find constraining image of composite."); int i = 0; wxExpr *currentIdExpr = constrainedExpr->Nth(i); while (currentIdExpr) { long currentId = currentIdExpr->IntegerValue(); - wxExpr *objExpr2 = database->HashFind(_T("node_image"), currentId); + wxExpr *objExpr2 = database->HashFind("node_image", currentId); if (objExpr2 && objExpr2->GetClientData()) { m_constrainedObjects.Append((wxShape *)objExpr2->GetClientData()); } else { - wxLogFatalError(wxT("Object graphics error: Couldn't find constrained image of composite.")); + wxLogFatalError("Object graphics error: Couldn't find constrained image of composite."; } i ++; @@ -817,10 +817,10 @@ wxDivisionShape::wxDivisionShape() m_handleSide = DIVISION_SIDE_NONE; m_leftSidePen = wxBLACK_PEN; m_topSidePen = wxBLACK_PEN; - m_leftSideColour = wxT("BLACK"); - m_topSideColour = wxT("BLACK"); - m_leftSideStyle = wxT("Solid"); - m_topSideStyle = wxT("Solid"); + m_leftSideColour = "BLACK"; + m_topSideColour = "BLACK"; + m_leftSideStyle = "Solid"; + m_topSideStyle = "Solid"; ClearRegions(); } @@ -981,30 +981,30 @@ void wxDivisionShape::WriteAttributes(wxExpr *clause) wxCompositeShape::WriteAttributes(clause); if (m_leftSide) - clause->AddAttributeValue(_T("left_side"), (long)m_leftSide->GetId()); + clause->AddAttributeValue("left_side", (long)m_leftSide->GetId()); if (m_topSide) - clause->AddAttributeValue(_T("top_side"), (long)m_topSide->GetId()); + clause->AddAttributeValue("top_side", (long)m_topSide->GetId()); if (m_rightSide) - clause->AddAttributeValue(_T("right_side"), (long)m_rightSide->GetId()); + clause->AddAttributeValue("right_side", (long)m_rightSide->GetId()); if (m_bottomSide) - clause->AddAttributeValue(_T("bottom_side"), (long)m_bottomSide->GetId()); + clause->AddAttributeValue("bottom_side", (long)m_bottomSide->GetId()); - clause->AddAttributeValue(_T("handle_side"), (long)m_handleSide); - clause->AddAttributeValueString(_T("left_colour"), m_leftSideColour); - clause->AddAttributeValueString(_T("top_colour"), m_topSideColour); - clause->AddAttributeValueString(_T("left_style"), m_leftSideStyle); - clause->AddAttributeValueString(_T("top_style"), m_topSideStyle); + clause->AddAttributeValue("handle_side", (long)m_handleSide); + clause->AddAttributeValueString("left_colour", m_leftSideColour); + clause->AddAttributeValueString("top_colour", m_topSideColour); + clause->AddAttributeValueString("left_style", m_leftSideStyle); + clause->AddAttributeValueString("top_style", m_topSideStyle); } void wxDivisionShape::ReadAttributes(wxExpr *clause) { wxCompositeShape::ReadAttributes(clause); - clause->GetAttributeValue(_T("handle_side"), m_handleSide); - clause->GetAttributeValue(_T("left_colour"), m_leftSideColour); - clause->GetAttributeValue(_T("top_colour"), m_topSideColour); - clause->GetAttributeValue(_T("left_style"), m_leftSideStyle); - clause->GetAttributeValue(_T("top_style"), m_topSideStyle); + clause->GetAttributeValue("handle_side", m_handleSide); + clause->GetAttributeValue("left_colour", m_leftSideColour); + clause->GetAttributeValue("top_colour", m_topSideColour); + clause->GetAttributeValue("left_style", m_leftSideStyle); + clause->GetAttributeValue("top_style", m_topSideStyle); } #endif @@ -1564,11 +1564,11 @@ bool wxDivisionShape::ResizeAdjoining(int side, double newPos, bool test) class OGLPopupDivisionMenu : public wxMenu { public: OGLPopupDivisionMenu() : wxMenu() { - Append(DIVISION_MENU_SPLIT_HORIZONTALLY, wxT("Split horizontally")); - Append(DIVISION_MENU_SPLIT_VERTICALLY, wxT("Split vertically")); + Append(DIVISION_MENU_SPLIT_HORIZONTALLY, "Split horizontally"); + Append(DIVISION_MENU_SPLIT_VERTICALLY, "Split vertically"); AppendSeparator(); - Append(DIVISION_MENU_EDIT_LEFT_EDGE, wxT("Edit left edge")); - Append(DIVISION_MENU_EDIT_TOP_EDGE, wxT("Edit top edge")); + Append(DIVISION_MENU_EDIT_LEFT_EDGE, "Edit left edge"); + Append(DIVISION_MENU_EDIT_TOP_EDGE, "Edit top edge"); } void OnMenu(wxCommandEvent& event); @@ -1615,7 +1615,7 @@ void OGLPopupDivisionMenu::OnMenu(wxCommandEvent& event) void wxDivisionShape::EditEdge(int WXUNUSED(side)) { - wxMessageBox(wxT("EditEdge() not implemented"), wxT("OGL"), wxOK); + wxMessageBox("EditEdge() not implemented", "OGL", wxOK); #if 0 wxBeginBusyCursor(); diff --git a/ogl/constrnt.cpp b/ogl/constrnt.cpp index fdbe0e9ff..b41bcfb41 100644 --- a/ogl/constrnt.cpp +++ b/ogl/constrnt.cpp @@ -55,51 +55,51 @@ void OGLInitializeConstraintTypes() wxOGLConstraintTypes = new wxList(wxKEY_INTEGER); wxOGLConstraintTypes->Append(gyCONSTRAINT_CENTRED_VERTICALLY, - new wxOGLConstraintType(gyCONSTRAINT_CENTRED_VERTICALLY, wxT("Centre vertically"), wxT("centred vertically w.r.t."))); + new wxOGLConstraintType(gyCONSTRAINT_CENTRED_VERTICALLY, "Centre vertically", "centred vertically w.r.t.")); wxOGLConstraintTypes->Append(gyCONSTRAINT_CENTRED_HORIZONTALLY, - new wxOGLConstraintType(gyCONSTRAINT_CENTRED_HORIZONTALLY, wxT("Centre horizontally"), wxT("centred horizontally w.r.t."))); + new wxOGLConstraintType(gyCONSTRAINT_CENTRED_HORIZONTALLY, "Centre horizontally", "centred horizontally w.r.t.")); wxOGLConstraintTypes->Append(gyCONSTRAINT_CENTRED_BOTH, - new wxOGLConstraintType(gyCONSTRAINT_CENTRED_BOTH, wxT("Centre"), wxT("centred w.r.t."))); + new wxOGLConstraintType(gyCONSTRAINT_CENTRED_BOTH, "Centre", "centred w.r.t.")); wxOGLConstraintTypes->Append(gyCONSTRAINT_LEFT_OF, - new wxOGLConstraintType(gyCONSTRAINT_LEFT_OF, wxT("Left of"), wxT("left of"))); + new wxOGLConstraintType(gyCONSTRAINT_LEFT_OF, "Left of", "left of")); wxOGLConstraintTypes->Append(gyCONSTRAINT_RIGHT_OF, - new wxOGLConstraintType(gyCONSTRAINT_RIGHT_OF, wxT("Right of"), wxT("right of"))); + new wxOGLConstraintType(gyCONSTRAINT_RIGHT_OF, "Right of", "right of")); wxOGLConstraintTypes->Append(gyCONSTRAINT_ABOVE, - new wxOGLConstraintType(gyCONSTRAINT_ABOVE, wxT("Above"), wxT("above"))); + new wxOGLConstraintType(gyCONSTRAINT_ABOVE, "Above", "above")); wxOGLConstraintTypes->Append(gyCONSTRAINT_BELOW, - new wxOGLConstraintType(gyCONSTRAINT_BELOW, wxT("Below"), wxT("below"))); + new wxOGLConstraintType(gyCONSTRAINT_BELOW, "Below", "below")); // Alignment wxOGLConstraintTypes->Append(gyCONSTRAINT_ALIGNED_TOP, - new wxOGLConstraintType(gyCONSTRAINT_ALIGNED_TOP, wxT("Top-aligned"), wxT("aligned to the top of"))); + new wxOGLConstraintType(gyCONSTRAINT_ALIGNED_TOP, "Top-aligned", "aligned to the top of")); wxOGLConstraintTypes->Append(gyCONSTRAINT_ALIGNED_BOTTOM, - new wxOGLConstraintType(gyCONSTRAINT_ALIGNED_BOTTOM, wxT("Bottom-aligned"), wxT("aligned to the bottom of"))); + new wxOGLConstraintType(gyCONSTRAINT_ALIGNED_BOTTOM, "Bottom-aligned", "aligned to the bottom of")); wxOGLConstraintTypes->Append(gyCONSTRAINT_ALIGNED_LEFT, - new wxOGLConstraintType(gyCONSTRAINT_ALIGNED_LEFT, wxT("Left-aligned"), wxT("aligned to the left of"))); + new wxOGLConstraintType(gyCONSTRAINT_ALIGNED_LEFT, "Left-aligned", "aligned to the left of")); wxOGLConstraintTypes->Append(gyCONSTRAINT_ALIGNED_RIGHT, - new wxOGLConstraintType(gyCONSTRAINT_ALIGNED_RIGHT, wxT("Right-aligned"), wxT("aligned to the right of"))); + new wxOGLConstraintType(gyCONSTRAINT_ALIGNED_RIGHT, "Right-aligned", "aligned to the right of")); // Mid-alignment wxOGLConstraintTypes->Append(gyCONSTRAINT_MIDALIGNED_TOP, - new wxOGLConstraintType(gyCONSTRAINT_MIDALIGNED_TOP, wxT("Top-midaligned"), wxT("centred on the top of"))); + new wxOGLConstraintType(gyCONSTRAINT_MIDALIGNED_TOP, "Top-midaligned", "centred on the top of")); wxOGLConstraintTypes->Append(gyCONSTRAINT_MIDALIGNED_BOTTOM, - new wxOGLConstraintType(gyCONSTRAINT_MIDALIGNED_BOTTOM, wxT("Bottom-midaligned"), wxT("centred on the bottom of"))); + new wxOGLConstraintType(gyCONSTRAINT_MIDALIGNED_BOTTOM, "Bottom-midaligned", "centred on the bottom of")); wxOGLConstraintTypes->Append(gyCONSTRAINT_MIDALIGNED_LEFT, - new wxOGLConstraintType(gyCONSTRAINT_MIDALIGNED_LEFT, wxT("Left-midaligned"), wxT("centred on the left of"))); + new wxOGLConstraintType(gyCONSTRAINT_MIDALIGNED_LEFT, "Left-midaligned", "centred on the left of")); wxOGLConstraintTypes->Append(gyCONSTRAINT_MIDALIGNED_RIGHT, - new wxOGLConstraintType(gyCONSTRAINT_MIDALIGNED_RIGHT, wxT("Right-midaligned"), wxT("centred on the right of"))); + new wxOGLConstraintType(gyCONSTRAINT_MIDALIGNED_RIGHT, "Right-midaligned", "centred on the right of")); } void OGLCleanUpConstraintTypes() @@ -134,7 +134,7 @@ wxOGLConstraint::wxOGLConstraint(int type, wxShape *constraining, wxList& constr m_constrainingObject = constraining; m_constraintId = 0; - m_constraintName = wxT("noname"); + m_constraintName = "noname"; wxNode *node = constrained.GetFirst(); while (node) diff --git a/ogl/divided.cpp b/ogl/divided.cpp index e06b7f11b..dff9504cf 100644 --- a/ogl/divided.cpp +++ b/ogl/divided.cpp @@ -418,7 +418,7 @@ void wxDividedShape::ReadAttributes(wxExpr *clause) void wxDividedShape::EditRegions() { - wxMessageBox(wxT("EditRegions() is unimplemented."), wxT("OGL"), wxOK); + wxMessageBox("EditRegions() is unimplemented.", "OGL", wxOK); // TODO #if 0 diff --git a/ogl/drawn.cpp b/ogl/drawn.cpp index 37d57562b..5d712c331 100644 --- a/ogl/drawn.cpp +++ b/ogl/drawn.cpp @@ -232,8 +232,8 @@ void wxDrawnShape::WriteAttributes(wxExpr *clause) { wxRectangleShape::WriteAttributes(clause); - clause->AddAttributeValue(_T("current_angle"), (long)m_currentAngle); - clause->AddAttributeValue(_T("save_metafile"), (long)m_saveToFile); + clause->AddAttributeValue("current_angle", (long)m_currentAngle); + clause->AddAttributeValue("save_metafile", (long)m_saveToFile); if (m_saveToFile) { for (int i = 0; i < 4; i++) @@ -249,8 +249,8 @@ void wxDrawnShape::ReadAttributes(wxExpr *clause) wxRectangleShape::ReadAttributes(clause); int iVal = (int) m_saveToFile; - clause->GetAttributeValue(_T("save_metafile"), iVal); - clause->GetAttributeValue(_T("current_angle"), m_currentAngle); + clause->GetAttributeValue("save_metafile", iVal); + clause->GetAttributeValue("current_angle", m_currentAngle); m_saveToFile = (iVal != 0); if (m_saveToFile) @@ -1272,8 +1272,8 @@ bool wxOpPolyDraw::GetPerimeterPoint(double x1, double y1, #if wxUSE_PROLOGIO static char hexArray[] = { - _T('0'), _T('1'), _T('2'), _T('3'), _T('4'), _T('5'), _T('6'), _T('7'), - _T('8'), _T('9'), _T('A'), _T('B'), _T('C'), _T('D'), _T('E'), _T('F') }; + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; // Convert unsigned 16-bit integer to 4-character hex string static void IntToHex(unsigned int dec, wxChar *buf) @@ -1295,37 +1295,37 @@ static int HexToInt1(wxChar hex) { switch (hex) { - case _T('0'): + case '0': return 0; - case _T('1'): + case '1': return 1; - case _T('2'): + case '2': return 2; - case _T('3'): + case '3': return 3; - case _T('4'): + case '4': return 4; - case _T('5'): + case '5': return 5; - case _T('6'): + case '6': return 6; - case _T('7'): + case '7': return 7; - case _T('8'): + case '8': return 8; - case _T('9'): + case '9': return 9; - case _T('A'): + case 'A': return 10; - case _T('B'): + case 'B': return 11; - case _T('C'): + case 'C': return 12; - case _T('D'): + case 'D': return 13; - case _T('E'): + case 'E': return 14; - case _T('F'): + case 'F': return 15; } @@ -1445,16 +1445,16 @@ void wxPseudoMetaFile::Rotate(double x, double y, double theta) void wxPseudoMetaFile::WriteAttributes(wxExpr *clause, int whichAngle) { wxString widthStr; - widthStr.Printf(wxT("meta_width%d"), whichAngle); + widthStr.Printf("meta_width%d", whichAngle); wxString heightStr; - heightStr.Printf(wxT("meta_height%d"), whichAngle); + heightStr.Printf("meta_height%d", whichAngle); wxString outlineStr; - outlineStr.Printf(wxT("outline_op%d"), whichAngle); + outlineStr.Printf("outline_op%d", whichAngle); wxString rotateableStr; - rotateableStr.Printf(wxT("meta_rotateable%d"), whichAngle); + rotateableStr.Printf("meta_rotateable%d", whichAngle); // Write width and height clause->AddAttributeValue(widthStr, m_width); @@ -1468,7 +1468,7 @@ void wxPseudoMetaFile::WriteAttributes(wxExpr *clause, int whichAngle) wxNode *node = m_gdiObjects.GetFirst(); while (node) { - wxSprintf(buf, _T("gdi%d_%d"), whichAngle, i); + wxSprintf(buf, "gdi%d_%d", whichAngle, i); wxObject *obj = (wxObject *)node->GetData(); wxExpr *expr = NULL; if (obj) @@ -1526,7 +1526,7 @@ void wxPseudoMetaFile::WriteAttributes(wxExpr *clause, int whichAngle) node = m_ops.GetFirst(); while (node) { - wxSprintf(buf, _T("op%d_%d"), whichAngle, i); + wxSprintf(buf, "op%d_%d", whichAngle, i); wxDrawOp *op = (wxDrawOp *)node->GetData(); wxExpr *expr = op->WriteExpr(this); if (expr) @@ -1548,7 +1548,7 @@ void wxPseudoMetaFile::WriteAttributes(wxExpr *clause, int whichAngle) node = node->GetNext(); } wxString outlineObjectsStr; - outlineObjectsStr.Printf(wxT("outline_objects%d"), whichAngle); + outlineObjectsStr.Printf("outline_objects%d", whichAngle); clause->AddAttributeValue(outlineObjectsStr, outlineExpr); } @@ -1562,7 +1562,7 @@ void wxPseudoMetaFile::WriteAttributes(wxExpr *clause, int whichAngle) node = node->GetNext(); } wxString fillObjectsStr; - fillObjectsStr.Printf(wxT("fill_objects%d"), whichAngle); + fillObjectsStr.Printf("fill_objects%d", whichAngle); clause->AddAttributeValue(fillObjectsStr, fillExpr); } @@ -1572,16 +1572,16 @@ void wxPseudoMetaFile::WriteAttributes(wxExpr *clause, int whichAngle) void wxPseudoMetaFile::ReadAttributes(wxExpr *clause, int whichAngle) { wxString widthStr; - widthStr.Printf(wxT("meta_width%d"), whichAngle); + widthStr.Printf("meta_width%d", whichAngle); wxString heightStr; - heightStr.Printf(wxT("meta_height%d"), whichAngle); + heightStr.Printf("meta_height%d", whichAngle); wxString outlineStr; - outlineStr.Printf(wxT("outline_op%d"), whichAngle); + outlineStr.Printf("outline_op%d", whichAngle); wxString rotateableStr; - rotateableStr.Printf(wxT("meta_rotateable%d"), whichAngle); + rotateableStr.Printf("meta_rotateable%d", whichAngle); clause->GetAttributeValue(widthStr, m_width); clause->GetAttributeValue(heightStr, m_height); @@ -1597,7 +1597,7 @@ void wxPseudoMetaFile::ReadAttributes(wxExpr *clause, int whichAngle) bool keepGoing = true; while (keepGoing) { - wxSprintf(buf, _T("gdi%d_%d"), whichAngle, i); + wxSprintf(buf, "gdi%d_%d", whichAngle, i); wxExpr *expr = NULL; clause->GetAttributeValue(buf, &expr); if (!expr) @@ -1663,7 +1663,7 @@ void wxPseudoMetaFile::ReadAttributes(wxExpr *clause, int whichAngle) i = 1; while (keepGoing) { - wxSprintf(buf, _T("op%d_%d"), whichAngle, i); + wxSprintf(buf, "op%d_%d", whichAngle, i); wxExpr *expr = NULL; clause->GetAttributeValue(buf, &expr); if (!expr) @@ -1728,7 +1728,7 @@ void wxPseudoMetaFile::ReadAttributes(wxExpr *clause, int whichAngle) } wxString outlineObjectsStr; - outlineObjectsStr.Printf(wxT("outline_objects%d"), whichAngle); + outlineObjectsStr.Printf("outline_objects%d", whichAngle); // Now read in the list of outline and fill operations, if any wxExpr *expr1 = clause->AttributeValue(outlineObjectsStr); @@ -1743,7 +1743,7 @@ void wxPseudoMetaFile::ReadAttributes(wxExpr *clause, int whichAngle) } wxString fillObjectsStr; - fillObjectsStr.Printf(wxT("fill_objects%d"), whichAngle); + fillObjectsStr.Printf("fill_objects%d", whichAngle); expr1 = clause->AttributeValue(fillObjectsStr); if (expr1) diff --git a/ogl/lines.cpp b/ogl/lines.cpp index 3474b1781..2f5589d96 100644 --- a/ogl/lines.cpp +++ b/ogl/lines.cpp @@ -62,17 +62,17 @@ wxLineShape::wxLineShape() // and make the three line regions. ClearRegions(); wxShapeRegion *newRegion = new wxShapeRegion; - newRegion->SetName(wxT("Middle")); + newRegion->SetName("Middle"); newRegion->SetSize(150, 50); m_regions.Append((wxObject *)newRegion); newRegion = new wxShapeRegion; - newRegion->SetName(wxT("Start")); + newRegion->SetName("Start"); newRegion->SetSize(150, 50); m_regions.Append((wxObject *)newRegion); newRegion = new wxShapeRegion; - newRegion->SetName(wxT("End")); + newRegion->SetName("End"); newRegion->SetSize(150, 50); m_regions.Append((wxObject *)newRegion); @@ -805,7 +805,7 @@ void wxLineShape::DrawArrow(wxDC& dc, wxArrowHead *arrow, double xOffset, bool p else { - wxLogFatalError(wxT("Unknown arrowhead rotation case in lines.cc")); + wxLogFatalError("Unknown arrowhead rotation case in lines.cc"); } // Rotate about the centre of the object, then place @@ -1364,23 +1364,23 @@ void wxLineShape::WriteAttributes(wxExpr *clause) wxShape::WriteAttributes(clause); if (m_from) - clause->AddAttributeValue(_T("from"), m_from->GetId()); + clause->AddAttributeValue("from", m_from->GetId()); if (m_to) - clause->AddAttributeValue(_T("to"), m_to->GetId()); + clause->AddAttributeValue("to", m_to->GetId()); if (m_attachmentTo != 0) - clause->AddAttributeValue(_T("attachment_to"), (long)m_attachmentTo); + clause->AddAttributeValue("attachment_to", (long)m_attachmentTo); if (m_attachmentFrom != 0) - clause->AddAttributeValue(_T("attachment_from"), (long)m_attachmentFrom); + clause->AddAttributeValue("attachment_from", (long)m_attachmentFrom); if (m_alignmentStart != 0) - clause->AddAttributeValue(_T("align_start"), (long)m_alignmentStart); + clause->AddAttributeValue("align_start", (long)m_alignmentStart); if (m_alignmentEnd != 0) - clause->AddAttributeValue(_T("align_end"), (long)m_alignmentEnd); + clause->AddAttributeValue("align_end", (long)m_alignmentEnd); - clause->AddAttributeValue(_T("is_spline"), (long)m_isSpline); + clause->AddAttributeValue("is_spline", (long)m_isSpline); if (m_maintainStraightLines) - clause->AddAttributeValue(_T("keep_lines_straight"), (long)m_maintainStraightLines); + clause->AddAttributeValue("keep_lines_straight", (long)m_maintainStraightLines); // Make a list of lists for the (sp)line controls wxExpr *list = new wxExpr(wxExprList); @@ -1397,7 +1397,7 @@ void wxLineShape::WriteAttributes(wxExpr *clause) node = node->GetNext(); } - clause->AddAttributeValue(_T("controls"), list); + clause->AddAttributeValue("controls", list); // Write arc arrows in new OGL format, if there are any. // This is a list of lists. Each sublist comprises: @@ -1425,7 +1425,7 @@ void wxLineShape::WriteAttributes(wxExpr *clause) node = node->GetNext(); } - clause->AddAttributeValue(_T("arrows"), arrow_list); + clause->AddAttributeValue("arrows", arrow_list); } } @@ -1434,21 +1434,21 @@ void wxLineShape::ReadAttributes(wxExpr *clause) wxShape::ReadAttributes(clause); int iVal = (int) m_isSpline; - clause->AssignAttributeValue(wxT("is_spline"), &iVal); + clause->AssignAttributeValue("is_spline", &iVal); m_isSpline = (iVal != 0); iVal = (int) m_maintainStraightLines; - clause->AssignAttributeValue(wxT("keep_lines_straight"), &iVal); + clause->AssignAttributeValue("keep_lines_straight", &iVal); m_maintainStraightLines = (iVal != 0); - clause->AssignAttributeValue(wxT("align_start"), &m_alignmentStart); - clause->AssignAttributeValue(wxT("align_end"), &m_alignmentEnd); + clause->AssignAttributeValue("align_start", &m_alignmentStart); + clause->AssignAttributeValue("align_end", &m_alignmentEnd); // Compatibility: check for no regions. if (m_regions.GetCount() == 0) { wxShapeRegion *newRegion = new wxShapeRegion; - newRegion->SetName(_T("Middle")); + newRegion->SetName("Middle"); newRegion->SetSize(150, 50); m_regions.Append((wxObject *)newRegion); if (m_text.GetCount() > 0) @@ -1466,12 +1466,12 @@ void wxLineShape::ReadAttributes(wxExpr *clause) } newRegion = new wxShapeRegion; - newRegion->SetName(wxT("Start")); + newRegion->SetName("Start"); newRegion->SetSize(150, 50); m_regions.Append((wxObject *)newRegion); newRegion = new wxShapeRegion; - newRegion->SetName(wxT("End")); + newRegion->SetName("End"); newRegion->SetSize(150, 50); m_regions.Append((wxObject *)newRegion); } @@ -1479,14 +1479,14 @@ void wxLineShape::ReadAttributes(wxExpr *clause) m_attachmentTo = 0; m_attachmentFrom = 0; - clause->AssignAttributeValue(wxT("attachment_to"), &m_attachmentTo); - clause->AssignAttributeValue(wxT("attachment_from"), &m_attachmentFrom); + clause->AssignAttributeValue("attachment_to", &m_attachmentTo); + clause->AssignAttributeValue("attachment_from", &m_attachmentFrom); wxExpr *line_list = NULL; // When image is created, there are default control points. Override // them if there are some in the file. - clause->AssignAttributeValue(wxT("controls"), &line_list); + clause->AssignAttributeValue("controls", &line_list); if (line_list) { @@ -1518,7 +1518,7 @@ void wxLineShape::ReadAttributes(wxExpr *clause) // Read arrow list, for new OGL code wxExpr *arrow_list = NULL; - clause->AssignAttributeValue(wxT("arrows"), &arrow_list); + clause->AssignAttributeValue("arrows", &arrow_list); if (arrow_list) { wxExpr *node = arrow_list->value.first; diff --git a/ogl/mfutils.cpp b/ogl/mfutils.cpp index 9fa6dc5e7..c7f9421d4 100644 --- a/ogl/mfutils.cpp +++ b/ogl/mfutils.cpp @@ -154,7 +154,7 @@ bool wxXMetaFile::ReadFile(const wxChar *file) { HandleTableSize = 0; - FILE *handle = wxFopen(file, wxT("rb")); + FILE *handle = wxFopen(file, "rb"); if (!handle) return false; // Read placeable metafile header, if any diff --git a/ogl/ogldiag.cpp b/ogl/ogldiag.cpp index aaaa13978..679fb1c80 100644 --- a/ogl/ogldiag.cpp +++ b/ogl/ogldiag.cpp @@ -215,7 +215,7 @@ bool wxDiagram::SaveFile(const wxString& filename) wxExprDatabase *database = new wxExprDatabase; // First write the diagram type - wxExpr *header = new wxExpr(_T("diagram")); + wxExpr *header = new wxExpr("diagram"; OnHeaderSave(*database, *header); database->Append(header); @@ -229,9 +229,9 @@ bool wxDiagram::SaveFile(const wxString& filename) { wxExpr *expr; if (shape->IsKindOf(CLASSINFO(wxLineShape))) - expr = new wxExpr(_T("line")); + expr = new wxExpr("line"; else - expr = new wxExpr(_T("shape")); + expr = new wxExpr("shape"; OnShapeSave(*database, *shape, *expr); } @@ -240,7 +240,7 @@ bool wxDiagram::SaveFile(const wxString& filename) OnDatabaseSave(*database); wxString tempFile; - wxGetTempFileName(wxT("diag"), tempFile); + wxGetTempFileName("diag", tempFile); FILE* file = fopen(tempFile.mb_str(wxConvFile), "w"); if (! file) { @@ -288,7 +288,7 @@ bool wxDiagram::LoadFile(const wxString& filename) { wxBeginBusyCursor(); - wxExprDatabase database(wxExprInteger, _T("id")); + wxExprDatabase database(wxExprInteger, "id"); if (!database.Read(filename)) { wxEndBusyCursor(); @@ -298,7 +298,7 @@ bool wxDiagram::LoadFile(const wxString& filename) DeleteAllShapes(); database.BeginFind(); - wxExpr *header = database.FindClauseByFunctor(_T("diagram")); + wxExpr *header = database.FindClauseByFunctor("diagram"); if (header) OnHeaderLoad(database, *header); @@ -309,7 +309,7 @@ bool wxDiagram::LoadFile(const wxString& filename) { wxExpr *clause = (wxExpr *)node->GetData(); long id = -1; - clause->GetAttributeValue(_T("id"), id); + clause->GetAttributeValue("id", id); wxRegisterId(id); node = node->GetNext(); } @@ -329,14 +329,14 @@ void wxDiagram::ReadNodes(wxExprDatabase& database) { // Find and create the node images database.BeginFind(); - wxExpr *clause = database.FindClauseByFunctor(_T("shape")); + wxExpr *clause = database.FindClauseByFunctor("shape"); while (clause) { wxChar *type = NULL; long parentId = -1; - clause->AssignAttributeValue(wxT("type"), &type); - clause->AssignAttributeValue(wxT("parent"), &parentId); + clause->AssignAttributeValue("type", &type); + clause->AssignAttributeValue("parent", &parentId); wxClassInfo *classInfo = wxClassInfo::FindClass(type); if (classInfo) { @@ -351,7 +351,7 @@ void wxDiagram::ReadNodes(wxExprDatabase& database) // If child of composite, link up if (parentId > -1) { - wxExpr *parentExpr = database.HashFind(_T("shape"), parentId); + wxExpr *parentExpr = database.HashFind("shape", parentId); if (parentExpr && parentExpr->GetClientData()) { wxShape *parent = (wxShape *)parentExpr->GetClientData(); @@ -365,7 +365,7 @@ void wxDiagram::ReadNodes(wxExprDatabase& database) if (type) delete[] type; - clause = database.FindClauseByFunctor(_T("shape")); + clause = database.FindClauseByFunctor("shape"); } return; } @@ -373,14 +373,14 @@ void wxDiagram::ReadNodes(wxExprDatabase& database) void wxDiagram::ReadLines(wxExprDatabase& database) { database.BeginFind(); - wxExpr *clause = database.FindClauseByFunctor(_T("line")); + wxExpr *clause = database.FindClauseByFunctor("line"); while (clause) { wxString type; long parentId = -1; - clause->GetAttributeValue(_T("type"), type); - clause->GetAttributeValue(_T("parent"), parentId); + clause->GetAttributeValue("type", type); + clause->GetAttributeValue("parent", parentId); wxClassInfo *classInfo = wxClassInfo::FindClass(type); if (classInfo) { @@ -391,16 +391,16 @@ void wxDiagram::ReadLines(wxExprDatabase& database) shape->SetCanvas(GetCanvas()); long image_to = -1; long image_from = -1; - clause->GetAttributeValue(_T("to"), image_to); - clause->GetAttributeValue(_T("from"), image_from); + clause->GetAttributeValue("to", image_to); + clause->GetAttributeValue("from", image_from); - wxExpr *image_to_expr = database.HashFind(_T("shape"), image_to); + wxExpr *image_to_expr = database.HashFind("shape", image_to); if (!image_to_expr) { // Error } - wxExpr *image_from_expr = database.HashFind(_T("shape"), image_from); + wxExpr *image_from_expr = database.HashFind("shape", image_from); if (!image_from_expr) { @@ -422,7 +422,7 @@ void wxDiagram::ReadLines(wxExprDatabase& database) m_shapeList->Append(shape); } - clause = database.FindClauseByFunctor(_T("line")); + clause = database.FindClauseByFunctor("line"); } } @@ -432,7 +432,7 @@ void wxDiagram::ReadLines(wxExprDatabase& database) void wxDiagram::ReadContainerGeometry(wxExprDatabase& database) { database.BeginFind(); - wxExpr *clause = database.FindClauseByFunctor(_T("shape")); + wxExpr *clause = database.FindClauseByFunctor("shape"); while (clause) { wxShape *image = (wxShape *)clause->GetClientData(); @@ -442,7 +442,7 @@ void wxDiagram::ReadContainerGeometry(wxExprDatabase& database) wxExpr *divisionExpr = NULL; // Find the list of divisions in the composite - clause->GetAttributeValue(_T("divisions"), &divisionExpr); + clause->GetAttributeValue("divisions", &divisionExpr); if (divisionExpr) { int i = 0; @@ -450,7 +450,7 @@ void wxDiagram::ReadContainerGeometry(wxExprDatabase& database) while (idExpr) { long divisionId = idExpr->IntegerValue(); - wxExpr *childExpr = database.HashFind(_T("shape"), divisionId); + wxExpr *childExpr = database.HashFind("shape", divisionId); if (childExpr && childExpr->GetClientData()) { wxDivisionShape *child = (wxDivisionShape *)childExpr->GetClientData(); @@ -461,13 +461,13 @@ void wxDiagram::ReadContainerGeometry(wxExprDatabase& database) long topSideId = -1; long rightSideId = -1; long bottomSideId = -1; - childExpr->GetAttributeValue(_T("left_side"), leftSideId); - childExpr->GetAttributeValue(_T("top_side"), topSideId); - childExpr->GetAttributeValue(_T("right_side"), rightSideId); - childExpr->GetAttributeValue(_T("bottom_side"), bottomSideId); + childExpr->GetAttributeValue("left_side", leftSideId); + childExpr->GetAttributeValue("top_side", topSideId); + childExpr->GetAttributeValue("right_side", rightSideId); + childExpr->GetAttributeValue("bottom_side", bottomSideId); if (leftSideId > -1) { - wxExpr *leftExpr = database.HashFind(_T("shape"), leftSideId); + wxExpr *leftExpr = database.HashFind("shape", leftSideId); if (leftExpr && leftExpr->GetClientData()) { wxDivisionShape *leftSide = (wxDivisionShape *)leftExpr->GetClientData(); @@ -476,7 +476,7 @@ void wxDiagram::ReadContainerGeometry(wxExprDatabase& database) } if (topSideId > -1) { - wxExpr *topExpr = database.HashFind(_T("shape"), topSideId); + wxExpr *topExpr = database.HashFind("shape", topSideId); if (topExpr && topExpr->GetClientData()) { wxDivisionShape *topSide = (wxDivisionShape *)topExpr->GetClientData(); @@ -485,7 +485,7 @@ void wxDiagram::ReadContainerGeometry(wxExprDatabase& database) } if (rightSideId > -1) { - wxExpr *rightExpr = database.HashFind(_T("shape"), rightSideId); + wxExpr *rightExpr = database.HashFind("shape", rightSideId); if (rightExpr && rightExpr->GetClientData()) { wxDivisionShape *rightSide = (wxDivisionShape *)rightExpr->GetClientData(); @@ -494,7 +494,7 @@ void wxDiagram::ReadContainerGeometry(wxExprDatabase& database) } if (bottomSideId > -1) { - wxExpr *bottomExpr = database.HashFind(_T("shape"), bottomSideId); + wxExpr *bottomExpr = database.HashFind("shape", bottomSideId); if (bottomExpr && bottomExpr->GetClientData()) { wxDivisionShape *bottomSide = (wxDivisionShape *)bottomExpr->GetClientData(); @@ -508,7 +508,7 @@ void wxDiagram::ReadContainerGeometry(wxExprDatabase& database) } } - clause = database.FindClauseByFunctor(_T("shape")); + clause = database.FindClauseByFunctor("shape"); } } @@ -534,7 +534,7 @@ bool wxDiagram::OnShapeSave(wxExprDatabase& db, wxShape& shape, wxExpr& expr) while (node) { wxShape *childShape = (wxShape *)node->GetData(); - wxExpr *childExpr = new wxExpr(_T("shape")); + wxExpr *childExpr = new wxExpr("shape"); OnShapeSave(db, *childShape, *childExpr); node = node->GetNext(); } diff --git a/ogl/oglmisc.cpp b/ogl/oglmisc.cpp index cc4c0cf62..4dee2d474 100644 --- a/ogl/oglmisc.cpp +++ b/ogl/oglmisc.cpp @@ -57,12 +57,12 @@ void wxOGLInitialize() g_oglNormalFont = new wxFont(10, wxSWISS, wxNORMAL, wxNORMAL); - g_oglBlackPen = new wxPen(wxT("BLACK"), 1, wxSOLID); + g_oglBlackPen = new wxPen("BLACK", 1, wxSOLID); - g_oglWhiteBackgroundPen = new wxPen(wxT("WHITE"), 1, wxSOLID); - g_oglTransparentPen = new wxPen(wxT("WHITE"), 1, wxTRANSPARENT); - g_oglWhiteBackgroundBrush = new wxBrush(wxT("WHITE"), wxSOLID); - g_oglBlackForegroundPen = new wxPen(wxT("BLACK"), 1, wxSOLID); + g_oglWhiteBackgroundPen = new wxPen("WHITE", 1, wxSOLID); + g_oglTransparentPen = new wxPen("WHITE", 1, wxTRANSPARENT); + g_oglWhiteBackgroundBrush = new wxBrush("WHITE", wxSOLID); + g_oglBlackForegroundPen = new wxPen("BLACK", 1, wxSOLID); OGLInitializeConstraintTypes(); @@ -162,7 +162,7 @@ int FontSizeDialog(wxFrame *parent, int old_size) old_size = 10; wxString buf; buf << old_size; - wxString ans = wxGetTextFromUser(wxT("Enter point size"), wxT("Font size"), buf, parent); + wxString ans = wxGetTextFromUser("Enter point size", "Font size", buf, parent); if (ans.Length() == 0) return 0; @@ -170,7 +170,7 @@ int FontSizeDialog(wxFrame *parent, int old_size) ans.ToLong(&new_size); if ((new_size <= 0) || (new_size > 40)) { - wxMessageBox(wxT("Invalid point size!"), wxT("Error"), wxOK); + wxMessageBox("Invalid point size!", "Error", wxOK); return 0; } return new_size; @@ -385,17 +385,17 @@ wxStringList *oglFormatText(wxDC& dc, const wxString& text, double width, double { switch ((char)text[i]) { - case wxT('%'): + case '%': { i ++; if (i == len) - { word[j] = wxT('%'); j ++; } + { word[j] = '%'; j ++; } else { - if (text[i] == wxT('n')) + if (text[i] == 'n') { new_line = true; end_word = true; i++; } else - { word[j] = wxT('%'); j ++; word[j] = text[i]; j ++; i ++; } + { word[j] = '%'; j ++; word[j] = text[i]; j ++; i ++; } } break; } @@ -409,7 +409,7 @@ wxStringList *oglFormatText(wxDC& dc, const wxString& text, double width, double new_line = true; end_word = true; i++; break; } - case wxT(' '): + case ' ': { end_word = true; i ++; @@ -459,7 +459,7 @@ wxStringList *oglFormatText(wxDC& dc, const wxString& text, double width, double else { if (buffer.Length() != 0) - buffer += wxT(" "); + buffer += " "; buffer += s; dc.GetTextExtent(buffer, &x, &y); @@ -823,10 +823,10 @@ bool oglRoughlyEqual(double val1, double val2, double tol) */ // Array used in DecToHex conversion routine. -static wxChar sg_HexArray[] = { wxT('0'), wxT('1'), wxT('2'), wxT('3'), - wxT('4'), wxT('5'), wxT('6'), wxT('7'), - wxT('8'), wxT('9'), wxT('A'), wxT('B'), - wxT('C'), wxT('D'), wxT('E'), wxT('F') +static wxChar sg_HexArray[] = { '0', '1', '2', '3', + '4', '5', '6', '7', + '8', '9', 'A', 'B', + 'C', 'D', 'E', 'F' }; // Convert 2-digit hex number to decimal @@ -834,15 +834,15 @@ unsigned int oglHexToDec(wxChar* buf) { int firstDigit, secondDigit; - if (buf[0] >= wxT('A')) - firstDigit = buf[0] - wxT('A') + 10; + if (buf[0] >= 'A') + firstDigit = buf[0] - 'A' + 10; else - firstDigit = buf[0] - wxT('0'); + firstDigit = buf[0] - '0'; - if (buf[1] >= wxT('A')) - secondDigit = buf[1] - wxT('A') + 10; + if (buf[1] >= 'A') + secondDigit = buf[1] - 'A' + 10; else - secondDigit = buf[1] - wxT('0'); + secondDigit = buf[1] - '0'; return firstDigit * 16 + secondDigit; } diff --git a/rc/GdaAppResources.cpp b/rc/GdaAppResources.cpp index 3904969fb..49bd70651 100644 --- a/rc/GdaAppResources.cpp +++ b/rc/GdaAppResources.cpp @@ -15530,8 +15530,58 @@ static unsigned char xml_res_file_7[] = { 16,48,4,12,1,67,192,16,48,4,12,1,67,160,133,35,240,255,75,175,9,51,209, 227,12,205,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_8 = 395105; +static size_t xml_res_size_8 = 947; static unsigned char xml_res_file_8[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,3,0,0, +0,40,45,15,83,0,0,2,34,80,76,84,69,0,0,0,0,0,0,0,0,0,37,114,205,0,0,0,0, +33,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,105,0,0,0,0,0,0,0,0,0,0, +0,0,23,81,177,112,155,224,17,72,158,0,0,0,20,72,166,38,96,179,46,105,198, +69,131,209,19,76,160,17,60,147,112,156,222,37,115,207,63,136,230,35,89, +169,109,159,228,63,129,212,36,113,206,65,136,225,47,113,200,44,119,210, +40,114,209,98,155,231,61,106,181,7,43,110,15,59,147,5,40,108,42,92,175, +0,34,111,2,38,116,22,73,172,45,95,181,0,35,114,88,143,215,111,162,224,65, +123,205,153,197,239,132,181,232,9,67,176,15,77,182,40,100,194,194,237,255, +134,182,233,202,240,255,195,221,247,195,238,255,154,197,240,121,179,232, +146,204,244,183,234,255,119,166,237,188,215,250,168,226,255,183,233,255, +177,232,255,135,191,240,203,240,255,138,186,239,133,182,233,121,174,232, +180,231,254,116,175,231,177,231,255,48,100,191,146,204,247,18,79,183,162, +215,255,167,210,255,33,87,185,59,113,200,58,114,200,162,211,255,181,230, +254,91,138,207,176,232,255,128,190,236,40,96,191,168,206,254,137,174,223, +212,243,255,196,222,248,119,175,227,156,198,253,163,207,255,95,155,233, +129,179,233,140,187,248,158,207,255,144,199,248,75,143,226,165,202,252, +160,199,244,196,222,249,124,172,233,138,178,236,223,246,255,185,235,255, +210,242,255,156,198,241,50,110,200,221,245,255,63,129,216,21,87,189,22, +88,189,68,137,224,151,192,244,74,141,225,196,221,248,141,182,240,186,214, +247,137,178,234,36,105,202,54,122,213,89,148,223,153,209,244,131,191,238, +176,224,250,17,79,183,60,119,214,190,236,255,214,243,255,230,248,255,108, +162,222,220,245,255,204,240,255,242,251,255,222,245,255,100,154,220,237, +250,255,206,241,255,41,98,191,232,248,255,160,222,255,147,191,232,88,150, +228,17,78,183,88,144,217,158,219,254,102,161,227,51,97,187,50,96,187,47, +96,187,51,98,188,144,174,221,247,253,255,142,172,221,94,134,204,166,197, +232,240,251,255,52,101,190,34,91,190,48,104,197,108,169,232,60,120,204, +50,118,206,45,106,197,67,127,212,82,145,224,93,154,232,39,101,199,52,115, +206,66,123,210,38,102,200,49,110,210,26,97,195,50,114,210,114,207,41,49, +0,0,0,49,116,82,78,83,0,3,25,81,41,95,2,8,1,6,39,19,99,29,28,37,16,106, +241,38,9,110,106,163,241,38,152,225,16,239,110,224,225,16,224,163,129,129, +239,191,51,152,51,173,95,92,173,191,92,204,139,46,104,0,0,1,15,73,68,65, +84,120,218,37,200,101,87,194,0,24,64,225,23,220,216,70,219,173,216,221, +115,27,101,161,199,14,108,177,187,3,27,187,142,221,221,221,216,226,255, +115,206,231,219,189,192,242,242,243,156,24,235,114,117,180,229,1,199,202, +127,92,51,218,81,163,209,217,88,19,248,95,55,244,146,100,59,201,138,75, +178,199,112,112,115,111,84,153,218,42,85,177,172,140,249,96,2,124,91,59, +235,234,11,210,163,57,251,225,114,240,158,106,106,46,201,140,250,247,252, +45,133,225,201,233,150,252,212,24,206,147,229,39,18,70,6,135,250,242,146, +19,226,25,134,49,127,124,189,163,48,64,211,116,182,33,49,69,175,63,120, +124,121,125,67,65,65,81,197,89,74,117,90,33,181,125,116,79,125,34,224,83, +81,148,163,53,246,119,87,149,205,109,28,62,68,200,192,217,41,183,84,189, +178,185,182,84,173,156,217,61,22,75,128,231,80,222,179,186,126,123,185, +179,168,53,204,6,9,69,0,132,199,242,222,245,213,197,205,214,66,173,11,194, +199,0,112,44,48,228,238,252,228,244,44,64,44,228,219,9,128,61,132,92,26, +22,138,34,50,137,8,19,192,47,251,204,72,98,41,90,148,202,0,0,0,0,73,69, +78,68,174,66,96,130}; + +static size_t xml_res_size_9 = 397092; +static unsigned char xml_res_file_9[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,117,116,102,45,56,34,63,62,10,60,114,101, 115,111,117,114,99,101,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, @@ -17292,66 +17342,85 @@ static unsigned char xml_res_file_8[] = { 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, 120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,50,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,49,48,44,50,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,53,44,50,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,67,72,69,67,75,85,80,68,65,84,69,83,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,104,101,99,107,32,85,112,100,97,116,101,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,53,44,50,100,60,47,115,105,122,101,62,10,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, 101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, -111,110,34,32,110,97,109,101,61,34,73,68,95,67,72,69,67,75,85,80,68,65, -84,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,67,104,101,99,107,32,85,112,100,97,116,101,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77, -124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, -105,116,108,101,62,65,98,111,117,116,32,71,101,111,68,97,60,47,116,105, -116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, -47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108, -101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77, -69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101, -62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, -97,109,101,61,34,73,68,68,95,82,65,78,68,79,77,73,90,65,84,73,79,78,34, -32,115,117,98,99,108,97,115,115,61,34,82,97,110,100,111,109,105,122,97, -116,105,111,110,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,95,67,76,79,83,69,34,62,10,32,32,32,32,32,32,60,115, -105,122,101,62,53,48,44,49,53,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,60,112,111,115,62,52,48,48,44,55,100,60,47,112,111,115,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,79,75,34,62,10,32,32,32, -32,32,32,60,115,105,122,101,62,53,48,44,49,53,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,60,112,111,115,62,52,48,48,44,50,55,100,60,47,112, -111,115,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,117,110,60,47, +111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,68,79,78,65,84,69,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +68,111,110,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, +50,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119, +120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,49,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,116,105,116,108,101,62,65,98,111,117,116,32,71,101,111,68,97, +60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, +100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, +116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84, +69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, +121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, +103,34,32,110,97,109,101,61,34,73,68,68,95,82,65,78,68,79,77,73,90,65,84, +73,79,78,34,32,115,117,98,99,108,97,115,115,61,34,82,97,110,100,111,109, +105,122,97,116,105,111,110,68,108,103,34,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,67,76,79,83,69,34,62,10,32,32,32,32,32, +32,60,115,105,122,101,62,53,48,44,49,53,100,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,60,112,111,115,62,52,48,48,44,55,100,60,47,112,111,115, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101,60,47, 108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,115,105,122,101,62,52,55,48,44,50,48,48,100,60,47,115,105,122, -101,62,10,32,32,32,32,60,116,105,116,108,101,62,82,97,110,100,111,109,105, -122,97,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99, -101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, -62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78, -124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, -101,61,34,73,68,95,65,88,73,83,95,76,65,66,69,76,95,80,82,69,67,73,83,73, -79,78,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,65,120,105,115, -76,97,98,101,108,80,114,101,99,105,115,105,111,110,68,108,103,34,62,10, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,79,75,34,62,10, +32,32,32,32,32,32,60,115,105,122,101,62,53,48,44,49,53,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,60,112,111,115,62,52,48,48,44,50,55,100, +60,47,112,111,115,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,117, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,115,105,122,101,62,52,55,48,44,50,48,48,100,60,47, +115,105,122,101,62,10,32,32,32,32,60,116,105,116,108,101,62,82,97,110,100, +111,109,105,122,97,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32, +32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, +114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80, +84,73,79,78,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108, +101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,73,68,95,76,65,66,69,76,95,80,82,69,67,73,83,73,79,78, +95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,83,101,116,68,105, +115,112,108,97,121,80,114,101,99,105,115,105,111,110,68,108,103,34,62,10, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, @@ -17384,136 +17453,154 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,112,105,110,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,65, -88,73,83,95,76,65,66,69,76,95,80,82,69,67,73,83,73,79,78,95,83,80,73,78, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,54,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, -84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,53, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +120,83,112,105,110,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,76, +65,66,69,76,95,80,82,69,67,73,83,73,79,78,95,83,80,73,78,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54, +48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80, +82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,84,79,80,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109, +101,61,34,73,68,67,95,70,73,88,95,80,79,73,78,84,95,67,72,69,67,75,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65, +108,119,97,121,115,32,117,115,105,110,103,32,102,105,120,101,100,45,112, +111,105,110,116,32,110,111,116,97,116,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, +119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,53,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108, -101,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115, -105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116, -101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32, -32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120, -83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88, -60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105, -97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,78,85,77,95,67,65,84, -69,71,79,82,73,69,83,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61, -34,78,117,109,67,97,116,101,103,111,114,105,101,115,68,108,103,34,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,49,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, +68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, -67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,97,116,101,103,111,114,105,101,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,53,44,45,49,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,112,105,110,67,116,114,108,34,32,110, -97,109,101,61,34,73,68,95,78,85,77,95,67,65,84,69,71,79,82,73,69,83,95, -83,80,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, -65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,84,79,80,124,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, +90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48, 60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,53,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101, +62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105, +111,110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101, +114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32, +60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, +83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47, +115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, +111,103,34,32,110,97,109,101,61,34,73,68,95,78,85,77,95,67,65,84,69,71, +79,82,73,69,83,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,78, +117,109,67,97,116,101,103,111,114,105,101,115,68,108,103,34,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,49,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,97,116,101,103,111,114,105,101,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,53,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,112,105,110,67,116,114,108,34,32,110,97, +109,101,61,34,73,68,95,78,85,77,95,67,65,84,69,71,79,82,73,69,83,95,83, +80,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,84,79,80,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, @@ -22207,147 +22294,167 @@ static unsigned char xml_res_file_8[] = { 98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,115, -58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,87,95,83,84,65,84,73,67, +95,86,65,82,73,65,66,76,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114, +105,97,98,108,101,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,78,111,116,101,98,111,111,107,34,32,110,97,109,101,61,34,73,68,67,95, -78,66,95,68,73,83,84,65,78,67,69,95,86,65,82,73,65,66,76,69,83,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98, -111,111,107,112,97,103,101,34,32,110,97,109,101,61,34,73,68,67,95,78,66, -95,80,65,71,69,95,71,69,79,77,95,67,69,78,84,82,79,73,68,83,34,62,10,32, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,78,111,116,101,98,111,111,107,34,32,110,97,109, +101,61,34,73,68,67,95,78,66,95,68,73,83,84,65,78,67,69,95,86,65,82,73,65, +66,76,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +110,111,116,101,98,111,111,107,112,97,103,101,34,32,110,97,109,101,61,34, +73,68,67,95,78,66,95,80,65,71,69,95,71,69,79,77,95,67,69,78,84,82,79,73, +68,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110, -101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, +82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,76,69,70,84,124, -119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,48,44,50,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,88, +67,79,79,82,68,95,86,65,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,88,45,99,111,111,114,100,105,110,97,116,101, +32,118,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48, -44,50,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,88,67,79,79,82,68, -95,86,65,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,88,45,99,111,111,114,100,105,110,97,116,101,32,118,97,114, -105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82, +84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68, +67,95,88,67,79,79,82,68,73,78,65,84,69,83,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,54,48,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,88,67, -79,79,82,68,73,78,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,54,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99, +101,34,32,110,97,109,101,61,34,73,68,67,95,88,67,79,79,82,68,95,84,73,77, +69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,52,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, -101,61,34,73,68,67,95,88,67,79,79,82,68,95,84,73,77,69,34,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97, 103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,51,48,44,50,60,47,115,105,122,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,76,69,70, -84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95, +83,84,65,84,73,67,95,89,67,79,79,82,68,95,86,65,82,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,51,48,44,50,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,89,45,99,111,111, +114,100,105,110,97,116,101,32,118,97,114,105,97,98,108,101,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, -34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,89,67,79,79, -82,68,95,86,65,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,89,45,99,111,111,114,100,105,110,97,116,101,32,118, -97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99, +101,34,32,110,97,109,101,61,34,73,68,67,95,89,67,79,79,82,68,73,78,65,84, +69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,54,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70, -84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -22356,234 +22463,50 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67, -95,89,67,79,79,82,68,73,78,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,54,48,44,45,49,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, -32,110,97,109,101,61,34,73,68,67,95,89,67,79,79,82,68,95,84,73,77,69,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52, -48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, -119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,84,79,80,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,50,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +95,89,67,79,79,82,68,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -67,95,83,84,65,84,73,67,95,68,73,83,84,95,77,69,84,82,73,67,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,32,68,105, -115,116,97,110,99,101,32,109,101,116,114,105,99,58,32,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, -99,101,34,32,110,97,109,101,61,34,73,68,67,95,68,73,83,84,65,78,67,69,95, -77,69,84,82,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,57,56,44,45,49,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,76,69,70,84,124,119,120, +82,73,71,72,84,124,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,71,101,111,109,101,116,114,105,99,32,99,101,110,116,114,111,105,100, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,110,111,116,101,98,111,111,107,112,97,103,101,34,32,110,97,109,101,61, -34,73,68,67,95,78,66,95,80,65,71,69,95,77,85,76,84,73,95,86,65,82,83,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,49,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, -34,32,110,97,109,101,61,34,73,68,67,95,87,69,73,71,72,84,83,95,68,73,83, -84,95,86,65,82,83,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,49,54,48,44,51,48,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,76,66,95,77,85,76,84,73,80,76,69,32,124,32,119,120, -76,66,95,72,83,67,82,79,76,76,60,47,115,116,121,108,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,32,124,32,119, -120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,68,73,83,84,95, -84,82,65,78,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,84,114,97,110,115,102,111,114,109,97,116,105,111,110,58, -32,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, +90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95, -68,73,83,84,65,78,67,69,95,84,82,65,78,83,70,79,82,77,65,84,73,79,78,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57, -56,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,48,44,50,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -32,124,32,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, 120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,68, -73,83,84,95,77,69,84,82,73,67,49,34,62,10,32,32,32,32,32,32,32,32,32,32, +73,83,84,95,77,69,84,82,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,68,105,115,116,97,110,99,101,32,109, +32,32,32,60,108,97,98,101,108,62,32,68,105,115,116,97,110,99,101,32,109, 101,116,114,105,99,58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, @@ -22598,16 +22521,16 @@ static unsigned char xml_res_file_8[] = { 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101, -61,34,73,68,67,95,68,73,83,84,65,78,67,69,95,77,69,84,82,73,67,49,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,56, -44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +61,34,73,68,67,95,68,73,83,84,65,78,67,69,95,77,69,84,82,73,67,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,56,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, @@ -22616,55 +22539,69 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,50,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114, -105,97,98,108,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,111,109,101,116, +114,105,99,32,99,101,110,116,114,111,105,100,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111, +111,107,112,97,103,101,34,32,110,97,109,101,61,34,73,68,67,95,78,66,95, +80,65,71,69,95,77,85,76,84,73,95,86,65,82,83,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,49,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68, +67,95,87,69,73,71,72,84,83,95,68,73,83,84,95,86,65,82,83,95,76,73,83,84, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101, +110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,49,54,48,44,51,48,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95, +77,85,76,84,73,80,76,69,32,124,32,119,120,76,66,95,72,83,67,82,79,76,76, +60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,77,101,116,104,111,100,58,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,78,111,116,101,98,111, -111,107,34,32,110,97,109,101,61,34,73,68,67,95,78,66,95,68,73,83,84,65, -78,67,69,95,87,69,73,71,72,84,83,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,32, -110,97,109,101,61,34,73,68,67,95,82,65,68,73,79,95,68,73,83,84,65,78,67, -69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,84,79, -80,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97, +71,78,95,67,69,78,84,69,82,32,124,32,119,120,84,79,80,60,47,102,108,97, 103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60, 47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -22678,26 +22615,178 @@ static unsigned char xml_res_file_8[] = { 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,67,95,83,84,65,84,73,67,95,68,73,83,84,95,84,82,65,78,83,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84, +114,97,110,115,102,111,114,109,97,116,105,111,110,58,32,32,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101,99,105,102, -121,32,98,97,110,100,119,105,100,116,104,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, +104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,68,73,83,84,65, +78,67,69,95,84,82,65,78,83,70,79,82,77,65,84,73,79,78,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,32,124,32,119, +120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,68,73,83,84,95, +77,69,84,82,73,67,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,68,105,115,116,97,110,99,101,32,109,101,116,114, +105,99,58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67, +95,68,73,83,84,65,78,67,69,95,77,69,84,82,73,67,49,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,50,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98, +108,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,77,101,116,104,111,100,58,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,78,111,116,101,98,111,111, +107,34,32,110,97,109,101,61,34,73,68,67,95,78,66,95,68,73,83,84,65,78,67, +69,95,87,69,73,71,72,84,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,32,110, +97,109,101,61,34,73,68,67,95,82,65,68,73,79,95,68,73,83,84,65,78,67,69, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,84,79, +80,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101,99,105,102, +121,32,98,97,110,100,119,105,100,116,104,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -24134,9 +24223,9 @@ static unsigned char xml_res_file_8[] = { 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, 79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, @@ -32471,6 +32560,57 @@ static unsigned char xml_res_file_8[] = { 105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,82,83, +32,40,112,114,111,106,52,32,102,111,114,109,97,116,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,67,82,83,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50, +48,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69, +78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,67, +82,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, +109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, +99,112,112,36,111,112,101,110,45,99,114,115,46,112,110,103,60,47,98,105, +116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111, +108,116,105,112,62,76,111,97,100,32,67,82,83,32,102,114,111,109,32,97,32, +100,97,116,97,32,115,111,117,114,99,101,60,47,116,111,111,108,116,105,112, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,76,69,70,84,124,119,120,76,69,70,84,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62, 51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -32493,132 +32633,182 @@ static unsigned char xml_res_file_8[] = { 116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,84,79,80,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69, +76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79, +78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,116,105,116,108,101,62,83,97,118,101,32,65,115,60,47,116,105,116, +108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47, +99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101, +62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69, +78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101, +62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,73,68,68,95,83,65,86,69,95,65,83,95,68,76,71,34,32,115, +117,98,99,108,97,115,115,61,34,83,97,118,101,65,115,68,108,103,34,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, -79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, -86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110, +101,108,34,32,110,97,109,101,61,34,100,115,70,105,108,101,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,48,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101, +120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,99,111,108,115,62,53,60,47,99,111,108,115,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62, +50,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,53,60,47,104,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,53,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61, +34,73,68,95,83,69,76,95,80,82,74,95,67,72,69,67,75,66,79,88,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,112, +114,111,106,101,99,116,32,102,105,108,101,58,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101, -62,83,97,118,101,32,65,115,60,47,116,105,116,108,101,62,10,32,32,32,32, -60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101, -100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73, -79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79, -83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95, -83,65,86,69,95,65,83,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61, -34,83,97,118,101,65,115,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, -82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101, -61,34,100,115,70,105,108,101,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,49,48,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,99,111,108,115,62,53,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112, -62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,104,103,97,112,62,53,60,47,104,103,97,112,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,48,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,95,80,82,74,95,67,72,69,67,75,66,79,88,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, -48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,65,83,67,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, +72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,65,83, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114, +99,101,115,46,99,112,112,36,115,97,118,101,46,112,110,103,60,47,98,105, +116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78, +69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83, -84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,112,114,111,106,101,99, -116,32,102,105,108,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119, -120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32, +108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97, +109,101,61,34,73,68,95,83,69,76,95,68,83,95,67,72,69,67,75,66,79,88,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, -69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,65,83,67,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, -109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,115,97,118,101,46,112,110,103,60,47,98,105,116,109,97,112, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119, +32,100,97,116,97,115,111,117,114,99,101,58,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, +108,34,32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,68,83,95,80, +65,84,72,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,49,55,50,44,45,49,100,60,47,115,105,122,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116, +116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116, 121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, @@ -32628,182 +32818,162 @@ static unsigned char xml_res_file_8[] = { 32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53, -44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68, -95,83,69,76,95,68,83,95,67,72,69,67,75,66,79,88,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, -95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,100,97,116,97,115, -111,117,114,99,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119,120,65, -68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101, -61,34,73,68,67,95,70,73,69,76,68,95,68,83,95,80,65,84,72,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, -69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,68,83,95,80,65,84,72, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,115,97,118,101,46,112,110,103,60,47,98,105,116, -109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69, -60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78, +95,68,83,95,80,65,84,72,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, +101,115,111,117,114,99,101,115,46,99,112,112,36,115,97,118,101,46,112,110, +103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68, +69,82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, +65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, +67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,48,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,49,48, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, +110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, +105,116,108,101,62,83,97,118,101,32,80,114,111,106,101,116,32,70,105,108, +101,32,65,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, +116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, +32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119, +120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79, +88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68, +105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,76,79,67,65,76, +69,95,83,69,84,85,80,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61, +34,76,111,99,97,108,101,83,101,116,117,112,68,108,103,34,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, 10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, -68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,92,110,83,101,108,101,99,116,32,119, +104,101,116,104,101,114,32,116,111,32,117,115,101,32,112,101,114,105,111, +100,115,32,111,114,32,99,111,109,109,97,115,32,97,115,92,110,115,101,112, +97,114,97,116,111,114,115,32,105,110,32,110,117,109,101,114,105,99,32,102, +105,101,108,100,115,46,32,92,110,92,110,69,46,103,46,44,32,98,121,32,100, +101,102,97,117,108,116,44,32,71,101,111,68,97,32,117,115,101,115,32,99, +111,109,109,97,115,32,116,111,92,110,115,101,112,97,114,97,116,101,32,116, +104,111,117,115,97,110,100,115,32,97,110,100,32,112,101,114,105,111,100, +115,92,110,102,111,114,32,100,101,99,105,109,97,108,115,32,40,49,44,48, +48,48,46,48,48,41,46,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, +76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,110,99, -101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116, -108,101,62,83,97,118,101,32,80,114,111,106,101,116,32,70,105,108,101,32, -65,115,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101, -114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32, -60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, -83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47, -115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, -111,103,34,32,110,97,109,101,61,34,73,68,68,95,76,79,67,65,76,69,95,83, -69,84,85,80,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,76,111, -99,97,108,101,83,101,116,117,112,68,108,103,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47, +118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103, +97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,92,110,83,101,108,101,99,116,32,119,104,101, -116,104,101,114,32,116,111,32,117,115,101,32,112,101,114,105,111,100,115, -32,111,114,32,99,111,109,109,97,115,32,97,115,92,110,115,101,112,97,114, -97,116,111,114,115,32,105,110,32,110,117,109,101,114,105,99,32,102,105, -101,108,100,115,46,32,92,110,92,110,69,46,103,46,44,32,98,121,32,100,101, -102,97,117,108,116,44,32,71,101,111,68,97,32,117,115,101,115,32,99,111, -109,109,97,115,32,116,111,92,110,115,101,112,97,114,97,116,101,32,116,104, -111,117,115,97,110,100,115,32,97,110,100,32,112,101,114,105,111,100,115, -92,110,102,111,114,32,100,101,99,105,109,97,108,115,32,40,49,44,48,48,48, -46,48,48,41,46,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124, -119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95, +83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,68,101,99,105,109,97,108,58,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90, +69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110, +97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,68,69,67,73,77,65,76,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, -108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, -97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112, -62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83, -84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,68,101,99,105,109,97,108,58,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, -119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97, -109,101,61,34,73,68,67,95,70,73,69,76,68,95,68,69,67,73,77,65,76,34,62, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, +49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,84,104,111,117,115,97,110,100,115,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,70,73,69,76,68,95,84,72,79,85,83,65,78,68,83,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, 101,62,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, @@ -32813,41 +32983,12 @@ static unsigned char xml_res_file_8[] = { 119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,49,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,84,104,111,117,115,97,110,100,115,58,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, -76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, -34,73,68,67,95,70,73,69,76,68,95,84,72,79,85,83,65,78,68,83,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, @@ -33364,8 +33505,8 @@ static unsigned char xml_res_file_8[] = { 115,105,122,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,60,47,114, 101,115,111,117,114,99,101,62,10}; -static size_t xml_res_size_9 = 936; -static unsigned char xml_res_file_9[] = { +static size_t xml_res_size_10 = 936; +static unsigned char xml_res_file_10[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,8,0,0,0,8,8,6,0,0,0, 196,15,190,139,0,0,2,206,105,67,67,80,73,67,67,32,80,114,111,102,105,108, 101,0,0,120,218,141,147,203,107,20,89,20,135,191,234,220,160,144,32,12, @@ -33412,8 +33553,8 @@ static unsigned char xml_res_file_9[] = { 195,15,186,16,166,183,179,143,115,70,253,38,236,33,84,254,37,69,110,78, 113,195,20,26,21,90,52,110,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_10 = 82528; -static unsigned char xml_res_file_10[] = { +static size_t xml_res_size_11 = 92085; +static unsigned char xml_res_file_11[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,117,116,102,45,56,34,63,62,10,60,114,101, 115,111,117,114,99,101,32,99,108,97,115,115,61,34,119,120,66,111,120,83, @@ -36197,7 +36338,8 @@ static unsigned char xml_res_file_10[] = { 109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,85,82,82,69, -78,84,95,75,69,89,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32, +78,84,95,75,69,89,95,67,72,79,73,67,69,34,32,115,117,98,99,108,97,115,115, +61,34,71,100,97,67,104,111,105,99,101,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, 62,56,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, @@ -36572,331 +36714,257 @@ static unsigned char xml_res_file_10[] = { 69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79, 88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68, -105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,65,71,71,82,69,71, -65,84,69,95,68,65,84,65,95,68,76,71,34,32,115,117,98,99,108,97,115,115, -61,34,65,103,103,114,101,103,97,116,101,68,108,103,34,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,99,114,111,108, -108,101,100,87,105,110,100,111,119,34,32,110,97,109,101,61,34,73,68,95, -65,71,71,82,69,71,65,84,69,95,83,67,82,79,76,76,95,87,73,78,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,72,83,67,82, -79,76,76,124,119,120,86,83,67,82,79,76,76,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97,109,101, -61,34,73,68,95,65,71,71,95,83,67,82,79,76,76,95,87,73,78,95,83,73,90,69, -82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122, -101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76, +86,69,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,68,105,115,115, +111,108,118,101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, -68,95,65,71,71,82,69,71,65,84,69,95,67,79,85,78,84,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,67,111,117,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, -117,101,62,49,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,99,114,111,108,108,101,100,87,105,110,100, +111,119,34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76,86,69,95, +83,67,82,79,76,76,95,87,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,72,83,67,82,79,76,76,124,119,120,86,83,67, +82,79,76,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76, +86,69,95,83,67,82,79,76,76,95,87,73,78,95,83,73,90,69,82,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,108,101,99,116,32,118,97,114,105,97,98,108,101,32,102,111, +114,32,100,105,115,115,111,108,118,105,110,103,58,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +86,69,82,84,73,67,65,76,124,119,120,82,73,71,72,84,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,95,65,71,71,82,69,71,65,84,69,95,65,86, -71,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,65,118,101,114,97,103,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,95,67,85,82,82,69,78,84,95,75,69,89,95,67,72,79,73,67,69, +34,32,115,117,98,99,108,97,115,115,61,34,71,100,97,67,104,111,105,99,101, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,56,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100, -105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,71, -71,82,69,71,65,84,69,95,77,65,88,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,97, -120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, +73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,95,65,71,71,82,69,71,65,84,69,95,77,73,78,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,77,105,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97, +109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,95,65,71,71,82,69,71,65,84,69,95,83,85,77,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,117,109,60,47,108,97,98,101,108,62,10,32,32, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32, +118,97,114,105,97,98,108,101,115,58,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,77,101,116,104,111,100,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,55,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111, -120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78, -89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,101,108,101,99,116,32,107,101,121,58,60,47,108,97,98,101,108, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82,73,71,72, -84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,55,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, -101,61,34,73,68,95,67,85,82,82,69,78,84,95,75,69,89,95,67,72,79,73,67,69, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,56,53,44,45,49,100,60,47,115,105,122,101, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, +34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,85,68,69,95,76,73,83,84, +34,32,115,117,98,99,108,97,115,115,61,34,71,100,97,76,105,115,116,66,111, +120,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,56,55, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, -84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119, -120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32,102, -105,101,108,100,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, -86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,95,73,78,67,95,65,76,76,95,66,85,84,84,79,78,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +38,103,116,59,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,69,88,67, -76,85,68,69,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,57,48,44,56,55,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, +84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, -88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, -116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,95,73,78,67,95,65,76,76,95,66,85,84,84, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,73, +78,67,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,79,78,69,95,66,85,84,84, 79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45, 49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,38,103,116,59,38,103,116,59,60,47,108,97,98,101,108,62,10,32, +101,108,62,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, -68,95,73,78,67,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,69,88, +67,76,95,65,76,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,108,116,59,38,108,116,59, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,79,78,69, -95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,38,108,116,59,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, +69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, -82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,73,68,95,69,88,67,76,95,65,76,76,95,66,85,84,84,79,78,34,62,10,32, +108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109, +101,61,34,73,68,95,73,78,67,76,85,68,69,95,76,73,83,84,34,32,115,117,98, +99,108,97,115,115,61,34,71,100,97,76,105,115,116,66,111,120,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45,49,100,60,47,115, +32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,56,55,100,60,47,115, 105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,108, -116,59,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, -34,32,110,97,109,101,61,34,73,68,95,73,78,67,76,85,68,69,95,76,73,83,84, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,56,55,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, 116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, 68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -36923,64 +36991,147 @@ static unsigned char xml_res_file_10[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97,114,97,109,101, -116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,55,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,119,120,73,68,95,65,71,71,82,69,71,65,84,69, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,65,103,103,114,101,103,97,116,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120, -76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -119,120,73,68,95,67,76,79,83,69,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79, -77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,116,104,111,100, +58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76,86,69,95,67,79,85, +78,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,111,117,110,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, -69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100, +105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,68,73, +83,83,79,76,86,69,95,65,86,71,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,118,101, +114,97,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109, +101,61,34,73,68,95,68,73,83,83,79,76,86,69,95,77,65,88,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,77,97,120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,95,68,73,83,83,79,76,86,69,95,77,73,78,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,77,105,110,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76,86,69, +95,83,85,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,117,109,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,65,116,116,114,105,98,117,116,101,115,32,40,79, +112,116,105,111,110,97,108,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,55,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,68,73,83,83,79, +76,86,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,68,105,115,115,111,108,118,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119, +120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,119,120,73,68,95,67,76,79,83,69,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47, -111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,116,105,116,108,101,62,65,103,103,114,101,103,97,116, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84, +79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,116,105,116,108,101,62,68,105,115,115,111,108,118, 101,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114, 101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60, 115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83, @@ -36988,183 +37139,602 @@ static unsigned char xml_res_file_10[] = { 82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62, 10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, -101,61,34,73,68,95,67,65,76,67,85,76,65,84,79,82,95,68,76,71,34,32,115, -117,98,99,108,97,115,115,61,34,67,97,108,99,117,108,97,116,111,114,68,108, -103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,69,120,112,114,101,115,115,105,111, -110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -84,79,80,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +101,61,34,73,68,95,65,71,71,82,69,71,65,84,69,95,68,65,84,65,95,68,76,71, +34,32,115,117,98,99,108,97,115,115,61,34,65,103,103,114,101,103,97,116, +101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101, -120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,69,88,80,82, -69,83,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,50,48,48,44,51,48,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -84,69,95,77,85,76,84,73,76,73,78,69,124,119,120,84,69,95,82,73,67,72,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,69,88,80,65,78,68,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,95,77,69,83,83,65,71,69,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,50,49,48,44,50,48,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124, -119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +115,61,34,119,120,83,99,114,111,108,108,101,100,87,105,110,100,111,119, +34,32,110,97,109,101,61,34,73,68,95,65,71,71,82,69,71,65,84,69,95,83,67, +82,79,76,76,95,87,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,72,83,67,82,79,76,76,124,119,120,86,83,67,82,79, +76,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,32,110,97,109,101,61,34,73,68,95,65,71,71,95,83,67,82, +79,76,76,95,87,73,78,95,83,73,90,69,82,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34, +119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111, +110,34,32,110,97,109,101,61,34,73,68,95,65,71,71,82,69,71,65,84,69,95,67, +79,85,78,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,117,110,116,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108,117,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,76,66,76,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,97, -107,101,32,115,101,108,101,99,116,105,111,110,32,102,114,111,109,32,101, -120,112,114,101,115,115,105,111,110,32,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100, +105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,71, +71,82,69,71,65,84,69,95,65,86,71,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,118, +101,114,97,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,95,65,71,71,82,69,71,65,84,69,95,77,65,88,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,77,97,120,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,51,44,45,49,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, -116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,101,108,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65, -67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,65,71,71,82,69,71,65,84,69,95,77,73, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,77,105,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,71,71,82,69,71,65, +84,69,95,83,85,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,117,109,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,116,104,111,100,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,84,65,82,71,69,84,95, -76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,84,97,114,103,101,116,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97,109, +101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, -99,101,34,32,110,97,109,101,61,34,73,68,95,84,65,82,71,69,84,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,73,68,95,78,69,87,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,78,101,119,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32,107, +101,121,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,85,82,82,69,78,84, +95,75,69,89,95,67,72,79,73,67,69,34,32,115,117,98,99,108,97,115,115,61, +34,71,100,97,67,104,111,105,99,101,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,53, +44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +86,69,82,84,73,67,65,76,124,119,120,66,79,84,84,79,77,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,49,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +101,108,101,99,116,32,102,105,101,108,100,115,58,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, 95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, +84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34, +73,68,95,69,88,67,76,85,68,69,95,76,73,83,84,34,32,115,117,98,99,108,97, +115,115,61,34,71,100,97,76,105,115,116,66,111,120,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,57,48,44,56,55,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66, +95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,73,78,67,95,65, +76,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,38,103,116,59,38,103,116,59,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,73,78,67,95,79,78,69,95,66,85,84,84, +79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,69,88, +67,76,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,108,116,59,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,65,76,76,95,66,85,84,84, +79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,38,108,116,59,38,108,116,59,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, +90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,83,83,73,71,78,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65, -115,115,105,103,110,32,84,111,32,84,97,114,103,101,116,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,76,69, -70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101, -62,67,97,108,99,117,108,97,116,111,114,60,47,116,105,116,108,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115, +116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,73,78,67,76,85,68,69, +95,76,73,83,84,34,32,115,117,98,99,108,97,115,115,61,34,71,100,97,76,105, +115,116,66,111,120,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +57,48,44,56,55,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80, +65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, +90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, +79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119, +120,73,68,95,65,71,71,82,69,71,65,84,69,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,103,103, +114,101,103,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,66,79,84,84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71, +72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,76,79,83,69, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,76,69,70,84,124,119, +120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,55,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108, +101,62,65,103,103,114,101,103,97,116,101,60,47,116,105,116,108,101,62,10, 32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116, -101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,68, -69,70,65,85,76,84,95,68,73,65,76,79,71,95,83,84,89,76,69,124,119,120,82, -69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79, -88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,60,47,114,101,115,111,117,114,99,101,62,10}; +101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67, +65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, +120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95, +66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,67,65,76, +67,85,76,65,84,79,82,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61, +34,67,97,108,99,117,108,97,116,111,114,68,108,103,34,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,120,112,114,101,115,115,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,76,69,70, +84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,51,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110, +97,109,101,61,34,73,68,95,69,88,80,82,69,83,83,73,79,78,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,48,44,51, +48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,84,69,95,77,85,76,84,73,76,73,78, +69,124,119,120,84,69,95,82,73,67,72,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, +84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84, +124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,77,69,83,83,65, +71,69,34,62,10,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,49, +48,44,50,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67, +84,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,77,97,107,101,32,115,101,108,101,99,116,105,111,110,32, +102,114,111,109,32,101,120,112,114,101,115,115,105,111,110,32,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,45,49,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,95,83,69,76,69,67,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,82,73,71,72,84, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +95,84,65,82,71,69,84,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,84,97,114,103,101,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,53,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,84, +65,82,71,69,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, +111,110,34,32,110,97,109,101,61,34,73,68,95,78,69,87,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,95,65,83,83,73,71,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,65,115,115,105,103,110,32,84,111,32,84, +97,114,103,101,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67, +84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +66,79,84,84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,116,105,116,108,101,62,67,97,108,99,117,108,97,116,111,114, +60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, +100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, +116,121,108,101,62,119,120,68,69,70,65,85,76,84,95,68,73,65,76,79,71,95, +83,84,89,76,69,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119, +120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60, +47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62, +10}; -static size_t xml_res_size_11 = 188496; -static unsigned char xml_res_file_11[] = { +static size_t xml_res_size_12 = 194157; +static unsigned char xml_res_file_12[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63, 62,10,60,114,101,115,111,117,114,99,101,62,10,32,32,60,111,98,106,101,99, @@ -37283,46 +37853,51 @@ static unsigned char xml_res_file_11[] = { 34,73,68,95,84,65,66,76,69,95,83,80,65,84,73,65,76,95,74,79,73,78,34,62, 10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97, 108,32,74,111,105,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,38,97,109,112,59,97,98, -108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,65,71,71,82,69,71, -65,84,73,79,78,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,65,103,103,114,101,103,97,116,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95, -77,69,82,71,69,95,84,65,66,76,69,95,68,65,84,65,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,77,101,114,103,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, -97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,82,65,78,71,69,95,83, -69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,101,108,101,99,116,105,111,110,32,84,111,111,108,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84, -65,66,76,69,95,73,78,86,69,82,84,95,83,69,76,69,67,84,73,79,78,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,118,101,114,116, -32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,67,76, -69,65,82,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,108,101,97,114,32,83,101,108,101,99,116,105, -111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79, -76,85,77,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,72,65,80,69,95,68,73,83,83,79,76,86,69, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,115, +111,108,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,84,38,97,109,112,59,97,98,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,65,71,71,82,69,71,65,84, +73,79,78,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,65,103,103,114,101,103,97,116,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,77, +69,82,71,69,95,84,65,66,76,69,95,68,65,84,65,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,77,101,114,103,101,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,84,65,66,76,69,95,82,65,78,71,69,95,83,69,76, +69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,101,108,101,99,116,105,111,110,32,84,111,111,108,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65, +66,76,69,95,73,78,86,69,82,84,95,83,69,76,69,67,84,73,79,78,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,118,101,114,116,32, +83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,67,76,69, +65,82,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,108,101,97,114,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76, +85,77,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95, 77,79,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,84,79,80,34,62,10,32, 32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,118,101,32,83,101,108, @@ -37351,766 +37926,766 @@ static unsigned char xml_res_file_11[] = { 69,76,68,95,80,82,79,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,69,100,105,116,32,86,97,114,105,97,98,108,101,32,80,114,111,112, 101,114,116,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,33,45,45,10,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -65,76,67,85,76,65,84,79,82,34,62,10,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,97,108,99,117,108,97,116,111,114,32,40,98,101,116,97,41,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,84,65,66,76,69,95,67,72,65,78,71,69,95,70,73,69,76,68,95,84,89,80, -69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110, -103,101,32,86,97,114,105,97,98,108,101,32,84,121,112,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,45,45,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95, -69,78,67,79,68,73,78,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,69,110,99,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78, -67,79,68,73,78,71,95,85,84,70,56,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40,85,84,70,45,56, -41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78, -67,79,68,73,78,71,95,85,84,70,49,54,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40,85,84,70,45, -49,54,76,69,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73, -78,71,95,87,73,78,68,79,87,83,95,49,50,53,54,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,65,114,97,98,105,99,32,40,87,105,110, -100,111,119,115,45,49,50,53,54,41,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56, -53,57,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,101,110,116,114,97,108,32,69,117,114,111,112,101,97,110,32,76,97, -116,105,110,45,50,32,40,73,83,79,45,56,56,53,57,45,50,41,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, -95,87,73,78,68,79,87,83,95,49,50,53,48,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,101,110,116,114,97,108,32,69,117,114,111, -112,101,97,110,32,40,87,105,110,100,111,119,115,45,49,50,53,48,41,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79, -68,73,78,71,95,67,80,56,53,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,101,110,116,114,97,108,32,69,117,114,111,112,101, -97,110,32,40,67,80,56,53,50,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,71,66,50,51,49,50,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,105, -110,101,115,101,32,83,105,109,112,108,105,102,105,101,100,32,40,71,66,50, -51,49,50,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,84,65,66, +76,69,95,69,78,67,79,68,73,78,71,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,69,110,99,111,100,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,69,78,67,79,68,73,78,71,95,85,84,70,56,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40,85,84, +70,45,56,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, 108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,69,78,67,79,68,73,78,71,95,66,73,71,53,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,104,105,110,101,115,101,32,84,114, -97,100,105,116,105,111,110,97,108,32,40,66,105,103,53,41,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +68,95,69,78,67,79,68,73,78,71,95,85,84,70,49,54,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40, +85,84,70,45,49,54,76,69,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,54,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,114,97,98,105,99, +32,40,87,105,110,100,111,119,115,45,49,50,53,54,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, -95,73,83,79,95,56,56,53,57,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,121,114,105,108,108,105,99,32,40,73,83,79,45, -56,56,53,57,45,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,78,67,79,68,73,78,71,95,75,79,73,56,95,82,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108, -105,99,32,40,75,79,73,56,45,82,41,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,87,73,78,68,79,87, -83,95,49,50,53,49,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,121,114,105,108,108,105,99,32,40,87,105,110,100,111,119,115,45, -49,50,53,49,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +95,73,83,79,95,56,56,53,57,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,101,110,116,114,97,108,32,69,117,114,111,112, +101,97,110,32,76,97,116,105,110,45,50,32,40,73,83,79,45,56,56,53,57,45, +50,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,48,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97, +108,32,69,117,114,111,112,101,97,110,32,40,87,105,110,100,111,119,115,45, +49,50,53,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,69,78,67,79,68,73,78,71,95,67,80,56,54,54,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108,105,99, -47,82,117,115,115,105,97,110,32,40,67,80,56,54,54,41,60,47,108,97,98,101, +73,68,95,69,78,67,79,68,73,78,71,95,67,80,56,53,50,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97,108,32, +69,117,114,111,112,101,97,110,32,40,67,80,56,53,50,41,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, -95,73,83,79,95,56,56,53,57,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,71,114,101,101,107,32,40,73,83,79,45,56,56,53,57, -45,55,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +95,71,66,50,51,49,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,104,105,110,101,115,101,32,83,105,109,112,108,105,102,105, +101,100,32,40,71,66,50,51,49,50,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,66,73,71,53,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,105, +110,101,115,101,32,84,114,97,100,105,116,105,111,110,97,108,32,40,66,105, +103,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,56,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,101,98,114,101,119, -32,40,73,83,79,45,56,56,53,57,45,56,45,49,41,60,47,108,97,98,101,108,62, +95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,53,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108, +105,99,32,40,73,83,79,45,56,56,53,57,45,53,41,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, 49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,87,73, -78,68,79,87,83,95,49,50,53,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,72,101,98,114,101,119,32,40,87,105,110,100,111,119, -115,45,49,50,53,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,78,67,79,68,73,78,71,95,83,72,73,70,84,95,74,73,83,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,74,97,112,97,110, -101,115,101,32,40,83,104,105,102,116,95,74,73,83,41,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, -95,69,85,67,95,74,80,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,74,97,112,97,110,101,115,101,32,40,69,85,67,45,74,80,41,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79, -68,73,78,71,95,69,85,67,95,75,82,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,75,111,114,101,97,110,32,40,69,85,67,45,75,82,41, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67, -79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,48,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,100,105,99,32,76,97, -116,105,110,45,54,32,40,73,83,79,45,56,56,53,57,45,49,48,41,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78, -71,95,73,83,79,95,56,56,53,57,95,51,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,111,117,116,104,32,69,117,114,111,112,101, -97,110,32,76,97,116,105,110,45,51,32,40,73,83,79,45,56,56,53,57,45,51,41, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67, -79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,57,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,84,117,114,107,105,115,104,32,76, -97,116,105,110,45,53,32,40,73,83,79,45,56,56,53,57,45,57,41,60,47,108,97, +109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,75,79, +73,56,95,82,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,121,114,105,108,108,105,99,32,40,75,79,73,56,45,82,41,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78, -71,95,87,73,78,68,79,87,83,95,49,50,53,52,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,84,117,114,107,105,115,104,32,40,87,105, -110,100,111,119,115,45,49,50,53,52,41,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,87,73,78,68, -79,87,83,95,49,50,53,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,86,105,101,116,110,97,109,101,115,101,32,40,87,105,110,100, -111,119,115,45,49,50,53,56,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53, -57,95,49,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -87,101,115,116,32,69,117,114,111,112,101,97,110,32,76,97,116,105,110,45, -49,32,40,73,83,79,45,56,56,53,57,45,49,41,60,47,108,97,98,101,108,62,10, +71,95,87,73,78,68,79,87,83,95,49,50,53,49,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108,105,99,32,40,87, +105,110,100,111,119,115,45,49,50,53,49,41,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, 60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79, -95,56,56,53,57,95,49,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,87,101,115,116,32,69,117,114,111,112,101,97,110,32,76,97, -116,105,110,45,57,32,40,73,83,79,45,56,56,53,57,45,49,53,41,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83, -83,73,70,95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,38,97,109,112,59,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, -78,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101, -108,101,115,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,83, -85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,81,117,97,110,116,105,108,101,32,77,97,112,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, -80,69,78,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81, -85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,67,80,56, +54,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +121,114,105,108,108,105,99,47,82,117,115,115,105,97,110,32,40,67,80,56, +54,54,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,55,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,114,101,101,107,32, +40,73,83,79,45,56,56,53,57,45,55,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56, +56,53,57,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,101,98,114,101,119,32,40,73,83,79,45,56,56,53,57,45,56,45,49, +41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78, +67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,101,98,114,101,119,32, +40,87,105,110,100,111,119,115,45,49,50,53,53,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78, -84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, +101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95, +83,72,73,70,84,95,74,73,83,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,74,97,112,97,110,101,115,101,32,40,83,104,105,102,116, +95,74,73,83,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,69,78,67,79,68,73,78,71,95,69,85,67,95,74,80,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,74,97,112,97,110,101,115,101, +32,40,69,85,67,45,74,80,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,69,85,67,95,75,82,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,111,114,101,97, +110,32,40,69,85,67,45,75,82,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53, +57,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,78,111,114,100,105,99,32,76,97,116,105,110,45,54,32,40,73,83,79,45,56, +56,53,57,45,49,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,51,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,111,117, +116,104,32,69,117,114,111,112,101,97,110,32,76,97,116,105,110,45,51,32, +40,73,83,79,45,56,56,53,57,45,51,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95, -54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56, +56,53,57,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,84,117,114,107,105,115,104,32,76,97,116,105,110,45,53,32,40,73,83, +79,45,56,56,53,57,45,57,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,55,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,56,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81, -85,65,78,84,73,76,69,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83, -95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110, -116,105,108,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65, -76,89,83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103, -101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49, +50,53,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +84,117,114,107,105,115,104,32,40,87,105,110,100,111,119,115,45,49,50,53, +52,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,56,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,116,110,97, +109,101,115,101,32,40,87,105,110,100,111,119,115,45,49,50,53,56,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79, +68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,87,101,115,116,32,69,117,114,111,112, +101,97,110,32,76,97,116,105,110,45,49,32,40,73,83,79,45,56,56,53,57,45, +49,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,115,116,32,69,117, +114,111,112,101,97,110,32,76,97,116,105,110,45,57,32,40,73,83,79,45,56, +56,53,57,45,49,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,77,97,112, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, 110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83, -73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51, -46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72, -79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100,32,68,101,118, -105,97,116,105,111,110,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80, -65,78,65,76,89,83,73,83,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101, -32,86,97,108,117,101,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,32,77,97,112,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69, +78,95,81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,32, +77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80, -65,78,65,76,89,83,73,83,95,67,79,76,79,67,65,84,73,79,78,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,45,108,111,99,97,116,105, -111,110,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, -95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,32,77,97,112,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65, +78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76, +69,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,52,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, +78,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85, +65,78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65, -76,95,66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78, -65,84,85,82,65,76,95,66,82,69,65,75,83,95,53,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78, -95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,54,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,55,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73, +76,69,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,49, +48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, +80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69, +84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,32,77,97, +112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78, +71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46,53,41,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, +80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,51,48, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32, +77,97,112,32,40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77, +65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,83,84, +68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +116,97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110,32,77,97, +112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,85,78,73, +81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,85,110,105,113,117,101,32,86,97,108,117,101,115,32,77,97, +112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,67,79,76, +79,67,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,45,108,111,99,97,116,105,111,110,32,77,97,112,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78, +65,84,85,82,65,76,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108, +32,66,114,101,97,107,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,56,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97, +95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,57, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47, +73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,51, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, 61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, -95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69, -81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66,77,69,78,85,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117,97,108,32, -73,110,116,101,114,118,97,108,115,32,77,97,112,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83, -95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50, +95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82, -86,65,76,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, +109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69, +65,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84, -69,82,86,65,76,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95, -73,78,84,69,82,86,65,76,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85, -65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66, +82,69,65,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76, +95,66,82,69,65,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85, +82,65,76,95,66,82,69,65,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65, +84,85,82,65,76,95,66,82,69,65,75,83,95,57,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78, +65,84,85,82,65,76,95,66,82,69,65,75,83,95,49,48,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69, +82,86,65,76,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118,97, +108,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69, -81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,55,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10, +81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,50,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, -78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,56,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, +78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,51,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,57,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108, +95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,52,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, 34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83, -95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67, -85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32, -66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82, +86,65,76,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84, +69,82,86,65,76,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95, +73,78,84,69,82,86,65,76,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85, +65,76,95,73,78,84,69,82,86,65,76,83,95,57,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85, -83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78, -101,119,32,67,117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78, -95,82,65,84,69,83,95,83,77,79,79,84,72,95,82,65,87,82,65,84,69,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97,119,32,82,97, -116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,82,65,84,69,83,95,83,77,79,79,84,72,95,69,88,67,69,83, -83,82,73,83,75,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,69,120,99,101,115,115,32,82,105,115,107,60,47,108,97,98,101,108, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69, +81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,49,48,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,69,82,65,82,67,72,73, +67,65,76,95,77,65,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,105,101,114,97,114,99,104,105,99,97,108,32,77,97,112,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83, +95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65, +83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,77,79,79, +84,72,95,82,65,87,82,65,84,69,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,82,97,119,32,82,97,116,101,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, 62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84,69, -83,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,95,83,77,79,79,84,72, -69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69, -109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84, -69,83,95,83,80,65,84,73,65,76,95,82,65,84,69,95,83,77,79,79,84,72,69,82, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97, -116,105,97,108,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,80,65,84, -73,65,76,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108, -32,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,82,97,116,101,115,45,67,97,108,99,117,108,97,116,101,100, -32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, -79,87,95,67,79,78,68,73,84,73,79,78,65,76,95,77,65,80,95,86,73,69,87,95, -77,65,80,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,110,100,105,116,105,111,110,97,108,32,77,97,112,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -72,79,87,95,67,65,82,84,79,71,82,65,77,95,78,69,87,95,86,73,69,87,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,114,116,111,103, -114,97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79, -87,95,68,65,84,65,95,77,79,86,73,69,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,77,97,112,32,77,111,118,105,101,60,47,108,97,98,101, +83,95,83,77,79,79,84,72,95,69,88,67,69,83,83,82,73,83,75,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,120,99,101,115,115,32, +82,105,115,107,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,82,65,84,69,83,95,69,77,80,73,82,73,67,65,76,95, +66,65,89,69,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,69,109,112,105,114,105,99,97,108,32,66, +97,121,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,80,65,84,73,65,76,95,82,65, +84,69,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,112,97,116,105,97,108,32,82,97,116,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78, +95,82,65,84,69,83,95,83,80,65,84,73,65,76,95,69,77,80,73,82,73,67,65,76, +95,66,65,89,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,112,97,116,105,97,108,32,69,109,112,105,114,105,99,97,108,32, +66,97,121,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97,116,101,115, +45,67,97,108,99,117,108,97,116,101,100,32,77,97,112,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,72,73,83,84,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,72,105,115,116,111,103,114,97,109,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,77,95,66,79,88,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,66,111,120,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84,73,79, +78,65,76,95,77,65,80,95,86,73,69,87,95,77,65,80,95,77,69,78,85,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,100,105,116, +105,111,110,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,65,84,84,69,82,80, -76,79,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,99, -97,116,116,101,114,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,65,84,84,69,82, -80,76,79,84,95,77,65,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,99,97,116,116,101,114,32,80,108,111,116,32,77,97,116,114,105, -120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,77,95,66,85,66,66,76,69,67,72,65,82,84,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,66,117,98,98,108,101,32,67,104,97,114, -116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,77,95,51,68,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,51,68,32,83,99,97,116,116,101,114,32,80,108,111,116,60,47,108,97, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,65,82,84, +79,71,82,65,77,95,78,69,87,95,86,73,69,87,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,97,114,116,111,103,114,97,109,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -80,67,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97, -114,97,108,108,101,108,32,67,111,111,114,100,105,110,97,116,101,32,80,108, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,68,65,84,65,95,77, +79,86,73,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77, +97,112,32,77,111,118,105,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,77,95,72,73,83,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,72,105,115,116,111,103,114,97,109,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,66,79,88,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,80,108, 111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,76,73,78,69,95,67,72,65,82,84,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,65,118,101,114,97,103,101,115,32,67,104, -97,114,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,111,110,100,105,116,105,111,110,97,108,32,80,108,111,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +61,34,73,68,77,95,83,67,65,84,84,69,82,80,76,79,84,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,99,97,116,116,101,114,32,80,108, +111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,77,95,83,67,65,84,84,69,82,80,76,79,84,95,77,65,84,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,99,97,116,116,101,114, +32,80,108,111,116,32,77,97,116,114,105,120,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,66,85,66,66,76,69, +67,72,65,82,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +66,117,98,98,108,101,32,67,104,97,114,116,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,51,68,80,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,68,32,83,99,97,116,116, +101,114,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84,73, -79,78,65,76,95,77,65,80,95,86,73,69,87,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,77,97,112,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87, -95,67,79,78,68,73,84,73,79,78,65,76,95,72,73,83,84,95,86,73,69,87,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,115,116, -111,103,114,97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +34,32,110,97,109,101,61,34,73,68,77,95,80,67,80,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,80,97,114,97,108,108,101,108,32,67,111, +111,114,100,105,110,97,116,101,32,80,108,111,116,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,73,78,69,95, +67,72,65,82,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +65,118,101,114,97,103,101,115,32,67,104,97,114,116,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,77,69,78, +85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110, +100,105,116,105,111,110,97,108,32,80,108,111,116,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,72,79,87,95,67,79,78,68,73,84,73,79,78,65,76,95,77,65,80, +95,86,73,69,87,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, 109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84, -73,79,78,65,76,95,83,67,65,84,84,69,82,95,86,73,69,87,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,99,97,116,116,101,114,32, -80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,38,97,109,112,59, -120,112,108,111,114,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,67,76,85,83,84,69,82,73,78,71,95,77,69,78,85,34,62,10,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,108,117,115,116,101,114,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +73,79,78,65,76,95,72,73,83,84,95,86,73,69,87,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,72,105,115,116,111,103,114,97,109,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,80,67,65,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,67,65,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79, -76,83,95,68,65,84,65,95,77,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,77,68,83,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,65,78,83,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,97,110,115,60, +101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84,73,79,78,65,76,95,83, +67,65,84,84,69,82,95,86,73,69,87,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,99,97,116,116,101,114,32,80,108,111,116,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,69,38,97,109,112,59,120,112,108,111,114, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,76,85,83,84,69, +82,73,78,71,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,108,117,115,116,101,114,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84, +79,79,76,83,95,68,65,84,65,95,80,67,65,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,80,67,65,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84, +65,95,77,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +77,68,83,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76, +83,95,68,65,84,65,95,75,77,69,65,78,83,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,75,32,77,101,97,110,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95, +68,65,84,65,95,75,77,69,68,73,65,78,83,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,75,32,77,101,100,105,97,110,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79, +79,76,83,95,68,65,84,65,95,75,77,69,68,79,73,68,83,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,100,111,105,100,115,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,68,73,65,78,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,100,105,97, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,68,79,73,68,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,100, -111,105,100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,83,80,69,67,84, -82,65,76,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112, -101,99,116,114,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,72,67,76, -85,83,84,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -72,105,101,114,97,114,99,104,105,99,97,108,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68, -65,84,65,95,72,68,66,83,67,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,72,68,66,83,99,97,110,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, -111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,83,75,65,84,69,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,115,107,97,116,101, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +68,95,84,79,79,76,83,95,68,65,84,65,95,83,80,69,67,84,82,65,76,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101,99,116,114,97, +108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,82,69,68,67,65,80,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,114,101,100,99,97,112,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,84,79,79,76,83,95,68,65,84,65,95,77,65,88,80,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,109,97,120,45,112,60,47,108,97,98,101, +34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,72,67,76,85,83,84,69,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,101,114,97, +114,99,104,105,99,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,72,68, +66,83,67,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +72,68,66,83,99,97,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84, +79,79,76,83,95,68,65,84,65,95,83,75,65,84,69,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,115,107,97,116,101,114,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79, +79,76,83,95,68,65,84,65,95,82,69,68,67,65,80,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,114,101,100,99,97,112,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,38,97,109,112,59,83,112,97,99,101,60,47,108,97,98,101,108,62,10, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79, +76,83,95,68,65,84,65,95,77,65,88,80,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,109,97,120,45,112,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97, +109,112,59,83,112,97,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,83,80,76,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97, +114,105,97,116,101,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,71,77, +79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66, +105,118,97,114,105,97,116,101,32,77,111,114,97,110,39,115,32,73,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -77,83,80,76,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85, -110,105,118,97,114,105,97,116,101,32,77,111,114,97,110,39,115,32,73,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,77,95,71,77,79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,66,105,118,97,114,105,97,116,101,32,77,111,114,97,110,39,115, -32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,68,77,79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,77, +68,77,79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,102,102,101,114,101,110,116,105,97,108,32,77,111,114,97,110,39, +115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,77,79,82,65,78,95,69,66,82,65,84,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,114,97,110,39,115,32,73, +32,119,105,116,104,32,69,66,32,82,97,116,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,77,95,85,78,73,95,76,73,83,65,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116, +101,32,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +77,85,76,84,73,95,76,73,83,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,66,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,77, 111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,77,79,82,65,78,95,69,66,82,65,84, -69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,114, -97,110,39,115,32,73,32,119,105,116,104,32,69,66,32,82,97,116,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,76,73,83, -65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105, -118,97,114,105,97,116,101,32,76,111,99,97,108,32,77,111,114,97,110,39,115, +34,32,110,97,109,101,61,34,73,68,77,95,68,73,70,70,95,76,73,83,65,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,102,102,101,114, +101,110,116,105,97,108,32,76,111,99,97,108,32,77,111,114,97,110,39,115, 32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,77,85,76,84,73,95,76,73,83,65,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,66,105,118,97,114,105,97,116,101,32,76, -111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,68,73,70,70,95, -76,73,83,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -105,102,102,101,114,101,110,116,105,97,108,32,76,111,99,97,108,32,77,111, -114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,77,95,76,73,83,65,95,69,66,82,65,84,69,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108, -32,77,111,114,97,110,39,115,32,73,32,119,105,116,104,32,69,66,32,82,97, -116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67, -65,76,95,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -111,99,97,108,32,71,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +61,34,73,68,77,95,76,73,83,65,95,69,66,82,65,84,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,77,111,114,97,110, +39,115,32,73,32,119,105,116,104,32,69,66,32,82,97,116,101,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,71,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,76,79,67,65,76,95,71,95,83,84,65,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71,42,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,74,79,73,78, +84,95,67,79,85,78,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,85,110,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,74,111, +105,110,32,67,111,117,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,77,95,66,73,86,95,76,74,67,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,105,118,97,114,105,97, +116,101,32,76,111,99,97,108,32,74,111,105,110,32,67,111,117,110,116,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,77,95,77,85,76,95,76,74,67,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,111,45,108,111,99,97,116,105,111,110,32,74,111,105,110, +32,67,111,117,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71,101,97, +114,121,32,77,97,112,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,76, +79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,76,111,99,97,108, +32,71,101,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,71,95,83,84,65,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108, -32,71,42,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67, -65,76,95,74,79,73,78,84,95,67,79,85,78,84,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,76,111, -99,97,108,32,74,111,105,110,32,67,111,117,110,116,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +110,97,109,101,61,34,73,68,77,95,77,85,76,95,76,79,67,65,76,95,71,69,65, +82,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,117,108, +116,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,71,101,97,114, +121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,66,73,86,95,76, -74,67,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,105,118, -97,114,105,97,116,101,32,76,111,99,97,108,32,74,111,105,110,32,67,111,117, -110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,77,85,76,95,76,74,67,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,77,117,108,116,105,118,97,114,105,97,116,101,32, -76,111,99,97,108,32,74,111,105,110,32,67,111,117,110,116,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,76,111,99,97,108,32,71,101,97,114,121,32,77,97,112,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,77,95,85,78,73,95,76,79,67,65,76,95,71,69,65,82,89,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114, -105,97,116,101,32,76,111,99,97,108,32,71,101,97,114,121,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77, -85,76,95,76,79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,77,117,108,116,105,118,97,114,105,97,116,101, -32,76,111,99,97,108,32,71,101,97,114,121,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,77,95,67,79,82,82,69,76,79,71,82,65,77,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108,32, -67,111,114,114,101,108,111,103,114,97,109,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105, -109,38,97,109,112,59,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,84, -73,77,69,95,67,72,79,79,83,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,84,105,109,101,32,80,108,97,121,101,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,65, -82,95,71,82,79,85,80,73,78,71,95,69,68,73,84,79,82,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,84,105,109,101,32,69,100,105,116,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,38,97,109,112,59,82,101,103,114,101,115,115, -105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,82,69,71,82,69,83,83,73,79,78,95, -67,76,65,83,83,73,67,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,82,101,103,114,101,115,115,105,111,110,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47,101, -110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,67,79,82,82,69, +76,79,71,82,65,77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,112,97,116,105,97,108,32,67,111,114,114,101,108,111,103,114,97,109, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,38,97,109,112,59,72,101,108,112,60,47,108,97, +32,60,108,97,98,101,108,62,84,105,109,38,97,109,112,59,101,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,119,120,73,68,95,67,72,69,67,75,85,80,68,65,84,69,83,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,101,99,107,32,85,112, -100,97,116,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +61,34,73,68,95,83,72,79,87,95,84,73,77,69,95,67,72,79,79,83,69,82,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101,32,80, +108,97,121,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,119,120,73,68,95,82,69,80,79,82,84,66,85,71,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,117,103,32,82,101, -112,111,114,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +110,97,109,101,61,34,73,68,95,86,65,82,95,71,82,79,85,80,73,78,71,95,69, +68,73,84,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +84,105,109,101,32,69,100,105,116,111,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97, +109,112,59,82,101,103,114,101,115,115,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,82,69,71,82,69,83,83,73,79,78,95,67,76,65,83,83,73,67,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,114,101,115,115, +105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101, +110,97,98,108,101,100,62,49,60,47,101,110,97,98,108,101,100,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,79,112,116, +105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109, +112,59,72,101,108,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,119,120,73,68,95,67,72,69,67, +75,85,80,68,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,101,99,107,32,85,112,100,97,116,101,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,119,120,73,68,95, +82,69,80,79,82,84,66,85,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,66,117,103,32,82,101,112,111,114,116,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,119,120,73,68,95,68,79,78, +65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,111, +110,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, 109,101,61,34,119,120,73,68,95,65,66,79,85,84,34,62,10,32,32,32,32,32,32, @@ -38171,19 +38746,25 @@ static unsigned char xml_res_file_11[] = { 95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105, 101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95, -80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105, -115,105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,68,105,115,112,108,97,121,32,83,116,97,116,105,115, -116,105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60, -47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89, +95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99, +105,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82, +69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115, +105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89, +95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,105,115,112,108,97,121,32,83,116,97,116,105,115,116, +105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, 34,73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32,32,32,32,32,32,32, @@ -38582,58 +39163,65 @@ static unsigned char xml_res_file_11[] = { 99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85, -83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66, -114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73, +69,82,65,82,67,72,73,67,65,76,95,77,65,80,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,72,105,101,114,97,114,99,104,105,99,97,108,32, +77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85, -83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78, -101,119,32,67,117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,97,112,32,67,111,108, -111,114,32,67,108,97,115,115,105,102,105,99,97,116,105,111,110,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83, -73,70,95,66,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72, -69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,84,104,101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116, -105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77, +95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95, +67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67, +117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,77,97,112,32,67,111,108,111,114, +32,67,108,97,115,115,105,102,105,99,97,116,105,111,110,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70, +95,66,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72,69,77, +69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +84,104,101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79, +78,68,95,86,69,82,84,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81, +85,65,78,84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,51,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, +95,81,85,65,78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,51,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,53,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,53,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, @@ -39115,733 +39703,755 @@ static unsigned char xml_res_file_11[] = { 65,86,69,95,67,65,84,69,71,79,82,73,69,83,34,62,10,32,32,32,32,32,32,60, 108,97,98,101,108,62,83,97,118,101,32,67,97,116,101,103,111,114,105,101, 115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116, -97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73, -78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, -79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115,32,86,105, -115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, -60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, -119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97,98,101,108, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84,95,86, +73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83, +80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80, +114,101,99,105,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, +112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, +82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, +101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, +76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, +105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116, +108,105,110,101,115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, 60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66, -65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67, -111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83, -80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, -79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, -118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, -69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, -108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87, +95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66,111,117,110,100, +97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79, +76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97, +99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, -65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, -101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,83,67,65,84,84,69,82,95,80,76,79,84,95,86,73, -69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72,69,77,69,76, -69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104, -101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, -69,82,84,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83, +95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83, +69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105, +111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65, +82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121, +32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, +69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60, +47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,83,67,65,84,84,69, +82,95,80,76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83, +34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95, +67,76,65,83,83,73,70,95,66,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, +82,84,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,83,85,66, +77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81, +117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,86,69,82,84,95,81,85,65,78,84,95,50,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, 110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78, -84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, 101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, 10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,86,69,82,84,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32, +78,68,95,86,69,82,84,95,81,85,65,78,84,95,52,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32, 32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, 47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, 32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65, -78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10, +79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,54,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, 60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, 34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85, -65,78,84,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,55,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108, +95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,56,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, 62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, -95,81,85,65,78,84,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,57,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,49,48,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82, +79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,86,69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69, -78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -80,101,114,99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,72,73,78,71,69,95,49,53,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97, -112,32,40,72,105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62, +84,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46, +53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, +82,84,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51, +46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114, +100,32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,85,78,73,81,85,69,95,86,65, +76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85, +110,105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, 47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,72,73,78,71,69,95,51,48, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32, -77,97,112,32,40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82,79,80, -76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116, -105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, -69,82,84,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108, -117,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78, -65,84,95,66,82,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97, -107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, -95,78,65,84,95,66,82,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83, -95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,52,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78, -65,84,95,66,82,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,54, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,55,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65, -84,95,66,82,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,57, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,49,48,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,83,85,66,77,69, -78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, -97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, +116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,50,34, +73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,50,34, 62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, 97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, -69,82,84,95,69,81,85,95,73,78,84,83,95,51,34,62,10,32,32,32,32,32,32,32, +69,82,84,95,78,65,84,95,66,82,75,83,95,51,34,62,10,32,32,32,32,32,32,32, 32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, 99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95, -73,78,84,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95, +66,82,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,53,34,62,10, +95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,53,34,62,10, 32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,69,81,85,95,73,78,84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32, +84,95,78,65,84,95,66,82,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32, 32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, -84,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82, +75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, 62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32, +79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,56,34,62,10,32,32, 32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,69,81,85,95,73,78,84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32, +84,95,78,65,84,95,66,82,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32, 32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, -84,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82, +75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, 108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95, -66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95, -67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67, -117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, -114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,86,101,114,116,105,99,97,108,32, -66,105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,67,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,84,72,69,77,69,76,69,83,83,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101, -108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78, -84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81, -85,65,78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,53,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81, +85,95,73,78,84,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118, +97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,52,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,55,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,49,48,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85, +66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83, +73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,86,101,114,116,105,99,97,108,32,66,105,110,115,32,66,114,101, +97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65, +84,95,67,76,65,83,83,73,70,95,67,95,77,69,78,85,34,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, +79,82,73,90,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,83, +85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,50,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,52,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,81,85,65,78,84,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +73,90,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,55,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,54,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, 97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, -79,82,73,90,95,81,85,65,78,84,95,56,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, +79,82,73,90,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, 109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84, -95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, +95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,72,79,82,73,90,95,81,85,65,78,84,95,49,48,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,67,72,79,82,79,80,76,69,84, -72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +68,95,72,79,82,73,90,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,72,73, -78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46,53,41,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51,46,48,41, +32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85, +65,78,84,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114, +99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,72,79,82,73,90,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72, +105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,72,73,78,71,69,95,51,48,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32, +40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,67,72,79,82,79,80,76,69,84,72, +95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100, -32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,85,78,73,81,85,69,95,86,65,76, -85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110, -105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10, +73,90,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117, +101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +78,65,84,95,66,82,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101, +97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,78,65,84,95,66,82,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95, +66,82,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,52,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,78,65,84,95,66,82,75,83,95,53,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,83,85,66,77, -69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, -116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84, +95,66,82,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,50, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,55, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,51,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, +95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,56,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, 49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, 109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -78,65,84,95,66,82,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +78,65,84,95,66,82,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, 61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83, -95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,54,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85, +95,73,78,84,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118,97, +108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, -90,95,78,65,84,95,66,82,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +90,95,69,81,85,95,73,78,84,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66, -82,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73, +78,84,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,57,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97, +95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,52,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, -82,73,90,95,78,65,84,95,66,82,75,83,95,49,48,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,83,85,66,77,69,78, -85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, -97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, +82,73,90,95,69,81,85,95,73,78,84,83,95,53,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85, +95,73,78,84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,50, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,55, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,51,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, +95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, 49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, 109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -69,81,85,95,73,78,84,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +69,81,85,95,73,78,84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, 61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83, -95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,54,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, -90,95,69,81,85,95,73,78,84,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73, -78,84,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,57,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82, +69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65, +84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115, +116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,72,111,114,105,122,111,110,116,97,108,32,66, +105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83, +77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,104,111,119,32,76,105,110,101,97,114,32,83,109,111,111,116,104,101,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, -82,73,90,95,69,81,85,95,73,78,84,83,95,49,48,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116, -111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78, -69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101, -97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,111, -114,105,122,111,110,116,97,108,32,66,105,110,115,32,66,114,101,97,107,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, -73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72,69,82,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,105,110,101,97, -114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32, +32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79,87, +69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,104,111,119,32,76,79,87,69,83,83,32,83,109,111,111,116, +104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99, +107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,76, +79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,69,100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101, +116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +67,79,78,68,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83, +73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, +116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68, +105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110, +32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,65,88,69,83,95,83, +67,65,76,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,105,115,112,108,97,121,32,65,120,101,115,32,83,99,97, +108,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,86,73,69,87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76, -79,87,69,83,83,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82, -65,77,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105, -116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,83,67,65, -84,84,69,82,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68, -74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, -108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110,32,65,120,101, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,68,73,83,80,76,65,89,95,65,88,69,83,95,83,67,65,76,69,95,86, -65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -68,105,115,112,108,97,121,32,65,120,101,115,32,83,99,97,108,101,32,86,97, -108,117,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60, -47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,68,73,83,80,76,65,89,95,83,76,79,80,69,95,86,65,76,85,69,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, -108,97,121,32,83,108,111,112,101,32,86,97,108,117,101,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,76,79,80,69,95, +86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,115,112,108,97,121,32,83,108,111,112,101,32,86,97,108,117,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, +101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97, +116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110, +103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101, -99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78, -85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99, -116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67, -73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84, +76,73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,103,114,101,115,115,105,111,110,32,76,105,110,101, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76, +76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,80,111,105,110,116,32,67,111,108,111,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, +95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, +68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,67, -79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,103,114,101,115,115,105,111,110,32,76,105,110,101,32,67,111,108,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105, -110,116,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75, -71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, -79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, -118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, +95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, +32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, 10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, -69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, -108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, -65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, -101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,72,73,83,84,79,71,82,65,77,95,86,73,69,87,95, -77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, +65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,72,73,83,84,79,71,82,65,77,95,86,73,69, +87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66,95, +77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, 101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72,69,77,69,76,69,83, 83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101, @@ -40363,24 +40973,30 @@ static unsigned char xml_res_file_11[] = { 62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83, -73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, -116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32, -111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120, -101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, -104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73, +83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116, -97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32, +68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110, +32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104, +101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97, +116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, 62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, @@ -40754,722 +41370,18 @@ static unsigned char xml_res_file_11[] = { 32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, 111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78, -68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83, -84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108, -101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76, -73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111, -97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109, -97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, -105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84, -79,71,82,65,77,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, -79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,72,73,83,84,79,71,82,65,77,95,73,78,84,69,82,86,65,76,83,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,111,111,115,101, -32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32, -68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110, -32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83, -84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -105,115,112,108,97,121,32,83,116,97,116,105,115,116,105,99,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79, -87,95,65,88,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,104,111,119,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84, -85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114, -111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83, -69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105, -111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65, -82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121, -32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47, -108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, -69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60, -47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,69,67,84,73,86,73,84, -89,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83, -34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,65,86,69,95,67,79,78,78,69,67,84,73,86,73,84,89,95,84,79,95,84,65, -66,76,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, -32,67,111,110,110,101,99,116,105,118,105,116,121,32,84,111,32,84,97,98, -108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,69,76,69,67,84,95,73,83,79,76,65,84,69,83,34,62,10,32,32,32, -32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32,78,101,105,103, -104,98,111,114,108,101,115,115,32,79,98,115,101,114,118,97,116,105,111, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,72,73,83,84,79,71,82,65,77,95,73,78,84,69,82,86,65,76,83,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,111,111,115,101,32, -73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121, -32,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69,83,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65, -120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, -99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75, -71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77, -78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, -67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -78,69,67,84,73,86,73,84,89,95,77,65,80,95,86,73,69,87,95,77,69,78,85,95, -79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69,78,85,34, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,68,73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65, -77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115, -112,108,97,121,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103, -111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47, -101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,84,104,105,101, -115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47, -101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,65,86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79, -95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,97,118,101,32,68,117,112,108,105,99,97,116,101,32,84,104,105,101, -115,115,101,110,32,80,111,108,121,103,111,110,115,32,116,111,32,84,97,98, -108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, -97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, -112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,83,69,76,69,67,84,73,79,78,95,77,79,68,69,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, -111,110,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,80,65,78,95,77,79, -68,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97,110,110, -105,110,103,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,90,79,79,77, -95,77,79,68,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,90,111, -111,109,105,110,103,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,70,73, -84,95,84,79,95,87,73,78,68,79,87,95,77,79,68,69,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,70,105,116,45,84,111,45,87,105,110,100,111,119, -32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,70,73,88,69,68,95,65,83, -80,69,67,84,95,82,65,84,73,79,95,77,79,68,69,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,70,105,120,101,100,32,65,115,112,101,99,116,32, -82,97,116,105,111,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95, -86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, -111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78, -68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83, -84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68, -95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97, -98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73, -77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84, -111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103, -101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,109,97, -112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80,95,67,79,78,70,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,109, -97,112,32,67,111,110,102,105,103,117,114,97,116,105,111,110,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,76,69,65,78,95,66,65,83,69,77,65,80, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,101,97, -110,32,66,97,115,101,109,97,112,32,67,97,99,104,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,72,65,78,71,69,95,84,82,65,78,83,80,65, -82,69,78,67,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,104,97,110,103,101,32,77,97,112,32,84,114,97,110,115,112,97,114,101, -110,99,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,78,79,95,66,65,83,69,77,65,80,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,32,66,97,115,101,109,97, -112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97, -98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80,95,77,69,78,85,34,62, -10,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,109,97,112,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,66,65,83,69,77,65,80,95,67,79,78,70,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,66,97,115,101,109,97,112,32,67,111,110,102,105, -103,117,114,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,76,69,65, -78,95,66,65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,108,101,97,110,32,66,97,115,101,109,97,112,32,67,97,99,104,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,72,65,78,71,69,95,84,82,65,78,83,80,65, -82,69,78,67,89,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104, -97,110,103,101,32,77,97,112,32,84,114,97,110,115,112,97,114,101,110,99, -121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,79, -95,66,65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,78,111,32,66,97,115,101,109,97,112,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65, -83,83,73,70,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, -79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71, -82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77, -78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, -67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,71,69,84, -73,83,95,79,82,68,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84, -73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97,110, -100,111,109,105,122,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, -80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,80, -69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95, -49,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,49,57,57,32,80,101,114,109,117,116,97,116,105, -111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84, -73,79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,52,57,57,32,80,101,114,109,117,116, -97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79, -77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85,84,65,84,73,79,78,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,57,57,32,80,101, -114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95, -82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72,69,82,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104,101,114,32,40,117, -112,32,116,111,32,57,57,57,57,57,41,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, -111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,85,83,69,95,83,80,69,67,73,70,73,69,68,95,83,69,69,68, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101,32, -83,112,101,99,105,102,105,101,100,32,83,101,101,100,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,80,69,67,73,70,89, -95,83,69,69,68,95,68,76,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,112,101,99,105,102,121,32,83,101,101,100,46,46,46,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101,32,70,105, -108,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67, -65,78,67,69,95,70,73,76,84,69,82,95,48,53,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,48,46,48,53,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69,82,95, -48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48,46,48, -49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73, -67,65,78,67,69,95,70,73,76,84,69,82,95,48,48,49,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,48,46,48,48,49,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76, -84,69,82,95,48,48,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,48,46,48,48,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67, -69,95,70,73,76,84,69,82,95,83,69,84,85,80,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,73,110,102,101,114, -101,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,65,86,69,95,71,69,84,73,83,95,79,82,68, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82, -101,115,117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87, -95,65,83,95,67,79,78,68,95,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,65,115,32,67,111,110,100,105,116,105,111, -110,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105, -116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82, -83,95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105, -111,110,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82, -95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108, -111,114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71, -72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110, -101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95, -71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73, -71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82, -77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111, -114,109,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69, -83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, -69,100,103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80, -95,87,73,84,72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -78,95,83,69,76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108, -105,110,101,32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101, -100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, -108,101,99,116,32,65,108,108,46,46,46,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -69,76,69,67,84,95,67,79,82,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,111,114,101,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,78, -69,73,71,72,66,79,82,83,95,79,70,95,67,79,82,69,83,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,78,101,105,103,104,98,111,114,115,32, -111,102,32,67,111,114,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,67,79,82,69, -83,95,65,78,68,95,78,69,73,71,72,66,79,82,83,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,114,101,115,32,97,110,100,32,78,101, -105,103,104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82, -69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101, -99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76, -73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105, -110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66, -76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115,32, -86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78, -84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,97,98,108,101,32,70, -105,108,108,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65, -67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80, -76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, -83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78, +68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83, +84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, 108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, 49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, @@ -41495,41 +41407,454 @@ static unsigned char xml_res_file_11[] = { 98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, 105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,79,67,65, -76,74,79,73,78,67,79,85,78,84,95,78,69,87,95,86,73,69,87,95,77,69,78,85, -95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84, +79,71,82,65,77,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, +79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,72,73,83,84,79,71,82,65,77,95,73,78,84,69,82,86,65,76,83,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,111,111,115,101, +32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79, +78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116, +32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105, +115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110,32,65, +120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, +108,97,121,32,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88, +69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, +49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,116, +117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, +49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, +114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, 34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,82,97,110,100,111,109,105,122,97,116,105,111,110,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95, +66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32, +67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, +68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, +95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, +32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, +65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,78,69,67,84,73,86,73,84,89,95,72,73,83,84,95, +86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67, +79,78,78,69,67,84,73,86,73,84,89,95,84,79,95,84,65,66,76,69,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,67,111,110,110, +101,99,116,105,118,105,116,121,32,84,111,32,84,97,98,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, +67,84,95,73,83,79,76,65,84,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,101,108,101,99,116,32,78,101,105,103,104,98,111,114,108,101, +115,115,32,79,98,115,101,114,118,97,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84,79,71, +82,65,77,95,73,78,84,69,82,86,65,76,83,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,104,111,111,115,101,32,73,110,116,101,114,118,97,108, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84,95,86, +73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, +83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,68,105,115,112,108,97,121,32,83,116,97,116,105,115,116,105, +99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78, -95,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105,111, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,65,120,101,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107, +103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66, +65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119, +32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69, +76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, +103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, +78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,67,79,78,78,69,67,84,73,86,73,84,89,95,77,65, +80,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,34,32,110,97,109,101,61,34,73,68,95,86,79,82,79,78,79,73,95,68, +73,65,71,82,65,77,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,86,79,82, +79,78,79,73,95,68,73,65,71,82,65,77,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,68,105,115,112,108,97,121,32,84,104,105,101,115,115, +101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,86,79, +82,79,78,79,73,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,97,118,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,86,79,82,79, +78,79,73,95,68,85,80,83,95,84,79,95,84,65,66,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,68,117,112,108,105, +99,97,116,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97, +98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,105,101,115,115,101,110, +32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111, +110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67, +76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114, +99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,73,79,78, +95,77,79,68,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, +108,101,99,116,105,111,110,32,77,111,100,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,80,65,78,95,77,79,68,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,80,97,110,110,105,110,103,32,77,111,100,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,90,79,79,77,95,77,79,68,69,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,90,111,111,109,105,110,103,32,77,111,100,101,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73, -79,78,95,49,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,49,57,57,32,80,101,114,109,117,116, -97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +61,34,73,68,95,70,73,84,95,84,79,95,87,73,78,68,79,87,95,77,79,68,69,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,116,45,84,111,45, +87,105,110,100,111,119,32,77,111,100,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,70, +73,88,69,68,95,65,83,80,69,67,84,95,82,65,84,73,79,95,77,79,68,69,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,120,101,100,32,65,115, +112,101,99,116,32,82,97,116,105,111,32,77,111,100,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79, -77,73,90,65,84,73,79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79,78,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,57,57,32,80,101, -114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85, +84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,79,117,116,108,105,110,101,115,32,86,105,115,105, +98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119, +32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95, -82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85,84,65, -84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, -57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66, +65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67, +111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83, +80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69, +76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, +103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, +116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95, +65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72,69, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97, +115,101,109,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80,95, +67,79,78,70,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66, +97,115,101,109,97,112,32,67,111,110,102,105,103,117,114,97,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,76,69,65,78,95,66, +65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,108,101,97,110,32,66,97,115,101,109,97,112,32,67,97,99,104,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,72,65,78,71,69,95,84,82, +65,78,83,80,65,82,69,78,67,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,104,97,110,103,101,32,77,97,112,32,84,114,97,110,115,112, +97,114,101,110,99,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,78,79,95,66,65,83,69,77,65,80,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,32,66,97,115, +101,109,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60, +47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80,95,77,69,78, +85,34,62,10,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,109,97,112, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,66,65,83,69,77,65,80,95,67,79,78,70,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,109,97,112,32,67,111, +110,102,105,103,117,114,97,116,105,111,110,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +76,69,65,78,95,66,65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,108,101,97,110,32,66,97,115,101,109,97,112,32,67,97,99, +104,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,72,65,78,71,69,95,84,82,65,78,83, +80,65,82,69,78,67,89,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,104,97,110,103,101,32,77,97,112,32,84,114,97,110,115,112,97,114,101, +110,99,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,78,79,95,66,65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,78,111,32,66,97,115,101,109,97,112,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65, +84,95,67,76,65,83,83,73,70,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85, +95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95, +66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32, +67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, +73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32, +66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, +107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, +79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, +69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, +108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, +65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, +101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,71,69,84,73,83,95,79,82,68,95,78,69,87,95,86,73,69,87,95,77, +69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,82,97,110,100,111,109,105,122,97,116,105,111,110,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73, +79,78,95,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,57,57,32,80,101,114,109,117,116,97,116, +105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90, +65,84,73,79,78,95,49,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,57,57,32,80,101,114,109, +117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78, +68,79,77,73,90,65,84,73,79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79, +78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,57,57,32, +80,101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78, +83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85, +84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,57,57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, +80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72, +69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104, 101,114,32,40,117,112,32,116,111,32,57,57,57,57,57,41,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, @@ -41595,6 +41920,13 @@ static unsigned char xml_res_file_11[] = { 60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, +79,87,95,65,83,95,67,79,78,68,95,77,65,80,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,65,115,32,67,111,110,100,105,116, +105,111,110,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, 32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105, 118,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, @@ -41772,394 +42104,138 @@ static unsigned char xml_res_file_11[] = { 83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, -67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,76, -79,67,65,84,73,79,78,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78, -83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,65,86,69,95,67,79,76,79,67,65,84,73,79,78,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,101,115,117,108,116,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,67,111,110,110,101,99,116,105,118,105,116,121,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83,95,84,79,95,83,69,76, -69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,104,111,119,32,83,101,108,101,99,116,105,111,110,32,97,110,100,32, -78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,67,79,78,78,95,78,69,73,71,72,66,79,82,95,70,73,76,76,95,67,79,76, -79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97, -110,103,101,32,70,105,108,108,32,67,111,108,111,114,32,111,102,32,78,101, -105,103,104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72,84,83,95,71,82,65,80,72, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119, -32,71,114,97,112,104,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101, -32,69,100,103,101,32,84,104,105,99,107,110,101,115,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67, -75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80, -72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109,97,108,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84, -83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83,84,82,79,78,71, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,114, -111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, -95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101,32,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73,84,72,95,71,82,65,80, -72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,100, -101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69,76,69,67,84,69, -68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101,32,67,111,108, -111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,72,65,80,69,95,67, -69,78,84,69,82,83,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,65,68,68,77,69,65,78, -67,69,78,84,69,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,65,100,100,32,77,101,97,110,32,67,101,110,116,101,114,115,32,116, -111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,77,65,80,95,65,68,68,67,69,78,84,82,79, -73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100, -100,32,67,101,110,116,114,111,105,100,115,32,116,111,32,84,97,98,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89, -95,77,69,65,78,95,67,69,78,84,69,82,83,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,77,101,97,110,32,67, -101,110,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100, -62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,67,69,78,84,82,79,73,68, -83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115, -112,108,97,121,32,67,101,110,116,114,111,105,100,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,69,88,80,79,82,84,95,77,69,65,78,95,67,78,84,82, -83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, -32,77,101,97,110,32,67,101,110,116,101,114,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47, -101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,88,80,79,82,84,95,67,69,78,84,82,79,73,68,83,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,67,101,110, -116,114,111,105,100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,101,110,97,98,108,101,100,62,49,60,47,101,110,97,98,108,101,100, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,97,112,101,32,67,101,110,116,101,114, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,86,79,82,79,78,79, -73,95,68,73,65,71,82,65,77,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89, -95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,84,104,105, -101,115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95, -86,79,82,79,78,79,73,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,97,118,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121, -103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,86,79,82, -79,78,79,73,95,68,85,80,83,95,84,79,95,84,65,66,76,69,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,68,117,112,108, -105,99,97,116,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103, -111,110,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110, -97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,105,101,115,115,101, -110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116, -105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, -69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73, -82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83, -73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79, -117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,72, -79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66,111,117,110, -100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60, -47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108, -101,99,116,97,98,108,101,32,70,105,108,108,32,67,111,108,111,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103, -114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83, -116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, -60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76, -69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111, -110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, -103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, -108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, -78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, -101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,76,73,83,65,77,65,80,95,78,69,87,95,86,73,69, -87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,82,97,110,100,111,109,105,122,97,116,105,111,110,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73, -90,65,84,73,79,78,95,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,57,32,80,101,114,109,117, -116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68, -79,77,73,90,65,84,73,79,78,95,49,57,57,80,69,82,77,85,84,65,84,73,79,78, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,57,57,32,80, -101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83, -95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,52,57,57,80,69,82,77,85,84, -65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -52,57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, -80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,57, -80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,57,57,57,32,80,101,114,109,117,116,97,116,105,111,110, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, +67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, +98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, +83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,79,67, +65,76,74,79,73,78,67,79,85,78,84,95,78,69,87,95,86,73,69,87,95,77,69,78, +85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,82,97,110,100,111,109,105,122,97,116,105,111,110,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, 34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79, -78,95,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,116,104,101,114,32,40,117,112,32,116,111,32,57,57,57,57,57,41, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,85,83,69,95,83,80,69, -67,73,70,73,69,68,95,83,69,69,68,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,85,115,101,32,83,112,101,99,105,102,105,101,100,32,83, -101,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, -99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,80,69,67,73,70,89,95,83,69,69,68,95,68,76,71,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101,99,105,102,121, -32,83,101,101,100,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78, -85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,105,103,110,105, -102,105,99,97,110,99,101,32,70,105,108,116,101,114,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69,82,95,48, -53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48,46,48,53, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +78,95,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105, +111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84, +73,79,78,95,49,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,49,57,57,32,80,101,114,109,117,116, +97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79, +77,73,90,65,84,73,79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79,78,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,57,57,32,80,101, +114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67, -65,78,67,69,95,70,73,76,84,69,82,95,48,49,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,48,46,48,49,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69,82,95, -48,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48,46, -48,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95, +82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85,84,65, +84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, +57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, +84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72,69, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104, +101,114,32,40,117,112,32,116,111,32,57,57,57,57,57,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,85,83,69,95,83,80,69,67,73,70,73,69,68, +95,83,69,69,68,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +85,115,101,32,83,112,101,99,105,102,105,101,100,32,83,101,101,100,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,80, +69,67,73,70,89,95,83,69,69,68,95,68,76,71,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,112,101,99,105,102,121,32,83,101,101,100, +46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101, +32,70,105,108,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70, -73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,48,48,49,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,48,46,48,48,48,49,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69,82,95,83,69,84,85,80, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116, -111,109,32,73,110,102,101,114,101,110,99,101,60,47,108,97,98,101,108,62, +73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,53,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,48,46,48,53,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, 47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69, -95,76,73,83,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, -118,101,32,82,101,115,117,108,116,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,72,79,87,95,65,83,95,67,79,78,68,95,77,65,80,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,115,32,67,111,110,100, -105,116,105,111,110,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99, -116,105,118,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69, +82,95,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48, +46,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69, -73,71,72,66,79,82,83,95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,101,108, -101,99,116,105,111,110,32,97,110,100,32,78,101,105,103,104,98,111,114,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73, -71,72,66,79,82,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108, -32,67,111,108,111,114,32,111,102,32,78,101,105,103,104,98,111,114,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70, +73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,48,49,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,48,46,48,48,49,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70, +73,76,84,69,82,95,48,48,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,48,46,48,48,48,49,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67, +65,78,67,69,95,70,73,76,84,69,82,95,83,69,84,85,80,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,73,110,102, +101,114,101,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,71,69,84,73,83,95, +79,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,82,101,115,117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105, +118,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71, +72,66,79,82,83,95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,101,108,101, +99,116,105,111,110,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71, +72,66,79,82,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32, +67,111,108,111,114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, 87,69,73,71,72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32, 60,108,97,98,101,108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97, @@ -42301,6 +42377,504 @@ static unsigned char xml_res_file_11[] = { 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, 107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, +89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77, +78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, +67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, +98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, +83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,69, +82,65,82,67,72,73,67,65,76,95,77,65,80,95,77,69,78,85,95,79,80,84,73,79, +78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,110, +101,99,116,105,118,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80, +76,65,89,95,87,69,73,71,72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,71,114,97,112,104, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101,32, +84,104,105,99,107,110,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87, +69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,76, +73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,76,105,103,104,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78, +69,83,83,95,78,79,82,77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,78,111,114,109,97,108,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95, +84,72,73,67,75,78,69,83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,116,114,111,110,103,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95, +67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,104,97,110,103,101,32,69,100,103,101,32,67,111,108,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72, +73,68,69,95,77,65,80,95,87,73,84,72,95,71,82,65,80,72,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,72,105,100,101,32,77,97,112,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,78,95,83,69,76,69,67,84,69,68,95,67,79,76,79,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103, +101,32,79,117,116,108,105,110,101,32,67,111,108,111,114,32,111,102,32,83, +101,108,101,99,116,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,78,95,82,79,79,84,95,83,73,90,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,83,105,122, +101,32,111,102,32,82,111,111,116,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,82,79,79,84, +95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,104,97,110,103,101,32,67,111,108,111,114,32,111,102,32,82,111,111, +116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,83,72,65,80,69,95,67,69,78,84,69,82,83,95,77,69,78,85,34,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,95,65,68,68,77,69,65,78,67,69,78,84,69,82,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,65,100,100,32,77,101,97,110,32,67,101, +110,116,101,114,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80, +95,65,68,68,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,65,100,100,32,67,101,110,116,114,111,105,100,115, +32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,68,73,83,80,76,65,89,95,77,69,65,78,95,67,69,78,84,69,82,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, +108,97,121,32,77,101,97,110,32,67,101,110,116,101,114,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, +89,95,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,105,115,112,108,97,121,32,67,101,110,116,114,111,105, +100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101, +110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,77, +69,65,78,95,67,78,84,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,77,101,97,110,32,67,101,110,116,101,114,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98, +108,101,100,62,49,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,67,69,78,84,82, +79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,67,101,110,116,114,111,105,100,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47, +101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97,112,101, +32,67,101,110,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69,78, +85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,68,73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65,71, +82,65,77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105, +115,112,108,97,121,32,84,104,105,101,115,115,101,110,32,80,111,108,121, +103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60, +47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,84,104,105,101, +115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47, +101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,65,86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79, +95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,97,118,101,32,68,117,112,108,105,99,97,116,101,32,84,104,105,101, +115,115,101,110,32,80,111,108,121,103,111,110,115,32,116,111,32,84,97,98, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, +112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, +82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, +101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, +76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, +105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65, +66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115, +32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, +79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, +69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,97,98,108, +101,32,70,105,108,108,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, +95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, +73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32, +66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, +107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, +79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, +69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, +108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, +65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, +101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,67,79,76,79,67,65,84,73,79,78,95,86,73,69,87,95,77,69,78,85, +95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,83,65,86,69,95,67,79,76,79,67,65,84,73,79,78, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82, +101,115,117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105, +116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82, +83,95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105, +111,110,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82, +95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108, +111,114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, +112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71, +72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110, +101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95, +71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73, +71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82, +77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111, +114,109,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69, +83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, +69,100,103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80, +95,87,73,84,72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +78,95,83,69,76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108, +105,110,101,32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101, +100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,83,72,65,80,69,95,67,69,78,84,69,82,83,95,77,69,78,85,34,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,95,65,68,68,77,69,65,78,67,69,78,84,69,82,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,65,100,100,32,77,101,97,110,32,67,101, +110,116,101,114,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80, +95,65,68,68,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,65,100,100,32,67,101,110,116,114,111,105,100,115, +32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,68,73,83,80,76,65,89,95,77,69,65,78,95,67,69,78,84,69,82,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, +108,97,121,32,77,101,97,110,32,67,101,110,116,101,114,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, +89,95,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,105,115,112,108,97,121,32,67,101,110,116,114,111,105, +100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101, +110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,77, +69,65,78,95,67,78,84,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,77,101,97,110,32,67,101,110,116,101,114,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98, +108,101,100,62,49,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,67,69,78,84,82, +79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,67,101,110,116,114,111,105,100,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47, +101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97,112,101, +32,67,101,110,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69,78, +85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,68,73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65,71, +82,65,77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105, +115,112,108,97,121,32,84,104,105,101,115,115,101,110,32,80,111,108,121, +103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60, +47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,84,104,105,101, +115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47, +101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,65,86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79, +95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,97,118,101,32,68,117,112,108,105,99,97,116,101,32,84,104,105,101, +115,115,101,110,32,80,111,108,121,103,111,110,115,32,116,111,32,84,97,98, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, +112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, +82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, +101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, +76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, +105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65, +66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115, +32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, +79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, +69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,97,98,108, +101,32,70,105,108,108,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, +95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, +73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32, +66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, +107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, 97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, @@ -42322,90 +42896,390 @@ static unsigned char xml_res_file_11[] = { 101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,76,73,83,65,95,83,67,65,84,84,69,82,95,80,76,79,84,95,86,73, -69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +34,73,68,95,76,73,83,65,77,65,80,95,78,69,87,95,86,73,69,87,95,77,69,78, +85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,82,97,110,100,111,109,105,122,97,116,105,111,110,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79, +78,95,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105, +111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84, +73,79,78,95,49,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,49,57,57,32,80,101,114,109,117,116, +97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79, +77,73,90,65,84,73,79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79,78,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,57,57,32,80,101, +114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, -73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95, +82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85,84,65, +84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, +57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, +84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72,69, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104, +101,114,32,40,117,112,32,116,111,32,57,57,57,57,57,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,85,83,69,95,83,80,69,67,73,70,73,69,68, +95,83,69,69,68,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +85,115,101,32,83,112,101,99,105,102,105,101,100,32,83,101,101,100,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,80, +69,67,73,70,89,95,83,69,69,68,95,68,76,71,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,112,101,99,105,102,121,32,83,101,101,100, +46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101, +32,70,105,108,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70, +73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,53,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,48,46,48,53,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69, +82,95,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48, +46,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70, +73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,48,49,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,48,46,48,48,49,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70, +73,76,84,69,82,95,48,48,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,48,46,48,48,48,49,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67, +65,78,67,69,95,70,73,76,84,69,82,95,83,69,84,85,80,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,73,110,102, +101,114,101,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,76,73,83,65,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,101,115, +117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65, +83,95,67,79,78,68,95,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,65,115,32,67,111,110,100,105,116,105,111,110,97, +108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105,116, +121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83, +95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105,111, +110,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82,95, +70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108,111, +114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72, +84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110,101,115,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80, +72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84, +83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109, +97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87, +69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83, +84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87, +69,73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100, +103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73, +84,72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69, +76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101, +32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101, +99,116,32,65,108,108,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, +67,84,95,67,79,82,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,114,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,78,69,73,71,72, +66,79,82,83,95,79,70,95,67,79,82,69,83,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,78,101,105,103,104,98,111,114,115,32,111,102,32, +67,111,114,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,67,79,82,69,83,95,65, +78,68,95,78,69,73,71,72,66,79,82,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,114,101,115,32,97,110,100,32,78,101,105,103, +104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116, +97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, +76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, 62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,76,73,83,65,95,83,67,65,84,84,69, -82,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,82, -69,71,73,77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,82,101,103,105,109,101,115,32,82,101, -103,114,101,115,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77, -79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,76,105,110,101,97,114,32,83,109,111,111,116,104,101,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73, +78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, +79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115,32,86,105, +115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, +60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66, +76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,108,101,99,116,97,98,108,101,32,70,105,108, +108,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71, +82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, +89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77, +78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, +67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, +98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, +83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,83, +65,95,83,67,65,84,84,69,82,95,80,76,79,84,95,86,73,69,87,95,77,69,78,85, +95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82, +69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101, +99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67, +76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114, +99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76, -79,87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,76,79,87,69,83,83,32,83,109,111,111,116,104, -101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99, -104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105,116,32,76,79, -87,69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79, -87,95,65,88,69,83,95,84,72,82,79,85,71,72,95,79,82,73,71,73,78,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120, -101,115,32,84,104,114,111,117,103,104,32,79,114,105,103,105,110,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, +111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,82,97,110,100,111,109,105,122,97,116,105,111,110,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79, -78,95,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105, -111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +61,34,73,68,95,76,73,83,65,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101, +119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95, +80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105, +115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67, +73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111, +110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,82,69,71,73, +77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,82,101,103,105,109,101,115,32,82,101,103,114, +101,115,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77,79,79, +84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, +105,110,101,97,114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79, +87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,76,79,87,69,83,83,32,83,109,111,111,116,104,101, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, +101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105,116,32,76,79,87, +69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65, +88,69,83,95,84,72,82,79,85,71,72,95,79,82,73,71,73,78,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101,115, +32,84,104,114,111,117,103,104,32,79,114,105,103,105,110,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +82,97,110,100,111,109,105,122,97,116,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95, +57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105,111, +110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78, 83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,49,57,57,80,69,82,77,85, 84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, @@ -42510,70 +43384,76 @@ static unsigned char xml_res_file_11[] = { 117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,86,73,69,87,95,77,69, 78,85,95,76,69,71,69,78,68,34,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,76,69,71,69,78,68,95,85,83,69,95,83,67,73, -95,78,79,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,85,115,101,32,83,99,105,101,110,116,105,102,105,99,32,78,111,116, -97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,76,69,71,69,78,68,95,66, -65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,76,101,103,101,110,100,32,66,97,99,107,103,114, -111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,76,69,71,69,78,68,95, -84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,111,112,121,32,76,101,103,101,110,100,32,84,111,32,67, -108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79, -112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76, -65,83,83,73,70,95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83, -73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,50,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73, -76,69,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81, -85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +110,97,109,101,61,34,73,68,95,76,69,71,69,78,68,95,68,73,83,80,76,65,89, +95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115, +105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +34,73,68,95,76,69,71,69,78,68,95,85,83,69,95,83,67,73,95,78,79,84,65,84, +73,79,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101, +32,83,99,105,101,110,116,105,102,105,99,32,78,111,116,97,116,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, +110,97,109,101,61,34,73,68,95,76,69,71,69,78,68,95,66,65,67,75,71,82,79, +85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,76,101,103,101,110,100,32,66,97,99,107,103,114,111,117,110,100,32, +67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,80,89,95,76,69,71,69,78,68,95,84,79,95,67,76,73, +80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +111,112,121,32,76,101,103,101,110,100,32,84,111,32,67,108,105,112,98,111, +97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, +115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,78,69,87,95, +86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70, +95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72, +69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,84,104,101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, +95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, @@ -42770,849 +43650,632 @@ static unsigned char xml_res_file_11[] = { 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84, 69,82,86,65,76,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83, -84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114, -101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83, -84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101, -119,32,67,117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,67, -117,114,114,101,110,116,32,77,97,112,32,84,121,112,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67, -65,84,69,71,79,82,73,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,97,118,101,32,67,97,116,101,103,111,114,105,101,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, -114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,82,97,116,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83, -77,79,79,84,72,95,82,65,87,82,65,84,69,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,82,97,119,32,82,97,116,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,77,79,79,84,72,95,69, -88,67,69,83,83,82,73,83,75,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,69,120,99,101,115,115,32,82,105,115,107,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,69,77,80,73,82,73,67,65, -76,95,66,65,89,69,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,69,109,112,105,114,105,99,97,108,32,66, -97,121,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,82,65,84, -69,83,95,83,80,65,84,73,65,76,95,82,65,84,69,95,83,77,79,79,84,72,69,82, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116, -105,97,108,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,82, -65,84,69,83,95,83,80,65,84,73,65,76,95,69,77,80,73,82,73,67,65,76,95,66, -65,89,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -112,97,116,105,97,108,32,69,109,112,105,114,105,99,97,108,32,66,97,121, -101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,83,65,86,69, -82,69,83,85,76,84,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,97,118,101,32,82,97,116,101,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116, -105,118,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,69, +82,65,82,67,72,73,67,65,76,95,77,65,80,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,72,105,101,114,97,114,99,104,105,99,97,108,32,77, +97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77, +95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95, +67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67, +117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,67,117, +114,114,101,110,116,32,77,97,112,32,84,121,112,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73, -71,72,66,79,82,83,95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,101,108, -101,99,116,105,111,110,32,97,110,100,32,78,101,105,103,104,98,111,114,115, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, +84,69,71,79,82,73,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,97,118,101,32,67,97,116,101,103,111,114,105,101,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97, +116,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,77,79,79,84, +72,95,82,65,87,82,65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,82,97,119,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,82,65,84,69,83,95,83,77,79,79,84,72,95,69,88,67,69,83,83,82, +73,83,75,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,120, +99,101,115,115,32,82,105,115,107,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,82,65,84,69,83,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,95, +83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,80,65,84,73,65, +76,95,82,65,84,69,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108,32,82,97,116,101, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73, -71,72,66,79,82,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108, -32,67,111,108,111,114,32,111,102,32,78,101,105,103,104,98,111,114,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, -87,69,73,71,72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105, -99,107,110,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71, -72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72, -84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105, -103,104,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83, -83,95,78,79,82,77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,78,111,114,109,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72, -73,67,75,78,69,83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,83,116,114,111,110,103,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,80, +65,84,73,65,76,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108, +32,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77, +65,80,65,78,65,76,89,83,73,83,95,83,65,86,69,82,69,83,85,76,84,83,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,97,116, +101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105,116,121,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83,95,84, +79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105,111,110,32, +97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,67,79, -76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104, -97,110,103,101,32,69,100,103,101,32,67,111,108,111,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82,95,70,73, +76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108,111,114,32, +111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72,84,83, +95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104, +97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110,101,115,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72, +95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, +95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109,97, +108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73, -68,69,95,77,65,80,95,87,73,84,72,95,71,82,65,80,72,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,72,105,100,101,32,77,97,112,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69, +73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83,84, +82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69, +73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103, +101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,78,95,83,69,76,69,67,84,69,68,95,67,79,76,79,82,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101, -32,79,117,116,108,105,110,101,32,67,111,108,111,114,32,111,102,32,83,101, -108,101,99,116,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,83,72,65,80,69,95,67,69,78,84,69,82,83,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,77,65,80,95,65,68,68,77,69,65,78,67,69,78,84,69,82,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,77,101,97, -110,32,67,101,110,116,101,114,115,32,116,111,32,84,97,98,108,101,60,47, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73,84, +72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69, +76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101, +32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,77,65,80,95,65,68,68,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,67,101,110,116,114,111, -105,100,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,72, +65,80,69,95,67,69,78,84,69,82,83,95,77,69,78,85,34,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,65,68, +68,77,69,65,78,67,69,78,84,69,82,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,65,100,100,32,77,101,97,110,32,67,101,110,116,101, +114,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,65,68,68,67, +69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,65,100,100,32,67,101,110,116,114,111,105,100,115,32,116,111,32,84, +97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, +83,80,76,65,89,95,77,69,65,78,95,67,69,78,84,69,82,83,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,77, +101,97,110,32,67,101,110,116,101,114,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,67, +69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,68,105,115,112,108,97,121,32,67,101,110,116,114,111,105,100,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97, +98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,77,69,65,78, +95,67,78,84,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,97,118,101,32,77,101,97,110,32,67,101,110,116,101,114,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100, +62,49,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,77,69,65,78,95,67,69,78, -84,69,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -105,115,112,108,97,121,32,77,101,97,110,32,67,101,110,116,101,114,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +109,101,61,34,73,68,95,69,88,80,79,82,84,95,67,69,78,84,82,79,73,68,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,67,101,110,116,114,111,105,100,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47,101,110,97, +98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97,112,101,32,67,101,110, +116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, +73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97, +121,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111,110,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97, +98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,97,118,101,32,84,104,105,101,115,115,101,110, +32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108, 101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, -83,80,76,65,89,95,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,67,101,110,116, -114,111,105,100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62, -48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80, -79,82,84,95,77,69,65,78,95,67,78,84,82,83,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,97,118,101,32,77,101,97,110,32,67,101,110, -116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -101,110,97,98,108,101,100,62,49,60,47,101,110,97,98,108,101,100,62,10,32, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65, +86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79,95,84,65,66,76,69, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,68,117,112,108,105,99,97,116,101,32,84,104,105,101,115,115,101,110,32, +80,111,108,121,103,111,110,115,32,116,111,32,84,97,98,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100, +62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104, +105,101,115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, +108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,67, -69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,97,118,101,32,67,101,110,116,114,111,105,100,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62, -49,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97, -112,101,32,67,101,110,116,101,114,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, +73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,33,45,45,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, +69,67,84,95,87,73,84,72,95,67,85,83,84,79,77,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,83,104,97, +112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,45,45,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,68,73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65, -71,82,65,77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -105,115,112,108,97,121,32,84,104,105,101,115,115,101,110,32,80,111,108, -121,103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62, -48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98, +61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95, +86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, +111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78, +68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83, +84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108, +101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76, +73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111, +97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109, +97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, +105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95, +77,79,86,73,69,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69, +95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, +111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95, +67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,69,88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,84,104,105, -101,115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60, -47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,65,86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79, -95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,97,118,101,32,68,117,112,108,105,99,97,116,101,32,84,104,105,101, -115,115,101,110,32,80,111,108,121,103,111,110,115,32,116,111,32,84,97,98, -108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, -97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, -112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95, +67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +66,97,99,107,103,114,111,117,110,100,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105, +111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,80,67,80,95,78,69, +87,95,80,76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83, +34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95, +67,76,65,83,83,73,70,95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65, -66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115, -32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, -100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, -79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76, +89,83,73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78, -86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117, -110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116, -117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, -104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, -68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, -95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, -32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, -65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, -108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,65,80,95,77,79,86,73,69,95,86,73,69,87,95,77,69,78, -85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101, -115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, -79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95, +50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, -69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,77,97,112,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, -95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108, -62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,80,67,80,95,78,69,87,95,80,76,79,84,95,86,73,69,87,95, -77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76, -69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104, -101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73, -76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, +73,68,95,81,85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, 104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52, +95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +78,84,73,76,69,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32, +73,68,95,81,85,65,78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, 104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72, -95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83, -95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,72,105,110,103,101,61,49,46,53,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83, -73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,72,105,110,103,101,61,51,46,48,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,66,111,120,112,108,111,116,32,84,104,101,109,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95, -83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83, -73,83,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117, -101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69, -65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +73,83,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114,99, +101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,49,53,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,110, +103,101,61,49,46,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,51,48, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,110, +103,101,61,51,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,112,108, +111,116,32,84,104,101,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83, +95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100,32, +68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,77,65,80,65,78,65,76,89,83,73,83,95,85,78,73,81,85,69,95,86,65,76, +85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110, +105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97, +108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65, +84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, 110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, -95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50, +95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32, +85,82,65,76,95,66,82,69,65,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, 104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, 97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95, -52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60, +53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32, +85,82,65,76,95,66,82,69,65,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, 104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, 97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95, -54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60, +55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32, +85,82,65,76,95,66,82,69,65,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, 104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, 97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95, -56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60, +57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95, -49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49, -48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83, -95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,69,113,117,97,108,32,73,110,116,101,114,118,97,108,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83, -95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +85,82,65,76,95,66,82,69,65,75,83,95,49,48,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,69,81,85, +65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66,77,69,78,85,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117,97,108,32,73,110, +116,101,114,118,97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85, -65,76,95,73,78,84,69,82,86,65,76,83,95,51,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32, +65,76,95,73,78,84,69,82,86,65,76,83,95,50,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, 99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, 110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76, -83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, 101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, 10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81, -85,65,76,95,73,78,84,69,82,86,65,76,83,95,53,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32, +85,65,76,95,73,78,84,69,82,86,65,76,83,95,52,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32, 32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, 47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, 32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65, -76,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +76,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, -81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,55,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10, +81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, 60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, 34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86, -65,76,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +65,76,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,57,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108, +95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,56,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, 62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84, -69,82,86,65,76,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83, -84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114, -101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83, -84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101, -119,32,67,117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,97,115,115,105,102, -105,99,97,116,105,111,110,32,84,104,101,109,101,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, -84,69,71,79,82,73,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,97,118,101,32,67,97,116,101,103,111,114,105,101,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,86,73,69,87,95,68,65,84,65,95,83,85,66,77,69,78,85,34,62,10,32,32,32, -32,32,32,60,108,97,98,101,108,62,68,97,116,97,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,86,73,69,87,95,83,84,65,78,68,65,82,68,73,90,69,68,95,68,65,84,65,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,32, -83,116,97,110,100,97,114,100,105,122,101,100,32,68,97,116,97,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,79,82,73,71,73,78,65, -76,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,86,105,101,119,32,79,114,105,103,105,110,97,108,32,68,97,116,97,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,86,73,69,87,95,83,72,79,87,95,83,85,66,77,69,78,85,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83, -84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -116,97,116,105,115,116,105,99,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83, -95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, -111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, -67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +69,82,86,65,76,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,49,48,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73, -82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107, -103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69, -95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99, -116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66, -79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112, -121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114,100, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101, -32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, -115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,78,69,95,67,72,65, -82,84,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,76,73,78,69,95,67,72,65, -82,84,95,70,73,88,69,68,95,83,67,65,76,69,95,79,86,69,82,95,84,73,77,69, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,120,101,100,32, -115,99,97,108,101,32,111,118,101,114,32,116,105,109,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104, -101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,65,120,105,115,32,79,112,116,105,111,110,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,85,83,69,95,65,68,74,85,83,84,95,89,95,65,88,73,83,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,69,110,97,98,108,101,32,85,115, -101,114,32,68,101,102,105,110,101,100,32,86,97,108,117,101,32,82,97,110, -103,101,32,111,102,32,89,45,65,120,105,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,89,95, -65,88,73,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65, -100,106,117,115,116,32,86,97,108,117,101,32,82,97,110,103,101,32,111,102, -32,89,45,65,120,105,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68, -74,85,83,84,95,89,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115, -112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,102,32,89,45, -65,120,105,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,33,45,45,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95, +83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,77,80,65,82,69,95,82,69,71,73,77,69,83,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,109,112,97,114,101,32, -82,101,103,105,109,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60, -47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,67,79,77,80,65,82,69,95,84,73,77,69,95,80,69,82,73,79,68,83,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,109,112,97,114,101, -32,84,105,109,101,32,80,101,114,105,111,100,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,67,79,77,80,65,82,69,95,82,69,71,95,65,78,68, -95,84,77,95,80,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,111,109,112,97,114,101,32,82,101,103,105,109,101,115,32,97,110,100,32, -84,105,109,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, -101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,10,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,68,105,115,112,108,97,121,32,83,116,97,116,105,115,116, -105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104, -101,99,107,101,100,62,10,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,9,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83,84, -73,67,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115, -112,108,97,121,32,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104, -101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,68,73,68,95,84,69,83,84,34,62,10,32,32,32, -32,32,32,60,108,97,98,101,108,62,82,117,110,32,68,105,102,102,45,105,110, -45,68,105,102,102,32,84,101,115,116,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,65,86,69,95,68,85,77,77,89,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,97,118,101,32,68,117,109,109,121,32,86,97,114,46, -32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48, -60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,45,45,62,10,32,32,32,32,60,108,97,98, -101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,83,67,65,84,84,69,82,95,80,76,79,84,95,77,65,84,95,77,69,78, -85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,68,73,84,95,86,65,82,73,65,66,76,69,83, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,47,82,101, -109,111,118,101,32,86,97,114,105,97,98,108,101,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101, -99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65, +83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,108,97,115,115,105,102,105,99,97,116,105,111,110,32,84, +104,101,109,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,67,65,84,69,71,79,82,73,69,83,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,67,97,116,101, +103,111,114,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68, -65,84,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +110,117,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,65,84,65, +95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, 62,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,83,84,65, @@ -43631,179 +44294,245 @@ static unsigned char xml_res_file_11[] = { 107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,67,65, -84,84,69,82,95,68,65,84,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,109,111,111,116,104,101,114,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72,69,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32, -76,105,110,101,97,114,32,83,109,111,111,116,104,101,114,60,47,108,97,98, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,86,73,69, +87,95,83,72,79,87,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73, +69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, +108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, +89,95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,116,97,116,105,115,116,105,99,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, +89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, 62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76, -79,87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,111,119,32,76,79,87,69,83,83,32,83,109, -111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82,65, -77,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105, -116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68,65,84,65,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101, -119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80, -82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115, -105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,82,69, -71,73,77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,82,101,103,105,109,101,115,32,82,101,103, -114,101,115,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,76,79,80,69,95,86,65, -76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -105,115,112,108,97,121,32,83,108,111,112,101,32,86,97,108,117,101,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, -67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,67,79,76,79,82,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,114,101,115,115, -105,111,110,32,76,105,110,101,32,67,111,108,111,114,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, -69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116,32,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, -108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,67,79,82,82,69,76,79,71,82,65,77,95,77,69,78,85,95,79, -80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95, +87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,69,68,73,84,95,86,65,82,73,65,66,76,69,83,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,80,97,114, -97,109,101,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,76, -79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,69,100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101, -116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,82,82,69,76,79,71,82, -65,77,95,68,73,83,80,76,65,89,95,83,84,65,84,83,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,83,116,97,116,105, -115,116,105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, -101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, -83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66, -97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67, -79,82,82,69,76,79,71,82,65,77,95,83,84,65,84,83,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,97,118,101,32,82,101,115,117,108,116,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79, -112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79, -86,95,83,67,65,84,84,69,82,95,80,76,79,84,95,77,69,78,85,95,79,80,84,73, -79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108, -101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95, +67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83, +101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73, -78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, +67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, +98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, +83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,78, +69,95,67,72,65,82,84,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,76,73,78, +69,95,67,72,65,82,84,95,70,73,88,69,68,95,83,67,65,76,69,95,79,86,69,82, +95,84,73,77,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105, +120,101,100,32,115,99,97,108,101,32,111,118,101,114,32,116,105,109,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,65,120,105,115,32,79,112,116,105,111,110,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,85,83,69,95,65,68,74,85,83,84,95,89,95,65,88,73, +83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,110,97,98, +108,101,32,85,115,101,114,32,68,101,102,105,110,101,100,32,86,97,108,117, +101,32,82,97,110,103,101,32,111,102,32,89,45,65,120,105,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84, +95,89,95,65,88,73,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,65,100,106,117,115,116,32,86,97,108,117,101,32,82,97,110,103,101, +32,111,102,32,89,45,65,120,105,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,65,68,74,85,83,84,95,89,95,65,88,73,83,95,80,82,69,67,73,83,73, +79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116, +32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111, +102,32,89,45,65,120,105,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115, +60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,80,76,79, +84,95,77,65,84,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,86, +65,82,73,65,66,76,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,65,100,100,47,82,101,109,111,118,101,32,86,97,114,105,97,98,108,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110, +103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,67,65, +84,84,69,82,95,68,65,84,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69, +87,95,83,84,65,78,68,65,82,68,73,90,69,68,95,68,65,84,65,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,32,83,116,97,110, +100,97,114,100,105,122,101,100,32,68,97,116,97,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,86,73,69,87,95,79,82,73,71,73,78,65,76,95,68,65, +84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101, +119,32,79,114,105,103,105,110,97,108,32,68,97,116,97,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,83,67,65,84,84,69,82,95,68,65,84,65,95,77,69,78,85,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,109,111,111,116,104,101,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,86,73,69,87,95,76,79,87,69,83,83,95,83,77,79,79,84,72, -69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119, -32,76,79,87,69,83,83,32,83,109,111,111,116,104,101,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104, -101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72, +69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,76,105,110,101,97,114,32,83,109,111,111,116,104,101,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69, +87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,79,87,69,83,83, +32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, 110,97,109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65, -82,65,77,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105, -116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,86,73,69,87,95,82,69,71,73,77,69,83,95,82,69,71, -82,69,83,83,73,79,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -82,101,103,105,109,101,115,32,82,101,103,114,101,115,115,105,111,110,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, -114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85, -84,76,73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,117,114,118,101,32,67,111,108,111,114,60,47,108,97, +82,65,77,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69, +100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68,65,84,65, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105, +101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95, +80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105, +115,105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,82, +69,71,73,77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,82,101,103,105,109,101,115,32,82,101, +103,114,101,115,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,76,79,80,69,95, +86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,115,112,108,97,121,32,83,108,111,112,101,32,86,97,108,117,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, +101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,67,79,76,79,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,114,101, +115,115,105,111,110,32,76,105,110,101,32,67,111,108,111,114,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, @@ -43811,81 +44540,209 @@ static unsigned char xml_res_file_11[] = { 32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116,32,67,111, 108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80, -76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108, -97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62, -10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,83,67,65,84,84,69,82,95,78,69,87,95,80,76,79,84,95,86,73, -69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, -112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, -100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,67,79,82,82,69,76,79,71,82,65,77,95,77,69,78, +85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73, -82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +110,97,109,101,61,34,73,68,95,69,68,73,84,95,86,65,82,73,65,66,76,69,83, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101, +32,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68, +73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,69,100,105,116,32,76,79,87,69,83,83,32,80,97, +114,97,109,101,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,83,65,95,83,67,65,84, +84,69,82,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69, +87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, +108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68,65,84, -65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,83,84,65,78,68,65, -82,68,73,90,69,68,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,86,105,101,119,32,83,116,97,110,100,97,114,100,105,122, -101,100,32,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84, +95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32, +80,114,101,99,105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,82,82,69,76,79,71,82,65,77,95,68,73,83,80,76,65,89,95,83,84,65,84,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, +108,97,121,32,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89, +95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,79,82,82,69,76,79,71, +82,65,77,95,83,84,65,84,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,97,118,101,32,82,101,115,117,108,116,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, +115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,86,95,83,67,65,84, +84,69,82,95,80,76,79,84,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111, +110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, +73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, -73,69,87,95,79,82,73,71,73,78,65,76,95,68,65,84,65,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,32,79,114,105,103,105, -110,97,108,32,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +73,69,87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,79,87,69,83,83, +32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95, -83,77,79,79,84,72,69,82,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, +60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105,116,32,76,79,87,69, +83,83,32,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72,69,82,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76, -105,110,101,97,114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +68,95,86,73,69,87,95,82,69,71,73,77,69,83,95,82,69,71,82,69,83,83,73,79, +78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,105,109, +101,115,32,82,101,103,114,101,115,115,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95, +67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,117,114,118,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79, -87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,104,111,119,32,76,79,87,69,83,83,32,83,109,111, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65, +66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,80,111,105,110,116,32,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, +83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108, +62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +83,67,65,84,84,69,82,95,78,69,87,95,80,76,79,84,95,86,73,69,87,95,77,69, +78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116, +97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, +60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95, +87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68,65,84,65,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,86,73,69,87,95,83,84,65,78,68,65,82,68,73,90, +69,68,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,86,105,101,119,32,83,116,97,110,100,97,114,100,105,122,101,100,32, +68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,79, +82,73,71,73,78,65,76,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,86,105,101,119,32,79,114,105,103,105,110,97,108,32, +68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,83,77,79, +79,84,72,69,82,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, +73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72,69,82,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,105,110, +101,97,114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79,87, +69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,76,79,87,69,83,83,32,83,109,111, 111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, @@ -43902,144 +44759,150 @@ static unsigned char xml_res_file_11[] = { 78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82, -69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80, +82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115, -105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10, +105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83, +73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, +116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32, +111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,70,73,88,69,68,95,65,83,80,69,67,84, +95,82,65,84,73,79,95,77,79,68,69,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,70,105,120,101,100,32,65,115,112,101,99,116,32,82,97,116, +105,111,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, +73,69,87,95,82,69,71,73,77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,105,109,101, +115,32,82,101,103,114,101,115,115,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, +83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,70,73,88,69,68,95,65, -83,80,69,67,84,95,82,65,84,73,79,95,77,79,68,69,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,70,105,120,101,100,32,65,115,112,101,99, -116,32,82,97,116,105,111,32,77,111,100,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88, +69,83,95,84,72,82,79,85,71,72,95,79,82,73,71,73,78,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,65,120,101,115,32,84,104,114,111,117, +103,104,32,79,114,105,103,105,110,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83, +95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69, +95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,82,101,103,114,101,115,115,105,111,110,32,76,105,110,101,32,67,111,108, +111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,86,73,69,87,95,82,69,71,73,77,69,83,95,82,69,71,82,69,83, -83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,103,105,109,101,115,32,82,101,103,114,101,115,115,105,111,110,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, -83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,83,116,97,116,105,115,116,105,99,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, -79,87,95,65,88,69,83,95,84,72,82,79,85,71,72,95,79,82,73,71,73,78,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,120,101,115,32,84, -104,114,111,117,103,104,32,79,114,105,103,105,110,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, -83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, -79,85,84,76,73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,82,101,103,114,101,115,115,105,111,110,32,76,105, -110,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, +61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76, +79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105, +110,116,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, -70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,80,111,105,110,116,32,67,111,108,111,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65, -78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111, -117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69, -76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111, -110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, -103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, -108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, -78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, -101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,66,85,66,66,76,69,95,67,72,65,82,84,95,86,73, -69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77, -69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -84,104,101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,81,85, -65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75, +71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108, +111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,51,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76, -69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85, -65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, +79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, +69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, +108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, +65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, +101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,66,85,66,66,76,69,95,67,72,65,82,84,95,86,73,69,87,95,77,69, +78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65,95,77,69,78,85, +34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109, +101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73, +76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, +95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, @@ -44601,366 +45464,317 @@ static unsigned char xml_res_file_11[] = { 84,95,70,73,69,76,68,95,80,82,79,80,34,62,10,32,32,32,32,32,32,60,108,97, 98,101,108,62,69,100,105,116,32,86,97,114,105,97,98,108,101,32,80,114,111, 112,101,114,116,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,33,45,45,10,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,76,67,85,76, -65,84,79,82,34,62,10,32,32,32,32,32,60,108,97,98,101,108,62,67,97,108,99, -117,108,97,116,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,84,65,66,76,69,95,67,72,65,78,71,69,95,70,73, -69,76,68,95,84,89,80,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,104,97,110,103,101,32,86,97,114,105,97,98,108,101,32,84,121,112,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,69,78, +67,79,68,73,78,71,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69, +110,99,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, +95,85,84,70,56,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +85,110,105,99,111,100,101,32,40,85,84,70,45,56,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,85,84,70,49,54,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,99,111,100, +101,32,40,85,84,70,45,49,54,76,69,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,68,65, -84,65,95,77,79,86,73,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,65,110,105,109,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,84,73,77,69,95,67,72,79, -79,83,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109, -101,32,67,111,110,116,114,111,108,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,84,73,77,69,95,69,68,73,84,79,82,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101,32,69,100,105, -116,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,86,65,82,95,71,82,79,85,80,73,78,71,95,69,68,73,84,79,82,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108, -101,32,71,114,111,117,112,105,110,103,32,69,100,105,116,111,114,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,84,65,66,76,69,95,71,82,79,85,80,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,71,114,111,117,112,32,83,101,108,101,99,116,101,100,60, -47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65, -66,76,69,95,85,78,71,82,79,85,80,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,85,110,103,114,111,117,112,32,86,97,114,105,97,98,108,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78, +71,95,87,73,78,68,79,87,83,95,49,50,53,54,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,65,114,97,98,105,99,32,40,87,105,110,100,111, +119,115,45,49,50,53,54,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,50,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97,108,32,69, +117,114,111,112,101,97,110,32,76,97,116,105,110,45,50,32,40,73,83,79,45, +56,56,53,57,45,50,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,48,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97,108, +32,69,117,114,111,112,101,97,110,32,40,87,105,110,100,111,119,115,45,49, +50,53,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73, +78,71,95,67,80,56,53,50,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,101,110,116,114,97,108,32,69,117,114,111,112,101,97,110,32,40, +67,80,56,53,50,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, -79,87,95,67,65,84,95,67,76,65,83,83,73,70,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,97,116,101,103,111,114,121,32,69,100,105,116,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,9,45,45,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,84,65,66,76,69,95,69,78,67,79,68,73,78,71,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,69,110,99,111,100,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,78,67,79,68,73,78,71,95,85,84,70,56,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40,85,84,70,45, -56,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78, +67,79,68,73,78,71,95,71,66,50,51,49,50,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,104,105,110,101,115,101,32,83,105,109,112,108, +105,102,105,101,100,32,40,71,66,50,51,49,50,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,66,73,71,53,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,105,110,101,115, +101,32,84,114,97,100,105,116,105,111,110,97,108,32,40,66,105,103,53,41, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, +95,73,83,79,95,56,56,53,57,95,53,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,121,114,105,108,108,105,99,32,40,73,83,79,45,56,56, +53,57,45,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67, +79,68,73,78,71,95,75,79,73,56,95,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,121,114,105,108,108,105,99,32,40,75,79,73,56,45, +82,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78, -71,95,85,84,70,49,54,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,85,110,105,99,111,100,101,32,40,85,84,70,45,49,54,76,69,41,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53, -54,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,114,97,98, -105,99,32,40,87,105,110,100,111,119,115,45,49,50,53,54,41,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95, -56,56,53,57,95,50,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,101,110,116,114,97,108,32,69,117,114,111,112,101,97,110,32,76,97, -116,105,110,45,50,32,40,73,83,79,45,56,56,53,57,45,50,41,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +71,95,87,73,78,68,79,87,83,95,49,50,53,49,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,121,114,105,108,108,105,99,32,40,87,105,110, +100,111,119,115,45,49,50,53,49,41,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,69,78,67,79,68,73,78,71,95,67,80,56,54,54,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108,105,99,47,82,117, +115,115,105,97,110,32,40,67,80,56,54,54,41,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,55, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,114,101,101, +107,32,40,73,83,79,45,56,56,53,57,45,55,41,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,56, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,101,98,114, +101,119,32,40,73,83,79,45,56,56,53,57,45,56,45,49,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, 110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,87,73,78,68,79, -87,83,95,49,50,53,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,101,110,116,114,97,108,32,69,117,114,111,112,101,97,110,32,40, -87,105,110,100,111,119,115,45,49,50,53,48,41,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,67,80,56,53,50,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97,108, -32,69,117,114,111,112,101,97,110,32,40,67,80,56,53,50,41,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,71,66,50,51,49, -50,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,105, -110,101,115,101,32,83,105,109,112,108,105,102,105,101,100,32,40,71,66,50, -51,49,50,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +87,83,95,49,50,53,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,101,98,114,101,119,32,40,87,105,110,100,111,119,115,45,49,50, +53,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73, +78,71,95,83,72,73,70,84,95,74,73,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,74,97,112,97,110,101,115,101,32,40,83,104,105,102, +116,95,74,73,83,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78, +67,79,68,73,78,71,95,69,85,67,95,74,80,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,74,97,112,97,110,101,115,101,32,40,69,85,67,45, +74,80,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73, -78,71,95,66,73,71,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,104,105,110,101,115,101,32,84,114,97,100,105,116,105,111,110, -97,108,32,40,66,105,103,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,53,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108,105, -99,32,40,73,83,79,45,56,56,53,57,45,53,41,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,69,78,67,79,68,73,78,71,95,75,79,73,56,95,82,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108,105, -99,32,40,75,79,73,56,45,82,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,49,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108, -105,99,32,40,87,105,110,100,111,119,115,45,49,50,53,49,41,60,47,108,97, +78,71,95,69,85,67,95,75,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,75,111,114,101,97,110,32,40,69,85,67,45,75,82,41,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,67,80,56,54, -54,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114, -105,108,108,105,99,47,82,117,115,115,105,97,110,32,40,67,80,56,54,54,41, +32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95, +56,56,53,57,95,49,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,78,111,114,100,105,99,32,76,97,116,105,110,45,54,32,40,73,83,79, +45,56,56,53,57,45,49,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,51,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,111,117,116,104,32,69,117,114, +111,112,101,97,110,32,76,97,116,105,110,45,51,32,40,73,83,79,45,56,56,53, +57,45,51,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73, +78,71,95,73,83,79,95,56,56,53,57,95,57,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,84,117,114,107,105,115,104,32,76,97,116,105,110, +45,53,32,40,73,83,79,45,56,56,53,57,45,57,41,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49, +50,53,52,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,117, +114,107,105,115,104,32,40,87,105,110,100,111,119,115,45,49,50,53,52,41, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, -95,73,83,79,95,56,56,53,57,95,55,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,71,114,101,101,107,32,40,73,83,79,45,56,56,53,57,45,55, -41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78, -71,95,73,83,79,95,56,56,53,57,95,56,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,72,101,98,114,101,119,32,40,73,83,79,45,56,56,53,57, -45,56,45,49,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +95,87,73,78,68,79,87,83,95,49,50,53,56,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,86,105,101,116,110,97,109,101,115,101,32,40,87, +105,110,100,111,119,115,45,49,50,53,56,41,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,49, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,115,116, +32,69,117,114,111,112,101,97,110,32,76,97,116,105,110,45,49,32,40,73,83, +79,45,56,56,53,57,45,49,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,53,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,115,116,32,69,117,114, +111,112,101,97,110,32,76,97,116,105,110,45,57,32,40,73,83,79,45,56,56,53, +57,45,49,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62, +84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,82,69,80,79, +82,84,95,86,73,69,87,95,77,69,78,85,95,67,79,78,84,69,88,84,34,62,10,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67, -79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,53,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,72,101,98,114,101,119,32,40,87,105, -110,100,111,119,115,45,49,50,53,53,41,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,78,67,79,68,73,78,71,95,83,72,73,70,84,95,74,73,83,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,74,97,112,97,110,101, -115,101,32,40,83,104,105,102,116,95,74,73,83,41,60,47,108,97,98,101,108, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,70,79,78, +84,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103, +101,32,70,111,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, +105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,84,69,83,84, +77,65,80,95,86,73,69,87,95,77,69,78,85,95,67,79,78,84,69,88,84,34,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111, +110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, 60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,69,85,67,95,74,80,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,74,97,112,97,110, -101,115,101,32,40,69,85,67,45,74,80,41,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,78,67,79,68,73,78,71,95,69,85,67,95,75,82,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,75,111,114,101,97,110,32,40,69, -85,67,45,75,82,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78, -67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,48,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,100,105,99,32,76,97,116, -105,110,45,54,32,40,73,83,79,45,56,56,53,57,45,49,48,41,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56, -56,53,57,95,51,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,111,117,116,104,32,69,117,114,111,112,101,97,110,32,76,97,116,105,110, -45,51,32,40,73,83,79,45,56,56,53,57,45,51,41,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95, -57,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,117,114, -107,105,115,104,32,76,97,116,105,110,45,53,32,40,73,83,79,45,56,56,53,57, -45,57,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73, -78,71,95,87,73,78,68,79,87,83,95,49,50,53,52,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,84,117,114,107,105,115,104,32,40,87,105,110, -100,111,119,115,45,49,50,53,52,41,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,69,78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,56,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,116,110, -97,109,101,115,101,32,40,87,105,110,100,111,119,115,45,49,50,53,56,41,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95, -73,83,79,95,56,56,53,57,95,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,87,101,115,116,32,69,117,114,111,112,101,97,110,32,76,97, -116,105,110,45,49,32,40,73,83,79,45,56,56,53,57,45,49,41,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56, -56,53,57,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,87,101,115,116,32,69,117,114,111,112,101,97,110,32,76,97,116,105,110, -45,57,32,40,73,83,79,45,56,56,53,57,45,49,53,41,60,47,108,97,98,101,108, +109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67, +76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114, +99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116, +108,105,110,101,115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,108,97,98,101,108,62,84,97,98,108,101,60,47,108,97,98,101,108, -62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,82,69,80,79,82,84,95,86,73,69,87,95,77,69,78,85,95,67, -79,78,84,69,88,84,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,70,79,78,84,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,67,104,97,110,103,101,32,70,111,110,116,60,47,108,97,98,101, -108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108, -62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,84,69,83,84,77,65,80,95,86,73,69,87,95,77,69,78,85,95, -67,79,78,84,69,88,84,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95, -87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87, +95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66,111,117,110,100, +97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108, +101,99,116,97,98,108,101,32,70,105,108,108,32,67,111,108,111,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103, +114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69, -95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, -111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83, +116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95, -67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,101,108,101,99,116,97,98,108,101,32,70,105,108,108,32,67,111,108,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79, -76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97, -99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83, -95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, -119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101, -100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83, -69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105, -111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, +60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65, -82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121, -32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47, -108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, -69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60, -47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,84,69,83,84,95,84,65,66,76,69,95, -86,73,69,87,95,77,69,78,85,95,67,79,78,84,69,88,84,34,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83, -73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79, -117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,72, -79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66,111,117,110, -100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60, -47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76, +69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, +103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, +78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,84,69,83,84,95,84,65,66,76,69,95,86,73,69,87, +95,77,69,78,85,95,67,79,78,84,69,88,84,34,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, +76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108, +105,110,101,115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87, +95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66,111,117,110,100, +97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, 34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79, @@ -45157,102 +45971,106 @@ static unsigned char xml_res_file_11[] = { 108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,85,76,95,76,74, -67,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,117,108,116,105, -118,97,114,105,97,116,101,32,76,111,99,97,108,32,74,111,105,110,32,67,111, -117,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, -108,97,98,101,108,62,76,111,99,97,108,32,71,101,97,114,121,32,77,97,112, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,77,95,85,78,73,95,76,79,67,65,76,95,71,69,65, -82,89,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118, -97,114,105,97,116,101,32,76,111,99,97,108,32,71,101,97,114,121,60,47,108, +67,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,45,108,111, +99,97,116,105,111,110,32,74,111,105,110,32,67,111,117,110,116,60,47,108, 97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,85,76, -95,76,79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,77,117,108,116,105,118,97,114,105,97,116,101,32,76,111,99, -97,108,32,71,101,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,77,69,78, -85,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78, -85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97,112,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, +114,97,116,111,114,34,47,62,10,32,32,32,32,60,108,97,98,101,108,62,76,111, +99,97,108,32,71,101,97,114,121,32,77,97,112,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +85,78,73,95,76,79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,76,111, +99,97,108,32,71,101,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,80,79,73,78,84,83,95,70,82,79,77,95,84,65, -66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111, -105,110,116,115,32,102,114,111,109,32,84,97,98,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, -65,80,69,95,80,79,76,89,71,79,78,83,95,70,82,79,77,95,71,82,73,68,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101, -32,71,114,105,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84, -65,66,76,69,95,83,80,65,84,73,65,76,95,74,79,73,78,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108,32,74,111,105,110, +110,97,109,101,61,34,73,68,77,95,77,85,76,95,76,79,67,65,76,95,71,69,65, +82,89,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,117,108,116, +105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,71,101,97,114,121, 60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,71,69,84,73,83,95,77,69,78,85,34,62,10,32,32,32,32,60,108, -97,98,101,108,62,76,111,99,97,108,32,71,32,77,97,112,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,77,95,76,79,67,65,76,95,71,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,76,111,99,97,108,32,71,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,71,95,83,84,65,82,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71, -42,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,74,79,73,78,84, -95,67,79,85,78,84,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,85, -110,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,74,111,105,110, -32,67,111,117,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +61,34,73,68,95,84,79,79,76,83,95,77,69,78,85,34,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,104,97,112,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,80, +79,73,78,84,83,95,70,82,79,77,95,84,65,66,76,69,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,80,111,105,110,116,115,32,102,114,111, +109,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,83,72,65,80,69,95,80,79,76,89,71,79,78, +83,95,70,82,79,77,95,71,82,73,68,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,114,101,97,116,101,32,71,114,105,100,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,83,80,65,84,73,65,76, +95,74,79,73,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112, +97,116,105,97,108,32,74,111,105,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,83,72,65,80,69,95,68,73,83,83,79,76,86, +69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,115,111, +108,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,71,69,84,73,83,95,77,69,78,85,34,62,10,32, +32,32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,71,32,77,97,112,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,77,95,76,79,67,65,76,95,71,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,76,111,99,97,108,32,71,60,47,108,97,98,101,108, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,71, +95,83,84,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111, +99,97,108,32,71,42,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,77,95,66,73,86,95,76,74,67,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,66,105,118,97,114,105,97,116,101,32,76,111,99,97,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67,65,76, +95,74,79,73,78,84,95,67,79,85,78,84,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,76,111,99,97,108, 32,74,111,105,110,32,67,111,117,110,116,60,47,108,97,98,101,108,62,10,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,77,85,76,95,76,74,67,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,77,117,108,116,105,118,97,114,105, -97,116,101,32,76,111,99,97,108,32,74,111,105,110,32,67,111,117,110,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,65,80,95,67,72,79,73,67,69,83,34,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65, -80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115, -32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79, -80,69,78,95,81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,32, -77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73, -76,69,95,50,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85, -65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +34,32,110,97,109,101,61,34,73,68,77,95,66,73,86,95,76,74,67,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,66,105,118,97,114,105,97,116,101, +32,76,111,99,97,108,32,74,111,105,110,32,67,111,117,110,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,85,76,95,76, +74,67,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,45,108, +111,99,97,116,105,111,110,32,74,111,105,110,32,67,111,117,110,116,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,77,65,80,95,67,72,79,73,67,69,83,34,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80, +65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,32, +77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80, +69,78,95,81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,32,77, +97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76, +69,95,50,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65, +78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, @@ -45418,20 +46236,270 @@ static unsigned char xml_res_file_11[] = { 32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116, -111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,72,73,69,82,65,82,67,72,73,67,65,76,95,77,65,80,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,101,114,97,114,99,104, +105,99,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77, +95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84, +95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111, +109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,77,79,79, +84,72,73,78,71,95,67,72,79,73,67,69,83,34,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84, +69,83,95,83,77,79,79,84,72,95,82,65,87,82,65,84,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,82,97,119,32,82,97,116,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, +80,69,78,95,82,65,84,69,83,95,83,77,79,79,84,72,95,69,88,67,69,83,83,82, +73,83,75,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,120, +99,101,115,115,32,82,105,115,107,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84,69, +83,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,95,83,77,79,79,84,72, +69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,109,112, +105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65, +84,69,83,95,83,80,65,84,73,65,76,95,82,65,84,69,95,83,77,79,79,84,72,69, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116, +105,97,108,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83, +80,65,84,73,65,76,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97, +108,32,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,82,97,116,101,115,45,67,97,108, +99,117,108,97,116,101,100,32,77,97,112,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, +101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,77,65,80,95,67,72,79,73,67,69,83,95,78,79,95,73,67,79,78,83, +34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76, +69,83,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101, +109,101,108,101,115,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110, +116,105,108,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78, +95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95, +51,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, +80,69,78,95,81,85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73, +76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85, +65,78,84,73,76,69,95,55,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,56,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, +78,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69, +95,49,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65, +80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82, +67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +80,101,114,99,101,110,116,105,108,101,32,77,97,112,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65, +80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110, +103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83, +95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51,46,48,41, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, +80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69, +84,72,95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110, +32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,85,78,73, +81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,85,110,105,113,117,101,32,86,97,108,117,101,115,32,77,97,112,60, +47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, +69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,67,79,76,79,67,65,84,73,79, +78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,45,108,111, +99,97,116,105,111,110,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75, +83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,32,77,97,112,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82, +69,65,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, +95,51,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,52,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, +78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,53,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65, +84,85,82,65,76,95,66,82,69,65,75,83,95,54,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65, +76,95,66,82,69,65,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66, +82,69,65,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75, +83,95,57,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,49,48, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69, +82,86,65,76,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118,97,108,115, +32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65, +76,95,73,78,84,69,82,86,65,76,83,95,50,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73, +78,84,69,82,86,65,76,83,95,51,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84, +69,82,86,65,76,83,95,52,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65, +76,83,95,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95, +54,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, +80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,55,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87, -95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32, -78,101,119,32,67,117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, +78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,56,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69, +81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,57,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, -111,114,34,47,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, -114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85, +65,76,95,73,78,84,69,82,86,65,76,83,95,49,48,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,72,73,69,82,65,82,67,72,73,67,65,76,95,77,65,80,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,101,114,97,114,99,104, +105,99,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77, +95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84, +95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111, +109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, 34,73,68,95,77,65,80,95,83,77,79,79,84,72,73,78,71,95,67,72,79,73,67,69, 83,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, @@ -45469,332 +46537,95 @@ static unsigned char xml_res_file_11[] = { 99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, 115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,67,72,79,73, -67,69,83,95,78,79,95,73,67,79,78,83,34,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65, -76,89,83,73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,32,77,97,112, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81, -85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,32,77,97,112,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,50,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76, -69,95,52,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65, -78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,55,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, -78,95,81,85,65,78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69, -95,57,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,67, -72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108, -101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73, -78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,66, -111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46,53,41,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78, -95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,51,48,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40, -72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83, -73,83,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100,32, -68,101,118,105,97,116,105,111,110,32,77,97,112,60,47,108,97,98,101,108, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80, -65,78,65,76,89,83,73,83,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32, -86,97,108,117,101,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89, -83,73,83,95,67,79,76,79,67,65,84,73,79,78,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,111,45,108,111,99,97,116,105,111,110,32,77,97,112, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78, -65,84,85,82,65,76,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66, -114,101,97,107,115,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, -78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65, -84,85,82,65,76,95,66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65, -76,95,66,82,69,65,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66, -82,69,65,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75, -83,95,54,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,55,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,56,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78, -65,84,85,82,65,76,95,66,82,69,65,75,83,95,57,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85, -82,65,76,95,66,82,69,65,75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117,97, -108,32,73,110,116,101,114,118,97,108,115,32,77,97,112,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95, -50,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, -80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,51,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,68,65,84,65,83,79,85,82, +67,69,95,80,79,80,85,80,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,68,83,95,83,72,80,69,70,73,76,69,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,69,83,82,73,32,83,104,97,112,101, +102,105,108,101,32,40,42,46,115,104,112,41,124,42,46,115,104,112,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, -78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,52,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69, -81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,53,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85, -65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95, -73,78,84,69,82,86,65,76,83,95,55,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84, -69,82,86,65,76,83,95,56,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65, -76,83,95,57,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95, -49,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66, -82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67, -76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,65,80,95,83,77,79,79,84,72,73,78,71,95,67,72,79,73,67,69,83,34,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,82,65,84,69,83,95,83,77,79,79,84,72,95,82,65,87,82,65, -84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97,119, -32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,77,79, -79,84,72,95,69,88,67,69,83,83,82,73,83,75,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,69,120,99,101,115,115,32,82,105,115,107,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,82,65,84,69,83,95,69,77,80,73,82,73,67,65,76,95,66,65, -89,69,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,69,109,112,105,114,105,99,97,108,32,66,97,121,101, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,80,65,84,73,65,76,95,82, -65,84,69,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,112,97,116,105,97,108,32,82,97,116,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, -80,69,78,95,82,65,84,69,83,95,83,80,65,84,73,65,76,95,69,77,80,73,82,73, -67,65,76,95,66,65,89,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,112,97,116,105,97,108,32,69,109,112,105,114,105,99,97,108, -32,66,97,121,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -82,97,116,101,115,45,67,97,108,99,117,108,97,116,101,100,32,77,97,112,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47, -108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,68,65,84,65,83,79,85,82,67,69,95,80, -79,80,85,80,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,68,83,95,83,72,80,69,70,73,76,69,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,69,83,82,73,32,83,104,97,112,101,102,105,108, -101,32,40,42,46,115,104,112,41,124,42,46,115,104,112,60,47,108,97,98,101, -108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,71,69,79,68, -65,84,65,66,65,83,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -69,83,82,73,32,70,105,108,101,32,71,101,111,100,97,116,97,98,97,115,101, -32,40,42,46,103,100,98,41,124,42,46,103,100,98,60,47,108,97,98,101,108, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,71,69,79,68,65, -84,65,66,65,83,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,71, -101,111,74,83,79,78,32,40,42,46,103,101,111,106,115,111,110,59,42,46,106, -115,111,110,41,124,42,46,103,101,111,106,115,111,110,59,42,46,106,115,111, -110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -83,95,71,69,79,80,65,67,75,65,71,69,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,71,101,111,80,97,99,107,97,103,101,32,40,42,46,103,112,107, -103,41,124,42,46,103,112,107,103,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,68,83,95,83,81,76,73,84,69,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,81,76,105,116,101,47,83,112,97,116, -105,97,76,105,116,101,32,40,42,46,115,113,108,105,116,101,41,124,42,46, -115,113,108,105,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,68,83,95,80,71,69,79,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,69,83,82,73,32,80,101,114,115,111,110,97,108,32, -71,101,111,100,97,116,97,98,97,115,101,32,40,42,46,109,100,98,41,124,42, -46,109,100,98,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95, +71,69,79,68,65,84,65,66,65,83,69,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,69,83,82,73,32,70,105,108,101,32,71,101,111,100,97,116,97,98, +97,115,101,32,40,42,46,103,100,98,41,124,42,46,103,100,98,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,71,69,79, +68,65,84,65,66,65,83,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,71,101,111,74,83,79,78,32,40,42,46,103,101,111,106,115,111,110,59,42, +46,106,115,111,110,41,124,42,46,103,101,111,106,115,111,110,59,42,46,106, +115,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,68,83,95,71,77,76,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,71,101,111,103,114,97,112,104,121,32,77,97,114,107,117,112,32,76, -97,110,103,117,97,103,101,32,40,42,46,103,109,108,41,124,42,46,103,109, -108,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -83,95,75,77,76,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,75,101, -121,104,111,108,101,32,77,97,114,107,117,112,32,76,97,110,103,117,97,103, -101,32,40,42,46,107,109,108,41,124,42,46,107,109,108,60,47,108,97,98,101, +34,73,68,95,68,83,95,71,69,79,80,65,67,75,65,71,69,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,71,101,111,80,97,99,107,97,103,101,32,40, +42,46,103,112,107,103,41,124,42,46,103,112,107,103,60,47,108,97,98,101, 108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,77,65,80,73, -78,70,79,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,97,112,73, -110,102,111,32,40,42,46,116,97,98,59,42,46,109,105,102,59,42,46,109,105, -100,41,124,42,46,116,97,98,59,42,46,109,105,102,59,42,46,109,105,100,60, -47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,68,83,95,68,66,65,83,69,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,100,66,97,115,101,32,68,97,116,97,98, -97,115,101,32,70,105,108,101,32,40,42,46,100,98,102,41,124,42,46,100,98, -102,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -83,95,67,83,86,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -109,109,97,32,83,101,112,97,114,97,116,101,100,32,86,97,108,117,101,32, -40,42,46,99,115,118,41,124,42,46,99,115,118,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,88,76,83,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,77,83,32,69,120,99,101,108,32, -40,42,46,120,108,115,41,124,42,46,120,108,115,60,47,108,97,98,101,108,62, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,83,81,76,73, +84,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,81,76,105,116, +101,47,83,112,97,116,105,97,76,105,116,101,32,40,42,46,115,113,108,105, +116,101,41,124,42,46,115,113,108,105,116,101,60,47,108,97,98,101,108,62, 10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,79,68,83,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,112,101,110,32,68,111,99,117, -109,101,110,116,32,83,112,114,101,97,100,115,104,101,101,116,32,40,42,46, -111,100,115,41,124,42,46,111,100,115,60,47,108,97,98,101,108,62,10,32,32, +101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,80,71,69,79,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,83,82,73,32,80,101,114, +115,111,110,97,108,32,71,101,111,100,97,116,97,98,97,115,101,32,40,42,46, +109,100,98,41,124,42,46,109,100,98,60,47,108,97,98,101,108,62,10,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,68,83,95,71,77,76,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,71,101,111,103,114,97,112,104,121,32,77,97, +114,107,117,112,32,76,97,110,103,117,97,103,101,32,40,42,46,103,109,108, +41,124,42,46,103,109,108,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,68,83,95,75,77,76,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,75,101,121,104,111,108,101,32,77,97,114,107,117,112, +32,76,97,110,103,117,97,103,101,32,40,42,46,107,109,108,41,124,42,46,107, +109,108,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,68,83,95,77,65,80,73,78,70,79,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,77,97,112,73,110,102,111,32,40,42,46,116,97,98,59,42,46, +109,105,102,59,42,46,109,105,100,41,124,42,46,116,97,98,59,42,46,109,105, +102,59,42,46,109,105,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,83,95,68, +66,65,83,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,100,66,97, +115,101,32,68,97,116,97,98,97,115,101,32,70,105,108,101,32,40,42,46,100, +98,102,41,124,42,46,100,98,102,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,68,83,95,67,83,86,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,111,109,109,97,32,83,101,112,97,114,97,116, +101,100,32,86,97,108,117,101,32,40,42,46,99,115,118,41,124,42,46,99,115, +118,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -83,95,71,68,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101, -111,68,97,32,80,114,111,106,101,99,116,32,70,105,108,101,32,40,42,46,103, -100,97,41,124,42,46,103,100,97,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,60,47,114,101,115,111,117,114,99,101,62,10}; +83,95,88,76,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,83, +32,69,120,99,101,108,32,40,42,46,120,108,115,41,124,42,46,120,108,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,83, +95,79,68,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,79,112,101, +110,32,68,111,99,117,109,101,110,116,32,83,112,114,101,97,100,115,104,101, +101,116,32,40,42,46,111,100,115,41,124,42,46,111,100,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,68,83,95,71,68,65,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,71,101,111,68,97,32,80,114,111,106,101,99,116,32,70,105, +108,101,32,40,42,46,103,100,97,41,124,42,46,103,100,97,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47, +111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10}; -static size_t xml_res_size_12 = 1697; -static unsigned char xml_res_file_12[] = { +static size_t xml_res_size_13 = 1697; +static unsigned char xml_res_file_13[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -45879,8 +46710,8 @@ static unsigned char xml_res_file_12[] = { 184,20,255,143,3,50,240,55,171,199,77,181,74,223,0,40,0,0,0,0,73,69,78, 68,174,66,96,130}; -static size_t xml_res_size_13 = 1651; -static unsigned char xml_res_file_13[] = { +static size_t xml_res_size_14 = 1651; +static unsigned char xml_res_file_14[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -45962,8 +46793,8 @@ static unsigned char xml_res_file_13[] = { 209,158,63,38,178,71,115,229,191,167,253,47,189,14,50,234,199,164,228,40, 0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_14 = 1389; -static unsigned char xml_res_file_14[] = { +static size_t xml_res_size_15 = 1389; +static unsigned char xml_res_file_15[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -46032,8 +46863,8 @@ static unsigned char xml_res_file_14[] = { 90,123,165,123,15,207,221,128,95,33,249,247,108,126,0,107,246,215,9,102, 17,136,243,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_15 = 1817; -static unsigned char xml_res_file_15[] = { +static size_t xml_res_size_16 = 1817; +static unsigned char xml_res_file_16[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -46123,8 +46954,8 @@ static unsigned char xml_res_file_15[] = { 98,247,159,130,116,33,254,183,6,127,0,30,8,32,69,140,245,101,174,0,0,0, 0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_16 = 1505; -static unsigned char xml_res_file_16[] = { +static size_t xml_res_size_17 = 1505; +static unsigned char xml_res_file_17[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -46199,8 +47030,8 @@ static unsigned char xml_res_file_16[] = { 85,176,87,227,255,109,185,127,0,185,15,16,62,56,64,169,102,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_17 = 11474; -static unsigned char xml_res_file_17[] = { +static size_t xml_res_size_18 = 11474; +static unsigned char xml_res_file_18[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -46756,8 +47587,8 @@ static unsigned char xml_res_file_17[] = { 8,58,108,224,127,142,253,3,110,5,74,195,32,251,216,158,0,0,0,0,73,69,78, 68,174,66,96,130}; -static size_t xml_res_size_18 = 9617; -static unsigned char xml_res_file_18[] = { +static size_t xml_res_size_19 = 9617; +static unsigned char xml_res_file_19[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -47225,8 +48056,8 @@ static unsigned char xml_res_file_18[] = { 203,242,249,103,216,111,223,233,122,5,47,105,204,252,0,0,0,0,73,69,78,68, 174,66,96,130}; -static size_t xml_res_size_19 = 1740; -static unsigned char xml_res_file_19[] = { +static size_t xml_res_size_20 = 1740; +static unsigned char xml_res_file_20[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -47311,8 +48142,8 @@ static unsigned char xml_res_file_19[] = { 151,216,165,228,207,173,81,215,81,184,186,152,173,112,213,138,229,127,99, 224,111,74,128,241,5,89,247,24,102,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_20 = 1614; -static unsigned char xml_res_file_20[] = { +static size_t xml_res_size_21 = 1614; +static unsigned char xml_res_file_21[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -47392,8 +48223,8 @@ static unsigned char xml_res_file_20[] = { 30,155,254,35,5,254,6,58,125,246,155,16,217,127,162,0,0,0,0,73,69,78,68, 174,66,96,130}; -static size_t xml_res_size_21 = 1866; -static unsigned char xml_res_file_21[] = { +static size_t xml_res_size_22 = 1866; +static unsigned char xml_res_file_22[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -47486,8 +48317,8 @@ static unsigned char xml_res_file_21[] = { 53,211,70,250,160,184,54,181,71,219,255,33,2,255,1,70,222,132,61,35,129, 79,136,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_22 = 1524; -static unsigned char xml_res_file_22[] = { +static size_t xml_res_size_23 = 1524; +static unsigned char xml_res_file_23[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -47563,8 +48394,8 @@ static unsigned char xml_res_file_22[] = { 220,138,10,89,77,250,175,29,248,3,199,67,195,29,118,254,173,252,0,0,0,0, 73,69,78,68,174,66,96,130}; -static size_t xml_res_size_23 = 10580; -static unsigned char xml_res_file_23[] = { +static size_t xml_res_size_24 = 10580; +static unsigned char xml_res_file_24[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -48080,8 +48911,8 @@ static unsigned char xml_res_file_23[] = { 7,98,99,119,234,143,141,223,111,125,183,149,223,47,230,127,167,247,31,193, 62,193,200,99,25,179,21,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_24 = 10509; -static unsigned char xml_res_file_24[] = { +static size_t xml_res_size_25 = 10509; +static unsigned char xml_res_file_25[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -48593,8 +49424,8 @@ static unsigned char xml_res_file_24[] = { 194,209,92,235,10,145,215,122,157,151,204,175,101,241,223,42,253,3,19,218, 147,3,47,163,17,161,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_25 = 2284; -static unsigned char xml_res_file_25[] = { +static size_t xml_res_size_26 = 2284; +static unsigned char xml_res_file_26[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -48708,8 +49539,8 @@ static unsigned char xml_res_file_25[] = { 91,128,115,254,107,49,126,4,209,159,64,184,11,207,245,130,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_26 = 2021; -static unsigned char xml_res_file_26[] = { +static size_t xml_res_size_27 = 2021; +static unsigned char xml_res_file_27[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -48810,8 +49641,8 @@ static unsigned char xml_res_file_26[] = { 134,73,253,132,12,165,238,167,91,255,13,66,119,84,222,13,145,177,129,0, 0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_27 = 1984; -static unsigned char xml_res_file_27[] = { +static size_t xml_res_size_28 = 1984; +static unsigned char xml_res_file_28[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -48910,8 +49741,8 @@ static unsigned char xml_res_file_27[] = { 159,211,74,188,91,240,245,55,204,120,179,126,138,209,124,249,0,0,0,0,73, 69,78,68,174,66,96,130}; -static size_t xml_res_size_28 = 1699; -static unsigned char xml_res_file_28[] = { +static size_t xml_res_size_29 = 1699; +static unsigned char xml_res_file_29[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -48996,8 +49827,8 @@ static unsigned char xml_res_file_28[] = { 251,79,130,252,11,237,239,15,183,192,167,16,81,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_29 = 1789; -static unsigned char xml_res_file_29[] = { +static size_t xml_res_size_30 = 1789; +static unsigned char xml_res_file_30[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49086,8 +49917,8 @@ static unsigned char xml_res_file_29[] = { 247,220,41,229,177,158,41,113,77,244,109,16,79,37,255,255,1,137,164,35, 192,201,28,144,26,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_30 = 1491; -static unsigned char xml_res_file_30[] = { +static size_t xml_res_size_31 = 1491; +static unsigned char xml_res_file_31[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49161,8 +49992,8 @@ static unsigned char xml_res_file_30[] = { 190,214,236,98,79,196,196,177,212,255,7,37,204,244,220,198,50,220,174,0, 0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_31 = 1763; -static unsigned char xml_res_file_31[] = { +static size_t xml_res_size_32 = 1763; +static unsigned char xml_res_file_32[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49250,8 +50081,8 @@ static unsigned char xml_res_file_31[] = { 85,70,248,191,27,127,3,211,151,44,237,252,120,162,224,0,0,0,0,73,69,78, 68,174,66,96,130}; -static size_t xml_res_size_32 = 1453; -static unsigned char xml_res_file_32[] = { +static size_t xml_res_size_33 = 1453; +static unsigned char xml_res_file_33[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49323,8 +50154,8 @@ static unsigned char xml_res_file_32[] = { 153,153,153,232,232,232,40,228,251,255,65,6,254,0,75,253,226,71,186,111, 46,192,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_33 = 1762; -static unsigned char xml_res_file_33[] = { +static size_t xml_res_size_34 = 1762; +static unsigned char xml_res_file_34[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49412,8 +50243,8 @@ static unsigned char xml_res_file_33[] = { 73,250,7,99,116,204,205,238,47,255,1,175,126,133,51,74,101,222,148,0,0, 0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_34 = 1498; -static unsigned char xml_res_file_34[] = { +static size_t xml_res_size_35 = 1498; +static unsigned char xml_res_file_35[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49487,8 +50318,8 @@ static unsigned char xml_res_file_34[] = { 170,0,15,21,103,159,72,233,165,98,191,1,167,47,30,220,252,224,10,163,0, 0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_35 = 1639; -static unsigned char xml_res_file_35[] = { +static size_t xml_res_size_36 = 1639; +static unsigned char xml_res_file_36[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49570,8 +50401,8 @@ static unsigned char xml_res_file_35[] = { 182,141,199,191,196,107,193,230,195,143,198,0,0,0,0,73,69,78,68,174,66, 96,130}; -static size_t xml_res_size_36 = 1354; -static unsigned char xml_res_file_36[] = { +static size_t xml_res_size_37 = 1354; +static unsigned char xml_res_file_37[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49639,8 +50470,8 @@ static unsigned char xml_res_file_36[] = { 249,199,77,127,3,179,163,245,121,14,231,190,119,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_37 = 1994; -static unsigned char xml_res_file_37[] = { +static size_t xml_res_size_38 = 1994; +static unsigned char xml_res_file_38[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49739,8 +50570,8 @@ static unsigned char xml_res_file_37[] = { 193,171,120,61,58,230,63,47,148,226,117,111,197,114,229,127,108,255,1,121, 194,122,87,5,172,108,112,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_38 = 1576; -static unsigned char xml_res_file_38[] = { +static size_t xml_res_size_39 = 1576; +static unsigned char xml_res_file_39[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49818,8 +50649,8 @@ static unsigned char xml_res_file_38[] = { 44,10,157,196,124,127,127,159,114,211,88,21,241,159,150,63,81,89,233,125, 85,2,255,224,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_39 = 2107; -static unsigned char xml_res_file_39[] = { +static size_t xml_res_size_40 = 2107; +static unsigned char xml_res_file_40[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -49924,8 +50755,8 @@ static unsigned char xml_res_file_39[] = { 63,223,242,15,144,232,238,6,51,233,219,231,0,0,0,0,73,69,78,68,174,66,96, 130}; -static size_t xml_res_size_40 = 1872; -static unsigned char xml_res_file_40[] = { +static size_t xml_res_size_41 = 1872; +static unsigned char xml_res_file_41[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -50018,8 +50849,8 @@ static unsigned char xml_res_file_40[] = { 159,12,89,129,125,66,236,209,228,100,244,255,101,50,240,59,44,192,204,4, 139,57,222,148,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_41 = 2727; -static unsigned char xml_res_file_41[] = { +static size_t xml_res_size_42 = 2727; +static unsigned char xml_res_file_42[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -50154,8 +50985,8 @@ static unsigned char xml_res_file_41[] = { 68,196,164,164,144,44,23,93,211,222,215,217,190,242,69,190,78,112,255,86, 215,63,0,65,213,150,76,113,233,186,155,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_42 = 2510; -static unsigned char xml_res_file_42[] = { +static size_t xml_res_size_43 = 2510; +static unsigned char xml_res_file_43[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -50279,8 +51110,8 @@ static unsigned char xml_res_file_42[] = { 185,95,180,251,191,56,242,139,2,122,105,229,255,1,148,46,97,15,251,15,72, 90,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_43 = 2590; -static unsigned char xml_res_file_43[] = { +static size_t xml_res_size_44 = 2590; +static unsigned char xml_res_file_44[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -50410,8 +51241,8 @@ static unsigned char xml_res_file_43[] = { 43,249,255,245,117,252,31,2,180,180,245,49,77,86,56,0,0,0,0,73,69,78,68, 174,66,96,130}; -static size_t xml_res_size_44 = 2271; -static unsigned char xml_res_file_44[] = { +static size_t xml_res_size_45 = 2271; +static unsigned char xml_res_file_45[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -50523,8 +51354,8 @@ static unsigned char xml_res_file_44[] = { 192,200,132,71,244,127,253,37,219,58,168,203,123,7,85,205,247,191,150,127, 1,203,59,41,160,155,8,232,104,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_45 = 1878; -static unsigned char xml_res_file_45[] = { +static size_t xml_res_size_46 = 1878; +static unsigned char xml_res_file_46[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -50617,8 +51448,8 @@ static unsigned char xml_res_file_45[] = { 237,127,209,14,68,0,214,129,199,205,31,36,242,79,246,144,175,85,65,244, 47,158,249,181,8,168,131,234,129,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_46 = 1673; -static unsigned char xml_res_file_46[] = { +static size_t xml_res_size_47 = 1673; +static unsigned char xml_res_file_47[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -50701,8 +51532,8 @@ static unsigned char xml_res_file_46[] = { 84,11,247,205,244,190,187,172,33,2,202,164,153,236,91,18,141,32,250,15, 155,96,209,13,138,0,157,146,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_47 = 10729; -static unsigned char xml_res_file_47[] = { +static size_t xml_res_size_48 = 10729; +static unsigned char xml_res_file_48[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -51225,8 +52056,8 @@ static unsigned char xml_res_file_47[] = { 105,127,147,95,108,249,103,155,126,255,160,109,196,112,18,145,54,18,253, 182,111,254,13,86,98,75,173,41,57,76,70,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_48 = 10712; -static unsigned char xml_res_file_48[] = { +static size_t xml_res_size_49 = 10712; +static unsigned char xml_res_file_49[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -51749,8 +52580,8 @@ static unsigned char xml_res_file_48[] = { 228,125,30,127,209,157,255,1,20,12,21,53,43,45,50,60,0,0,0,0,73,69,78,68, 174,66,96,130}; -static size_t xml_res_size_49 = 2625; -static unsigned char xml_res_file_49[] = { +static size_t xml_res_size_50 = 2625; +static unsigned char xml_res_file_50[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -51880,8 +52711,8 @@ static unsigned char xml_res_file_49[] = { 26,37,165,252,254,210,95,21,238,127,1,34,180,187,130,229,69,29,163,0,0, 0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_50 = 2243; -static unsigned char xml_res_file_50[] = { +static size_t xml_res_size_51 = 2243; +static unsigned char xml_res_file_51[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -51993,8 +52824,8 @@ static unsigned char xml_res_file_50[] = { 175,41,244,191,125,252,95,252,28,100,139,98,189,9,108,0,0,0,0,73,69,78, 68,174,66,96,130}; -static size_t xml_res_size_51 = 4437; -static unsigned char xml_res_file_51[] = { +static size_t xml_res_size_52 = 4437; +static unsigned char xml_res_file_52[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,0,1,0,8,6,0,0,0, 92,114,168,102,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0, 0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77, @@ -52209,8 +53040,8 @@ static unsigned char xml_res_file_51[] = { 36,73,146,36,73,146,36,73,146,36,73,146,36,73,146,36,85,206,255,3,240,28, 234,151,201,113,160,142,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_52 = 1751; -static unsigned char xml_res_file_52[] = { +static size_t xml_res_size_53 = 1751; +static unsigned char xml_res_file_53[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -52296,8 +53127,8 @@ static unsigned char xml_res_file_52[] = { 254,14,59,20,159,201,43,206,36,140,89,92,92,156,154,158,158,86,215,139, 186,231,237,95,188,7,108,11,46,234,44,6,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_53 = 10241; -static unsigned char xml_res_file_53[] = { +static size_t xml_res_size_54 = 10241; +static unsigned char xml_res_file_54[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -52796,8 +53627,8 @@ static unsigned char xml_res_file_53[] = { 221,233,94,221,159,211,151,60,228,255,22,255,15,3,187,247,93,31,232,0,62, 0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_54 = 10042; -static unsigned char xml_res_file_54[] = { +static size_t xml_res_size_55 = 10042; +static unsigned char xml_res_file_55[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -53286,8 +54117,8 @@ static unsigned char xml_res_file_54[] = { 214,254,37,116,90,88,80,24,255,95,227,31,101,196,74,39,123,69,52,234,0, 0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_55 = 11009; -static unsigned char xml_res_file_55[] = { +static size_t xml_res_size_56 = 11009; +static unsigned char xml_res_file_56[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -53824,8 +54655,8 @@ static unsigned char xml_res_file_55[] = { 84,165,167,232,142,36,127,86,163,174,91,137,255,43,227,127,0,1,142,242, 167,70,163,233,170,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_56 = 10635; -static unsigned char xml_res_file_56[] = { +static size_t xml_res_size_57 = 10635; +static unsigned char xml_res_file_57[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -54343,8 +55174,8 @@ static unsigned char xml_res_file_56[] = { 198,57,212,119,117,234,131,24,244,191,65,254,3,20,185,203,98,175,110,245, 108,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_57 = 12333; -static unsigned char xml_res_file_57[] = { +static size_t xml_res_size_58 = 12333; +static unsigned char xml_res_file_58[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -54942,8 +55773,8 @@ static unsigned char xml_res_file_57[] = { 137,225,17,240,234,254,191,173,67,34,128,172,24,126,254,95,25,230,171,173, 255,2,82,43,219,209,204,16,249,64,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_58 = 11957; -static unsigned char xml_res_file_58[] = { +static size_t xml_res_size_59 = 11957; +static unsigned char xml_res_file_59[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -55523,8 +56354,8 @@ static unsigned char xml_res_file_58[] = { 213,65,34,194,127,3,103,235,88,211,218,134,26,176,0,0,0,0,73,69,78,68,174, 66,96,130}; -static size_t xml_res_size_59 = 1527; -static unsigned char xml_res_file_59[] = { +static size_t xml_res_size_60 = 1527; +static unsigned char xml_res_file_60[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72, 89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77, @@ -55600,8 +56431,8 @@ static unsigned char xml_res_file_59[] = { 158,213,255,33,199,111,197,65,73,182,175,184,146,122,40,248,23,138,134, 120,91,58,192,207,111,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_60 = 9975; -static unsigned char xml_res_file_60[] = { +static size_t xml_res_size_61 = 9975; +static unsigned char xml_res_file_61[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0, 0,115,122,122,244,0,0,20,81,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,104,129,237,154,119,80,20,79,155,199,123,54,239,194,146,115, @@ -56086,8 +56917,8 @@ static unsigned char xml_res_file_60[] = { 142,36,198,42,138,253,142,228,253,160,123,74,182,168,132,251,160,218,78, 43,252,13,184,83,207,161,24,198,38,74,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_61 = 1430; -static unsigned char xml_res_file_61[] = { +static size_t xml_res_size_62 = 1430; +static unsigned char xml_res_file_62[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -56158,8 +56989,8 @@ static unsigned char xml_res_file_61[] = { 121,251,23,114,167,99,154,246,210,189,250,0,0,0,0,73,69,78,68,174,66,96, 130}; -static size_t xml_res_size_62 = 1583; -static unsigned char xml_res_file_62[] = { +static size_t xml_res_size_63 = 1583; +static unsigned char xml_res_file_63[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -56237,8 +57068,8 @@ static unsigned char xml_res_file_62[] = { 66,198,193,174,226,237,122,252,220,37,108,61,139,131,17,227,129,220,95, 5,254,4,115,28,214,82,231,146,206,48,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_63 = 1180; -static unsigned char xml_res_file_63[] = { +static size_t xml_res_size_64 = 1180; +static unsigned char xml_res_file_64[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72,89, 115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77,76, @@ -56297,8 +57128,8 @@ static unsigned char xml_res_file_63[] = { 217,127,173,228,251,37,234,253,147,125,143,255,9,153,223,103,113,15,90, 232,80,89,218,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_64 = 1549; -static unsigned char xml_res_file_64[] = { +static size_t xml_res_size_65 = 1549; +static unsigned char xml_res_file_65[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,9,112,72,89, 115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,1,89,105,84,88,116,88,77,76, @@ -56375,8 +57206,8 @@ static unsigned char xml_res_file_64[] = { 142,52,254,141,231,139,12,216,149,91,113,61,194,27,165,255,11,16,223,197, 212,212,178,77,91,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_65 = 1673; -static unsigned char xml_res_file_65[] = { +static size_t xml_res_size_66 = 1673; +static unsigned char xml_res_file_66[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -56459,8 +57290,8 @@ static unsigned char xml_res_file_65[] = { 139,125,187,129,181,236,216,95,71,203,95,229,202,22,81,103,184,206,155, 0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_66 = 1664; -static unsigned char xml_res_file_66[] = { +static size_t xml_res_size_67 = 1664; +static unsigned char xml_res_file_67[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -56542,8 +57373,8 @@ static unsigned char xml_res_file_66[] = { 223,45,187,101,192,98,0,133,217,22,190,23,91,123,11,62,82,223,70,90,254, 2,66,37,8,30,168,225,208,235,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_67 = 1288; -static unsigned char xml_res_file_67[] = { +static size_t xml_res_size_68 = 1288; +static unsigned char xml_res_file_68[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -56607,8 +57438,8 @@ static unsigned char xml_res_file_67[] = { 81,201,31,218,113,181,3,164,164,117,90,42,109,254,1,127,251,96,172,92,235, 221,68,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_68 = 1272; -static unsigned char xml_res_file_68[] = { +static size_t xml_res_size_69 = 1272; +static unsigned char xml_res_file_69[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -56671,8 +57502,8 @@ static unsigned char xml_res_file_68[] = { 214,83,179,55,112,63,31,202,214,232,127,69,254,14,183,206,111,69,195,122, 49,187,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_69 = 2000; -static unsigned char xml_res_file_69[] = { +static size_t xml_res_size_70 = 2000; +static unsigned char xml_res_file_70[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -56770,8 +57601,8 @@ static unsigned char xml_res_file_69[] = { 48,241,28,230,217,196,11,255,251,15,105,219,159,125,192,137,46,186,0,0, 0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_70 = 1498; -static unsigned char xml_res_file_70[] = { +static size_t xml_res_size_71 = 1498; +static unsigned char xml_res_file_71[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,24,0,0,0,24,8,6,0,0, 0,224,119,61,248,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32, 99,72,82,77,0,0,122,38,0,0,128,132,0,0,250,0,0,0,128,232,0,0,117,48,0,0, @@ -56846,8 +57677,8 @@ static unsigned char xml_res_file_70[] = { 160,17,160,255,214,244,79,162,182,168,120,144,155,250,62,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_71 = 8008; -static unsigned char xml_res_file_71[] = { +static size_t xml_res_size_72 = 8008; +static unsigned char xml_res_file_72[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63, 62,10,60,114,101,115,111,117,114,99,101,62,10,32,32,60,111,98,106,101,99, @@ -57250,70 +58081,71 @@ void GdaInitXmlResource() XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$selstyle1.png"), xml_res_file_5, xml_res_size_5, wxT("image/png")); XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$selstyle2.png"), xml_res_file_6, xml_res_size_6, wxT("image/png")); XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$dragdrop.png"), xml_res_file_7, xml_res_size_7, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$dialogs.xrc"), xml_res_file_8, xml_res_size_8, wxT("text/xml")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$8px_help.png"), xml_res_file_9, xml_res_size_9, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$data_viewer_dialogs.xrc"), xml_res_file_10, xml_res_size_10, wxT("text/xml")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$menus.xrc"), xml_res_file_11, xml_res_size_11, wxT("text/xml")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_01.png"), xml_res_file_12, xml_res_size_12, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_02.png"), xml_res_file_13, xml_res_size_13, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_02.png"), xml_res_file_14, xml_res_size_14, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_03.png"), xml_res_file_15, xml_res_size_15, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_03.png"), xml_res_file_16, xml_res_size_16, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_04.png"), xml_res_file_17, xml_res_size_17, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_04.png"), xml_res_file_18, xml_res_size_18, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_41.png"), xml_res_file_19, xml_res_size_19, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_41.png"), xml_res_file_20, xml_res_size_20, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_05.png"), xml_res_file_21, xml_res_size_21, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_05.png"), xml_res_file_22, xml_res_size_22, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_09.png"), xml_res_file_23, xml_res_size_23, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_09.png"), xml_res_file_24, xml_res_size_24, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_10.png"), xml_res_file_25, xml_res_size_25, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_10.png"), xml_res_file_26, xml_res_size_26, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_11.png"), xml_res_file_27, xml_res_size_27, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_11.png"), xml_res_file_28, xml_res_size_28, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_12.png"), xml_res_file_29, xml_res_size_29, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_12.png"), xml_res_file_30, xml_res_size_30, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_13.png"), xml_res_file_31, xml_res_size_31, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_13.png"), xml_res_file_32, xml_res_size_32, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_14.png"), xml_res_file_33, xml_res_size_33, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_14.png"), xml_res_file_34, xml_res_size_34, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_15.png"), xml_res_file_35, xml_res_size_35, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_15.png"), xml_res_file_36, xml_res_size_36, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_16.png"), xml_res_file_37, xml_res_size_37, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_16.png"), xml_res_file_38, xml_res_size_38, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_17.png"), xml_res_file_39, xml_res_size_39, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_17.png"), xml_res_file_40, xml_res_size_40, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_18.png"), xml_res_file_41, xml_res_size_41, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_18.png"), xml_res_file_42, xml_res_size_42, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_19.png"), xml_res_file_43, xml_res_size_43, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_19.png"), xml_res_file_44, xml_res_size_44, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_20.png"), xml_res_file_45, xml_res_size_45, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_20.png"), xml_res_file_46, xml_res_size_46, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_38.png"), xml_res_file_47, xml_res_size_47, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_38.png"), xml_res_file_48, xml_res_size_48, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_21.png"), xml_res_file_49, xml_res_size_49, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_21.png"), xml_res_file_50, xml_res_size_50, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_22.png"), xml_res_file_51, xml_res_size_51, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_22.png"), xml_res_file_52, xml_res_size_52, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_23.png"), xml_res_file_53, xml_res_size_53, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_23.png"), xml_res_file_54, xml_res_size_54, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_25.png"), xml_res_file_55, xml_res_size_55, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_25.png"), xml_res_file_56, xml_res_size_56, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_26.png"), xml_res_file_57, xml_res_size_57, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_26.png"), xml_res_file_58, xml_res_size_58, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_27.png"), xml_res_file_59, xml_res_size_59, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_27.png"), xml_res_file_60, xml_res_size_60, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_28.png"), xml_res_file_61, xml_res_size_61, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_29.png"), xml_res_file_62, xml_res_size_62, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_39.png"), xml_res_file_63, xml_res_size_63, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_40.png"), xml_res_file_64, xml_res_size_64, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_30.png"), xml_res_file_65, xml_res_size_65, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_31.png"), xml_res_file_66, xml_res_size_66, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_32.png"), xml_res_file_67, xml_res_size_67, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_33.png"), xml_res_file_68, xml_res_size_68, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_34.png"), xml_res_file_69, xml_res_size_69, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_36.png"), xml_res_file_70, xml_res_size_70, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$toolbar.xrc"), xml_res_file_71, xml_res_size_71, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$open-crs.png"), xml_res_file_8, xml_res_size_8, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$dialogs.xrc"), xml_res_file_9, xml_res_size_9, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$8px_help.png"), xml_res_file_10, xml_res_size_10, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$data_viewer_dialogs.xrc"), xml_res_file_11, xml_res_size_11, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$menus.xrc"), xml_res_file_12, xml_res_size_12, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_01.png"), xml_res_file_13, xml_res_size_13, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_02.png"), xml_res_file_14, xml_res_size_14, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_02.png"), xml_res_file_15, xml_res_size_15, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_03.png"), xml_res_file_16, xml_res_size_16, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_03.png"), xml_res_file_17, xml_res_size_17, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_04.png"), xml_res_file_18, xml_res_size_18, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_04.png"), xml_res_file_19, xml_res_size_19, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_41.png"), xml_res_file_20, xml_res_size_20, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_41.png"), xml_res_file_21, xml_res_size_21, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_05.png"), xml_res_file_22, xml_res_size_22, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_05.png"), xml_res_file_23, xml_res_size_23, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_09.png"), xml_res_file_24, xml_res_size_24, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_09.png"), xml_res_file_25, xml_res_size_25, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_10.png"), xml_res_file_26, xml_res_size_26, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_10.png"), xml_res_file_27, xml_res_size_27, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_11.png"), xml_res_file_28, xml_res_size_28, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_11.png"), xml_res_file_29, xml_res_size_29, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_12.png"), xml_res_file_30, xml_res_size_30, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_12.png"), xml_res_file_31, xml_res_size_31, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_13.png"), xml_res_file_32, xml_res_size_32, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_13.png"), xml_res_file_33, xml_res_size_33, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_14.png"), xml_res_file_34, xml_res_size_34, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_14.png"), xml_res_file_35, xml_res_size_35, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_15.png"), xml_res_file_36, xml_res_size_36, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_15.png"), xml_res_file_37, xml_res_size_37, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_16.png"), xml_res_file_38, xml_res_size_38, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_16.png"), xml_res_file_39, xml_res_size_39, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_17.png"), xml_res_file_40, xml_res_size_40, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_17.png"), xml_res_file_41, xml_res_size_41, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_18.png"), xml_res_file_42, xml_res_size_42, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_18.png"), xml_res_file_43, xml_res_size_43, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_19.png"), xml_res_file_44, xml_res_size_44, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_19.png"), xml_res_file_45, xml_res_size_45, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_20.png"), xml_res_file_46, xml_res_size_46, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_20.png"), xml_res_file_47, xml_res_size_47, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_38.png"), xml_res_file_48, xml_res_size_48, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_38.png"), xml_res_file_49, xml_res_size_49, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_21.png"), xml_res_file_50, xml_res_size_50, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_21.png"), xml_res_file_51, xml_res_size_51, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_22.png"), xml_res_file_52, xml_res_size_52, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_22.png"), xml_res_file_53, xml_res_size_53, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_23.png"), xml_res_file_54, xml_res_size_54, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_23.png"), xml_res_file_55, xml_res_size_55, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_25.png"), xml_res_file_56, xml_res_size_56, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_25.png"), xml_res_file_57, xml_res_size_57, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_26.png"), xml_res_file_58, xml_res_size_58, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_26.png"), xml_res_file_59, xml_res_size_59, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_32x32_27.png"), xml_res_file_60, xml_res_size_60, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$gray_32x32_27.png"), xml_res_file_61, xml_res_size_61, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_28.png"), xml_res_file_62, xml_res_size_62, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_29.png"), xml_res_file_63, xml_res_size_63, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_39.png"), xml_res_file_64, xml_res_size_64, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_40.png"), xml_res_file_65, xml_res_size_65, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_30.png"), xml_res_file_66, xml_res_size_66, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_31.png"), xml_res_file_67, xml_res_size_67, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_32.png"), xml_res_file_68, xml_res_size_68, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_33.png"), xml_res_file_69, xml_res_size_69, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_34.png"), xml_res_file_70, xml_res_size_70, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$color_24x24_36.png"), xml_res_file_71, xml_res_size_71, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$toolbar.xrc"), xml_res_file_72, xml_res_size_72, wxT("text/xml")); wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$dialogs.xrc")); wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$data_viewer_dialogs.xrc")); wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$menus.xrc")); diff --git a/rc/data_viewer_dialogs.xrc b/rc/data_viewer_dialogs.xrc index 101867b0f..a0b0afdae 100644 --- a/rc/data_viewer_dialogs.xrc +++ b/rc/data_viewer_dialogs.xrc @@ -1643,7 +1643,7 @@ All Rights Reserved 2 - + 85,-1d wxALIGN_CENTRE_VERTICAL @@ -1835,6 +1835,213 @@ All Rights Reserved 1 + + + wxVERTICAL + + + + + + + + + + + wxALIGN_CENTRE_VERTICAL|wxRIGHT + 7 + + + + 85,-1d + + wxALIGN_CENTRE_VERTICAL + + wxHORIZONTAL + + wxALIGN_CENTRE_VERTICAL|wxALL + 10 + + + + + + + + + + wxALIGN_CENTRE_VERTICAL + 0 + + wxHORIZONTAL + + wxEXPAND|wxALL + 8 + + + + + + + + wxVERTICAL + + + 90,87d + + + + wxEXPAND + + + + wxEXPAND + + + + + + 30,-1d + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + 30,-1d + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + 30,-1d + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + 30,-1d + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + wxVERTICAL + + wxALIGN_CENTRE_VERTICAL + + + + wxVERTICAL + + + 90,87d + + + + wxEXPAND + + + + wxEXPAND + + wxHORIZONTAL + + + wxALL|wxEXPAND + 5 + + wxVERTICAL + + + wxEXPAND|wxALIGN_CENTRE_HORIZONTAL + 8 + + + + + + + + wxALIGN_CENTRE_VERTICAL + 0 + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + wxHORIZONTAL + + wxEXPAND|wxALIGN_CENTRE_HORIZONTAL|wxALL + 8 + + + wxVERTICAL + + wxEXPAND|wxALL + 7 + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + wxHORIZONTAL + + + + + wxBOTTOM|wxLEFT|wxRIGHT + 5 + + + + + + wxBOTTOM|wxLEFT|wxRIGHT + 5 + + + + wxVERTICAL + + + wxEXPAND|wxALL + + 7 + + + Dissolve + 1 + + wxVERTICAL @@ -1894,7 +2101,7 @@ All Rights Reserved 7 - + 85,-1d wxALIGN_CENTRE_VERTICAL @@ -1924,7 +2131,7 @@ All Rights Reserved wxVERTICAL - + 90,87d @@ -1977,7 +2184,7 @@ All Rights Reserved wxVERTICAL - + 90,87d diff --git a/rc/dialogs.xrc b/rc/dialogs.xrc index 3bdaed816..32dc92741 100644 --- a/rc/dialogs.xrc +++ b/rc/dialogs.xrc @@ -810,19 +810,33 @@ + + 5,2d + - 10,2d + 5,2d + + 5,2d + + + + + + + + 5,2d + wxHORIZONTAL wxTOP|wxBOTTOM|wxALIGN_CENTER @@ -849,7 +863,7 @@ 1 - + @@ -868,7 +882,7 @@ 5,-1d - + 60,-1d @@ -882,6 +896,16 @@ -1,5d + + + + 1 + + wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL + + + -1,5d + @@ -1023,7 +1047,6 @@ wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 - wxALL 10 @@ -3579,7 +3602,7 @@ wxALIGN_LEFT|wxALL 2 - + @@ -4400,8 +4423,8 @@ - @@ -8980,6 +9003,33 @@ wxALL|wxEXPAND 5 + + + wxHORIZONTAL + + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + + + + 200,-1d + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + + + + open-crs.png + + Load CRS from a data source + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + + + wxALIGN_LEFT|wxLEFT + 15 + wxHORIZONTAL @@ -8998,7 +9048,8 @@ - wxALIGN_CENTRE_HORIZONTAL + wxALIGN_CENTER_HORIZONTAL|wxTOP + 5 diff --git a/rc/menus.xrc b/rc/menus.xrc index be13c885a..fb7917c3a 100644 --- a/rc/menus.xrc +++ b/rc/menus.xrc @@ -32,6 +32,7 @@ + @@ -70,6 +71,9 @@ + + + @@ -110,14 +114,6 @@ - @@ -223,7 +219,6 @@ 1 - @@ -338,6 +333,10 @@ + + + 0 + @@ -500,7 +499,7 @@ - + @@ -542,6 +541,9 @@ + + + @@ -579,6 +581,9 @@ + + + @@ -644,7 +649,6 @@ 1 - @@ -677,7 +681,6 @@ 1 - @@ -793,7 +796,6 @@ 1 - @@ -833,6 +835,10 @@ 1 + + + 0 + @@ -847,7 +853,6 @@ 1 - @@ -1038,12 +1043,10 @@ 1 - 1 - 1 @@ -1052,7 +1055,6 @@ 1 - 1 @@ -1061,7 +1063,6 @@ 1 - @@ -1101,7 +1102,6 @@ 1 - @@ -1153,6 +1153,12 @@ + + + + + + @@ -1168,6 +1174,10 @@ 1 + + + 1 + @@ -1191,7 +1201,6 @@ 1 - @@ -1529,6 +1538,9 @@ + + + @@ -1576,9 +1588,7 @@ - - @@ -1596,7 +1606,6 @@ 1 - @@ -1636,7 +1645,6 @@ 1 - 1 @@ -1657,7 +1665,6 @@ 1 - @@ -1697,7 +1704,6 @@ 1 - @@ -1751,7 +1757,6 @@ 1 - @@ -1791,7 +1796,6 @@ 1 - 1 @@ -1804,7 +1808,6 @@ 1 - 1 @@ -1813,7 +1816,6 @@ 1 - @@ -1853,7 +1855,6 @@ 1 - @@ -1907,6 +1908,9 @@ + + + @@ -2155,7 +2159,6 @@ 1 - @@ -2173,6 +2176,9 @@ + + + @@ -2757,6 +2763,146 @@ + + + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + 1 + 0 + + + + + 1 + + + + 1 + + + + + + + 1 + 0 + + + + 0 + + + + 0 + + + + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + 1 + 1 + + + + 1 + 0 + + + + + + + + + + + 1 + 1 + + + + + + + + + + + + + + @@ -3088,6 +3234,12 @@ + + + + + + 1 @@ -3180,8 +3332,11 @@ + + + - + 1 @@ -3342,6 +3497,10 @@ 1 + + + 0 + @@ -3484,6 +3643,12 @@ 1 + @@ -3703,7 +3868,6 @@ - 1 @@ -3715,8 +3879,10 @@ - - + + + + 1 @@ -3727,9 +3893,7 @@ 1 1 - - @@ -3787,48 +3951,6 @@ - - - @@ -3919,16 +4041,25 @@ 0 - - - 1 - 0 - - - - 1 - 1 - + + + + + + + + + + + 1 + 0 + + + + 1 + 1 + + 0 @@ -4031,6 +4162,9 @@ + + + @@ -4442,7 +4576,6 @@ - @@ -4455,40 +4588,6 @@ - - - @@ -4594,7 +4693,6 @@ 1 - @@ -4789,7 +4887,7 @@ - + @@ -4813,6 +4911,9 @@ + + + @@ -4830,7 +4931,7 @@ - + @@ -4946,6 +5047,10 @@ + + + 0 + @@ -5086,6 +5191,10 @@ + + + 0 + diff --git a/rc/open-crs.png b/rc/open-crs.png new file mode 100644 index 000000000..3cfd2eedd Binary files /dev/null and b/rc/open-crs.png differ diff --git a/version.h b/version.h index b427dc763..7f2760818 100644 --- a/version.h +++ b/version.h @@ -2,10 +2,10 @@ namespace Gda { const int version_major = 1; const int version_minor = 12; const int version_build = 1; - const int version_subbuild = 201; + const int version_subbuild = 237; const int version_year = 2019; - const int version_month = 2; - const int version_day = 20; + const int version_month = 5; + const int version_day = 16; const int version_night = 0; const int version_type = 2; // 0: alpha, 1: beta, 2: release }