diff --git a/Bin/mkComFWDlgs-tst.bat b/Bin/mkComFWDlgs-tst.bat index 5f26ab7573..c200de1f76 100755 --- a/Bin/mkComFWDlgs-tst.bat +++ b/Bin/mkComFWDlgs-tst.bat @@ -8,9 +8,6 @@ if "%BUILD_ONLY_NOTEST%"=="DONTRUN" shift set BUILD_MAKEFILE=%BUILD_ROOT%\src\CommonCOMDlgs\Test\testCmnFWDlgs.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkComFWDlgs.bat b/Bin/mkComFWDlgs.bat index 10d89791dc..57b22bcf0c 100755 --- a/Bin/mkComFWDlgs.bat +++ b/Bin/mkComFWDlgs.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Src\CommonCOMDlgs\CmnFwDlgs.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkGenLib-tst.bat b/Bin/mkGenLib-tst.bat index 466afae44e..b0e73d2658 100755 --- a/Bin/mkGenLib-tst.bat +++ b/Bin/mkGenLib-tst.bat @@ -8,9 +8,6 @@ if "%BUILD_ONLY_NOTEST%"=="DONTRUN" shift set BUILD_MAKEFILE=%BUILD_ROOT%\src\Generic\Test\testGenericLib.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkall.bat b/Bin/mkall.bat deleted file mode 100755 index 7ac0d9cc2a..0000000000 --- a/Bin/mkall.bat +++ /dev/null @@ -1,58 +0,0 @@ -@if "%_echo%"=="" echo off - -time /T - -if not "%OS%"=="" setlocal - -rem ***** Set FWROOT and BUILD_ROOT to the root of the FieldWorks project. ***** -call %0\..\_EnsureRoot.bat - -goto CHECK_OPTIONS - -:SET_OPTION -set %OPTION%=%OPTION_VALUE% -shift - -:CHECK_OPTIONS - -set OPTION=BUILD_TYPE -set OPTION_VALUE=%1 -if "%1"=="d" goto SET_OPTION -if "%1"=="r" goto SET_OPTION -if "%1"=="p" goto SET_OPTION -if "%1"=="b" goto SET_OPTION - -set OPTION=BUILD_ACTION -set OPTION_VALUE=%1 -if "%1"=="e" goto SET_OPTION -if "%1"=="c" goto SET_OPTION -if "%1"=="i" goto SET_OPTION -if "%1"=="cc" goto SET_OPTION -if "%1"=="ec" goto SET_OPTION - -set OPTION=BUILD_EXTRA -set OPTION_VALUE=%1 -if "%1"=="register" goto SET_OPTION -if "%1"=="unregister" goto SET_OPTION - -rem === Set up === -if "%BUILD_TYPE%"=="" set BUILD_TYPE=d -if "%BUILD_ACTION%"=="" set BUILD_ACTION=i - -if "%BUILD_TYPE%"=="b" set BUILD_CONFIG=bounds -if "%BUILD_TYPE%"=="d" set BUILD_CONFIG=debug -if "%BUILD_TYPE%"=="r" set BUILD_CONFIG=release -if "%BUILD_TYPE%"=="p" set BUILD_CONFIG=profile - -set ACTION=buildtest -if "%BUILD_ACTION%"=="c" set ACTION=buildtest cc -if "%BUILD_ACTION%"=="cc" set ACTION=buildtest cc -if "%BUILD_ACTION%"=="e" set ACTION=clean -if "%BUILD_ACTION%"=="ec" set ACTION=clean - -if "%BUILD_EXTRA%"=="register" set ACTION=%ACTION% register -if "%BUILD_EXTRA%"=="unregister" set ACTION=%ACTION% unregister - -cd %FWROOT%\Bld - -%FWROOT%\bin\nant\bin\nant %BUILD_CONFIG% %ACTION% mkall diff --git a/Bin/mkallbld.bat b/Bin/mkallbld.bat deleted file mode 100755 index de99e36f2d..0000000000 --- a/Bin/mkallbld.bat +++ /dev/null @@ -1,4 +0,0 @@ -rem This returns the environment error flag as an errorlevel for java script calls -rem We can't do this in mkall.bat because it exits rebuildall.bat -call c:\fwsrc\bin\mkall.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 -exit %FW_BUILD_ERROR% diff --git a/Bin/mkfwk-tst.bat b/Bin/mkfwk-tst.bat index d2f1a5a18d..ed194b0ce6 100755 --- a/Bin/mkfwk-tst.bat +++ b/Bin/mkfwk-tst.bat @@ -8,9 +8,6 @@ if "%BUILD_ONLY_NOTEST%"=="DONTRUN" shift set BUILD_MAKEFILE=%BUILD_ROOT%\src\Kernel\Test\testFwKernel.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkfwk.bat b/Bin/mkfwk.bat index 826dcb4b68..bf53931f37 100755 --- a/Bin/mkfwk.bat +++ b/Bin/mkfwk.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\src\Kernel\FwKernel.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkgrc.bat b/Bin/mkgrc.bat index f4f2323da3..5569c8dc59 100755 --- a/Bin/mkgrc.bat +++ b/Bin/mkgrc.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\src\Graphite\GrCompiler\GrCompiler.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkgre.bat b/Bin/mkgre.bat index 7efcf2674a..3aec4ce0e2 100755 --- a/Bin/mkgre.bat +++ b/Bin/mkgre.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\src\Graphite\GrEngine\GrEngine.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkhv.bat b/Bin/mkhv.bat index 717875d4da..dcf7686c0d 100755 --- a/Bin/mkhv.bat +++ b/Bin/mkhv.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Samples\HelloWorld\HelloView\HelloView.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkhw.bat b/Bin/mkhw.bat index 1135de1b94..60cbfef063 100755 --- a/Bin/mkhw.bat +++ b/Bin/mkhw.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Samples\HelloWorld\Simple\HelloWorld.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkhwt.bat b/Bin/mkhwt.bat index b4fa6fc0b6..571341b5ec 100755 --- a/Bin/mkhwt.bat +++ b/Bin/mkhwt.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Samples\HelloWorld\Toolbar\HelloWorld.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkhwv.bat b/Bin/mkhwv.bat index 56ddda6847..65aaeaaa2d 100755 --- a/Bin/mkhwv.bat +++ b/Bin/mkhwv.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Samples\HelloWorld\Viewbar\HelloWorld.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkhwx.bat b/Bin/mkhwx.bat index de47208518..62552edef0 100755 --- a/Bin/mkhwx.bat +++ b/Bin/mkhwx.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Samples\HelloWorld\ActiveX\HelloWorld.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mklg-tst.bat b/Bin/mklg-tst.bat index 6df51ed3ca..864d7b4cd8 100755 --- a/Bin/mklg-tst.bat +++ b/Bin/mklg-tst.bat @@ -8,9 +8,6 @@ if "%BUILD_ONLY_NOTEST%"=="DONTRUN" shift set BUILD_MAKEFILE=%BUILD_ROOT%\src\Language\Test\testLanguage.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mklg.bat b/Bin/mklg.bat index a96bbc1f65..da2b24375f 100755 --- a/Bin/mklg.bat +++ b/Bin/mklg.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Src\Language\Language.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mksql-tst.bat b/Bin/mksql-tst.bat deleted file mode 100755 index 04a9491df9..0000000000 --- a/Bin/mksql-tst.bat +++ /dev/null @@ -1,20 +0,0 @@ -@if "%_echo%"=="" echo off - -time /T - -rem ***** Set BUILD_ROOT to the root of the FieldWorks project. ***** -call %0\..\_EnsureRoot.bat - -echo ===================================================================== -echo Running %BUILD_ROOT%\Test\Python23\python fw_sqlunit.py ... -echo ===================================================================== -pushd %BUILD_ROOT%\Test\tsqlunit -%BUILD_ROOT%\Test\Python23\python fw_sqlunit.py - -set save_errorlevel=%errorlevel% -rem python sets the errorlevel environment variable -popd - -time /T - -exit /b %save_errorlevel% diff --git a/Bin/mksql.bat b/Bin/mksql.bat deleted file mode 100755 index 473111bb7b..0000000000 --- a/Bin/mksql.bat +++ /dev/null @@ -1,12 +0,0 @@ -@if "%_echo%"=="" echo off -if "%FW_BUILD_CORE_ERROR%"=="1" goto done - -rem ***** Set BUILD_ROOT to the root of the FieldWorks project. ***** -call %0\..\_EnsureRoot.bat - -set BUILD_MAKEFILE=%BUILD_ROOT%\Src\Sql.mak - -call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 - -set BUILD_MAKEFILE= -:done diff --git a/Bin/mktlbs.bat b/Bin/mktlbs.bat index 66368afacf..47915a1332 100755 --- a/Bin/mktlbs.bat +++ b/Bin/mktlbs.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Src\Language\Language.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat dirs %BUILD_OUTPUT%\Common\LanguageTlb.tlb set BUILD_MAKEFILE=%BUILD_ROOT%\Src\Kernel\FwKernel.mak diff --git a/Bin/mktv.bat b/Bin/mktv.bat index 4c96fc49f5..a44dcfb4e8 100755 --- a/Bin/mktv.bat +++ b/Bin/mktv.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\test\testviewer\testviewer.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkvw-tst.bat b/Bin/mkvw-tst.bat index c60a81ea79..d544dc0999 100755 --- a/Bin/mkvw-tst.bat +++ b/Bin/mkvw-tst.bat @@ -8,9 +8,6 @@ if "%BUILD_ONLY_NOTEST%"=="DONTRUN" shift set BUILD_MAKEFILE=%BUILD_ROOT%\src\Views\Test\testViews.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkvw.bat b/Bin/mkvw.bat index d1617e5179..22cf235a50 100755 --- a/Bin/mkvw.bat +++ b/Bin/mkvw.bat @@ -5,9 +5,6 @@ call %0\..\_EnsureRoot.bat set BUILD_MAKEFILE=%BUILD_ROOT%\Src\Views\Views.mak -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 set BUILD_MAKEFILE= diff --git a/Bin/mkwfiutil.bat b/Bin/mkwfiutil.bat deleted file mode 100755 index 41e854bd05..0000000000 --- a/Bin/mkwfiutil.bat +++ /dev/null @@ -1,13 +0,0 @@ -@if "%_echo%"=="" echo off - -rem ***** Set BUILD_ROOT to the root of the FieldWorks project. ***** -call %0\..\_EnsureRoot.bat - -set BUILD_MAKEFILE=%BUILD_ROOT%\src\WW-WFIUtil\WFIUtil.mak - -rem ***** Create the version include file ***** -%BUILD_ROOT%\bin\nant\bin\nant.exe -buildfile:"%BUILD_ROOT%\bld\Version.build.xml" -D:BUILD_ROOT="%BUILD_ROOT%" -D:BUILD_LEVEL=%BUILD_LEVEL% - -call %BUILD_ROOT%\bld\_mkcore.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 - -set BUILD_MAKEFILE= diff --git a/Bld/_init.mak b/Bld/_init.mak index cc9f6bb371..abdcb09c59 100644 --- a/Bld/_init.mak +++ b/Bld/_init.mak @@ -120,7 +120,7 @@ COPYFILE=copy DELETEFILE=del TYPEFILE=type MD=$(BUILD_ROOT)\bin\mkdir.exe -p -DELNODE=$(BUILD_ROOT)\bin\delnode.exe +DELNODE=rmdir /s /q FIXCOMHEADER=$(BUILD_ROOT)\bin\FixGenComHeaderFile.exe # next 4 are for .NET diff --git a/Build/Agent/dependencies.config b/Build/Agent/dependencies.config index ef8bec80b8..22c27e47c4 100644 --- a/Build/Agent/dependencies.config +++ b/Build/Agent/dependencies.config @@ -20,7 +20,7 @@ # any=@precise.any [common] -any=build-essential automake uuid-dev libenchant-dev xutils-dev libboost-dev libboost-test-dev graphicsmagick-libmagick-dev-compat libxklavier-dev libgraphite-dev libgtkmm-2.4-dev mono-gmcs mono-devel gtk-sharp2 git-gui openjdk-6-jre unzip gawk tofrodos ttf-mscorefonts-installer ttf-sil-charis xvfb xserver-xephyr metacity ibus bison mono-devel libgif-dev libjpeg-dev libexif-dev libhunspell-dev libtool xulrunner-geckofx geckofx +any=build-essential automake uuid-dev libenchant-dev xutils-dev libboost-dev libboost-test-dev graphicsmagick-libmagick-dev-compat libxklavier-dev libgraphite-dev libgtkmm-2.4-dev mono-gmcs mono-devel gtk-sharp2 git-gui openjdk-6-jre unzip gawk tofrodos ttf-mscorefonts-installer ttf-sil-charis xvfb xserver-xephyr metacity ibus bison mono-devel libgif-dev libjpeg-dev libexif-dev libhunspell-dev libtool xulrunner-geckofx geckofx wget [precise] any=libtiff4-dev diff --git a/Build/Linux.targets b/Build/Linux.targets index f12cd7937e..568f025ffb 100644 --- a/Build/Linux.targets +++ b/Build/Linux.targets @@ -76,6 +76,14 @@ + + + + + diff --git a/Build/RegFree.targets b/Build/RegFree.targets index ae43830879..88ee3c37c1 100644 --- a/Build/RegFree.targets +++ b/Build/RegFree.targets @@ -15,9 +15,13 @@ - + + + + + diff --git a/Build/mkall.targets b/Build/mkall.targets index 8d62cd99c2..541fdb16a8 100644 --- a/Build/mkall.targets +++ b/Build/mkall.targets @@ -207,7 +207,7 @@ - + + + + + + + + + + + - + @@ -403,47 +414,51 @@ SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true"/> - - + + + http://build.palaso.org/guestAuth/repository/download/bt228/.lastSuccessful + + http://build.palaso.org/guestAuth/repository/download/bt267/.lastSuccessful + + https://jenkins.lsdev.sil.org/userContent/artifacts/Palaso-Win-any-KeyboardingV2-debug/lastSuccessful + https://jenkins.lsdev.sil.org/userContent/artifacts/Palaso-Linux-any-KeyboardingV2-debug/lastSuccessful + + http://build.palaso.org/guestAuth/repository/download/bt278/.lastSuccessful + http://build.palaso.org/guestAuth/repository/download/bt279/.lastSuccessful + mdb + pdb + + + - - - - - - - - - - - - - - - + + + + + + + - - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Lib/linux/Common/FwKernelTlb.h b/Lib/linux/Common/FwKernelTlb.h index 7c69c85e67..44bf793ce4 100644 --- a/Lib/linux/Common/FwKernelTlb.h +++ b/Lib/linux/Common/FwKernelTlb.h @@ -4,7 +4,7 @@ /* File created by MIDL compiler version 7.00.0555 */ -/* at Tue Jul 23 10:57:51 2013 +/* at Tue Sep 10 15:51:54 2013 */ /* Compiler settings for C:\fwrepo\fw\Output\Common\FwKernelTlb.idl: Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 @@ -233,12 +233,6 @@ typedef struct TsMultiString TsMultiString; #endif /* __TsMultiString_FWD_DEFINED__ */ -#ifndef __ILgInputMethodEditor_FWD_DEFINED__ -#define __ILgInputMethodEditor_FWD_DEFINED__ -typedef interface ILgInputMethodEditor ILgInputMethodEditor; -#endif /* __ILgInputMethodEditor_FWD_DEFINED__ */ - - #ifndef __IVwGraphics_FWD_DEFINED__ #define __IVwGraphics_FWD_DEFINED__ typedef interface IVwGraphics IVwGraphics; @@ -413,42 +407,6 @@ typedef interface ILgWritingSystem ILgWritingSystem; #endif /* __ILgWritingSystem_FWD_DEFINED__ */ -#ifndef __ILgTextServices_FWD_DEFINED__ -#define __ILgTextServices_FWD_DEFINED__ -typedef interface ILgTextServices ILgTextServices; -#endif /* __ILgTextServices_FWD_DEFINED__ */ - - -#ifndef __ILgFontManager_FWD_DEFINED__ -#define __ILgFontManager_FWD_DEFINED__ -typedef interface ILgFontManager ILgFontManager; -#endif /* __ILgFontManager_FWD_DEFINED__ */ - - -#ifndef __LgInputMethodEditor_FWD_DEFINED__ -#define __LgInputMethodEditor_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgInputMethodEditor LgInputMethodEditor; -#else -typedef struct LgInputMethodEditor LgInputMethodEditor; -#endif /* __cplusplus */ - -#endif /* __LgInputMethodEditor_FWD_DEFINED__ */ - - -#ifndef __LgFontManager_FWD_DEFINED__ -#define __LgFontManager_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgFontManager LgFontManager; -#else -typedef struct LgFontManager LgFontManager; -#endif /* __cplusplus */ - -#endif /* __LgFontManager_FWD_DEFINED__ */ - - #ifndef __ILgIcuCharPropEngine_FWD_DEFINED__ #define __ILgIcuCharPropEngine_FWD_DEFINED__ typedef interface ILgIcuCharPropEngine ILgIcuCharPropEngine; @@ -467,18 +425,6 @@ typedef interface ILgKeymanHandler ILgKeymanHandler; #endif /* __ILgKeymanHandler_FWD_DEFINED__ */ -#ifndef __ILgCodePageEnumerator_FWD_DEFINED__ -#define __ILgCodePageEnumerator_FWD_DEFINED__ -typedef interface ILgCodePageEnumerator ILgCodePageEnumerator; -#endif /* __ILgCodePageEnumerator_FWD_DEFINED__ */ - - -#ifndef __ILgLanguageEnumerator_FWD_DEFINED__ -#define __ILgLanguageEnumerator_FWD_DEFINED__ -typedef interface ILgLanguageEnumerator ILgLanguageEnumerator; -#endif /* __ILgLanguageEnumerator_FWD_DEFINED__ */ - - #ifndef __ILgIcuConverterEnumerator_FWD_DEFINED__ #define __ILgIcuConverterEnumerator_FWD_DEFINED__ typedef interface ILgIcuConverterEnumerator ILgIcuConverterEnumerator; @@ -617,42 +563,6 @@ typedef struct LgKeymanHandler LgKeymanHandler; #endif /* __LgKeymanHandler_FWD_DEFINED__ */ -#ifndef __LgTextServices_FWD_DEFINED__ -#define __LgTextServices_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgTextServices LgTextServices; -#else -typedef struct LgTextServices LgTextServices; -#endif /* __cplusplus */ - -#endif /* __LgTextServices_FWD_DEFINED__ */ - - -#ifndef __LgCodePageEnumerator_FWD_DEFINED__ -#define __LgCodePageEnumerator_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgCodePageEnumerator LgCodePageEnumerator; -#else -typedef struct LgCodePageEnumerator LgCodePageEnumerator; -#endif /* __cplusplus */ - -#endif /* __LgCodePageEnumerator_FWD_DEFINED__ */ - - -#ifndef __LgLanguageEnumerator_FWD_DEFINED__ -#define __LgLanguageEnumerator_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgLanguageEnumerator LgLanguageEnumerator; -#else -typedef struct LgLanguageEnumerator LgLanguageEnumerator; -#endif /* __cplusplus */ - -#endif /* __LgLanguageEnumerator_FWD_DEFINED__ */ - - #ifndef __LgIcuConverterEnumerator_FWD_DEFINED__ #define __LgIcuConverterEnumerator_FWD_DEFINED__ @@ -1372,7 +1282,6 @@ FwGraphiteProcess - typedef /* [v1_enum] */ enum LgGeneralCharCategory { kccLu = 0, @@ -1498,26 +1407,6 @@ ILgWritingSystem , 9F74A170-E8BB-466d-8848-5FDB28AC5AF8 ); -GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgInputMethodEditor -, -E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgFontManager -, -73718689-B701-4241-A408-4C389ECD6664 -); -ATTACH_GUID_TO_CLASS(class, -659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9 -, -LgInputMethodEditor -); -ATTACH_GUID_TO_CLASS(class, -02C3F580-796D-4B5F-BE43-166D97319DA5 -, -LgFontManager -); typedef /* [v1_enum] */ enum LgCollatingOptions { fcoDefault = 0, @@ -1621,21 +1510,6 @@ ILgKeymanHandler 3F42144B-509F-4def-8DD3-6D8D26677001 ); GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgTextServices -, -5B6303DE-E635-4DD7-A7FC-345BEEF352D8 -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgCodePageEnumerator -, -2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgLanguageEnumerator -, -746A16E1-0C36-4268-A261-E8012B0D67C5 -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( ILgIcuConverterEnumerator , 8E6D558E-8755-4EA1-9FF6-039D375312E9 @@ -1706,21 +1580,6 @@ ATTACH_GUID_TO_CLASS(class, LgKeymanHandler ); ATTACH_GUID_TO_CLASS(class, -720485C5-E8D5-4761-92F0-F70D2B3CF980 -, -LgTextServices -); -ATTACH_GUID_TO_CLASS(class, -9045F113-8626-41C0-A61E-A73FBE5920D1 -, -LgCodePageEnumerator -); -ATTACH_GUID_TO_CLASS(class, -B887505B-74DE-4ADC-A1D9-5553428C8D02 -, -LgLanguageEnumerator -); -ATTACH_GUID_TO_CLASS(class, 9E729461-F80D-4796-BA17-086BC61907F1 , LgIcuConverterEnumerator @@ -5413,165 +5272,6 @@ class DECLSPEC_UUID("7A1B89C0-C2D6-11d3-9BB7-00400541F9E9") TsMultiString; #endif -#ifndef __ILgInputMethodEditor_INTERFACE_DEFINED__ -#define __ILgInputMethodEditor_INTERFACE_DEFINED__ - -/* interface ILgInputMethodEditor */ -/* [unique][object][uuid] */ - - -#define IID_ILgInputMethodEditor __uuidof(ILgInputMethodEditor) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC") - ILgInputMethodEditor : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Setup( void) = 0; - - virtual /* [restricted][local] */ HRESULT STDMETHODCALLTYPE Replace( - /* [in] */ BSTR bstrInput, - /* [in] */ ITsTextProps *pttpInput, - /* [in] */ ITsStrBldr *ptsbOld, - /* [in] */ int ichMin, - /* [in] */ int ichLim, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP) = 0; - - virtual HRESULT STDMETHODCALLTYPE Backspace( - /* [in] */ int pichStart, - /* [in] */ int cactBackspace, - /* [in] */ ITsStrBldr *ptsbOld, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP, - /* [out] */ int *pcactBsRemaining) = 0; - - virtual HRESULT STDMETHODCALLTYPE DeleteForward( - /* [in] */ int pichStart, - /* [in] */ int cactDelForward, - /* [in] */ ITsStrBldr *ptsbInOut, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP, - /* [out] */ int *pcactDfRemaining) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsValidInsertionPoint( - /* [in] */ int ich, - /* [in] */ ITsString *ptss, - /* [retval][out] */ BOOL *pfValid) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgInputMethodEditorVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgInputMethodEditor * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgInputMethodEditor * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgInputMethodEditor * This); - - HRESULT ( STDMETHODCALLTYPE *Setup )( - ILgInputMethodEditor * This); - - /* [restricted][local] */ HRESULT ( STDMETHODCALLTYPE *Replace )( - ILgInputMethodEditor * This, - /* [in] */ BSTR bstrInput, - /* [in] */ ITsTextProps *pttpInput, - /* [in] */ ITsStrBldr *ptsbOld, - /* [in] */ int ichMin, - /* [in] */ int ichLim, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP); - - HRESULT ( STDMETHODCALLTYPE *Backspace )( - ILgInputMethodEditor * This, - /* [in] */ int pichStart, - /* [in] */ int cactBackspace, - /* [in] */ ITsStrBldr *ptsbOld, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP, - /* [out] */ int *pcactBsRemaining); - - HRESULT ( STDMETHODCALLTYPE *DeleteForward )( - ILgInputMethodEditor * This, - /* [in] */ int pichStart, - /* [in] */ int cactDelForward, - /* [in] */ ITsStrBldr *ptsbInOut, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP, - /* [out] */ int *pcactDfRemaining); - - HRESULT ( STDMETHODCALLTYPE *IsValidInsertionPoint )( - ILgInputMethodEditor * This, - /* [in] */ int ich, - /* [in] */ ITsString *ptss, - /* [retval][out] */ BOOL *pfValid); - - END_INTERFACE - } ILgInputMethodEditorVtbl; - - interface ILgInputMethodEditor - { - CONST_VTBL struct ILgInputMethodEditorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgInputMethodEditor_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgInputMethodEditor_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgInputMethodEditor_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgInputMethodEditor_Setup(This) \ - ( (This)->lpVtbl -> Setup(This) ) - -#define ILgInputMethodEditor_Replace(This,bstrInput,pttpInput,ptsbOld,ichMin,ichLim,pichModMin,pichModLim,pichIP) \ - ( (This)->lpVtbl -> Replace(This,bstrInput,pttpInput,ptsbOld,ichMin,ichLim,pichModMin,pichModLim,pichIP) ) - -#define ILgInputMethodEditor_Backspace(This,pichStart,cactBackspace,ptsbOld,pichModMin,pichModLim,pichIP,pcactBsRemaining) \ - ( (This)->lpVtbl -> Backspace(This,pichStart,cactBackspace,ptsbOld,pichModMin,pichModLim,pichIP,pcactBsRemaining) ) - -#define ILgInputMethodEditor_DeleteForward(This,pichStart,cactDelForward,ptsbInOut,pichModMin,pichModLim,pichIP,pcactDfRemaining) \ - ( (This)->lpVtbl -> DeleteForward(This,pichStart,cactDelForward,ptsbInOut,pichModMin,pichModLim,pichIP,pcactDfRemaining) ) - -#define ILgInputMethodEditor_IsValidInsertionPoint(This,ich,ptss,pfValid) \ - ( (This)->lpVtbl -> IsValidInsertionPoint(This,ich,ptss,pfValid) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgInputMethodEditor_INTERFACE_DEFINED__ */ - - #ifndef __IVwGraphics_INTERFACE_DEFINED__ #define __IVwGraphics_INTERFACE_DEFINED__ @@ -9747,12 +9447,6 @@ FwGraphiteProcess; virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ISO3( /* [retval][out] */ BSTR *pbstr) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_LCID( - /* [retval][out] */ int *pnLocale) = 0; - - virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_LCID( - /* [in] */ int nLocale) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SpellCheckingId( /* [retval][out] */ BSTR *pbstr) = 0; @@ -9835,14 +9529,6 @@ FwGraphiteProcess; ILgWritingSystem * This, /* [retval][out] */ BSTR *pbstr); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_LCID )( - ILgWritingSystem * This, - /* [retval][out] */ int *pnLocale); - - /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_LCID )( - ILgWritingSystem * This, - /* [in] */ int nLocale); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SpellCheckingId )( ILgWritingSystem * This, /* [retval][out] */ BSTR *pbstr); @@ -9939,12 +9625,6 @@ FwGraphiteProcess; #define ILgWritingSystem_get_ISO3(This,pbstr) \ ( (This)->lpVtbl -> get_ISO3(This,pbstr) ) -#define ILgWritingSystem_get_LCID(This,pnLocale) \ - ( (This)->lpVtbl -> get_LCID(This,pnLocale) ) - -#define ILgWritingSystem_put_LCID(This,nLocale) \ - ( (This)->lpVtbl -> put_LCID(This,nLocale) ) - #define ILgWritingSystem_get_SpellCheckingId(This,pbstr) \ ( (This)->lpVtbl -> get_SpellCheckingId(This,pbstr) ) @@ -10001,222 +9681,6 @@ FwGraphiteProcess; #endif /* __ILgWritingSystem_INTERFACE_DEFINED__ */ -#ifndef __ILgTextServices_INTERFACE_DEFINED__ -#define __ILgTextServices_INTERFACE_DEFINED__ - -/* interface ILgTextServices */ -/* [unique][object][uuid] */ - - -#define IID_ILgTextServices __uuidof(ILgTextServices) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5B6303DE-E635-4DD7-A7FC-345BEEF352D8") - ILgTextServices : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetKeyboard( - /* [in] */ int nLcid, - /* [in] */ BSTR bstrKeymanKbd, - /* [out][in] */ int *pnActiveLangId, - /* [out][in] */ BSTR *pbstrActiveKeymanKbd, - /* [out][in] */ ComBool *pfSelectLangPending) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgTextServicesVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgTextServices * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgTextServices * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgTextServices * This); - - HRESULT ( STDMETHODCALLTYPE *SetKeyboard )( - ILgTextServices * This, - /* [in] */ int nLcid, - /* [in] */ BSTR bstrKeymanKbd, - /* [out][in] */ int *pnActiveLangId, - /* [out][in] */ BSTR *pbstrActiveKeymanKbd, - /* [out][in] */ ComBool *pfSelectLangPending); - - END_INTERFACE - } ILgTextServicesVtbl; - - interface ILgTextServices - { - CONST_VTBL struct ILgTextServicesVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgTextServices_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgTextServices_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgTextServices_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgTextServices_SetKeyboard(This,nLcid,bstrKeymanKbd,pnActiveLangId,pbstrActiveKeymanKbd,pfSelectLangPending) \ - ( (This)->lpVtbl -> SetKeyboard(This,nLcid,bstrKeymanKbd,pnActiveLangId,pbstrActiveKeymanKbd,pfSelectLangPending) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgTextServices_INTERFACE_DEFINED__ */ - - -#ifndef __ILgFontManager_INTERFACE_DEFINED__ -#define __ILgFontManager_INTERFACE_DEFINED__ - -/* interface ILgFontManager */ -/* [unique][object][uuid] */ - - -#define IID_ILgFontManager __uuidof(ILgFontManager) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("73718689-B701-4241-A408-4C389ECD6664") - ILgFontManager : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE IsFontAvailable( - /* [in] */ BSTR bstrName, - /* [retval][out] */ ComBool *pfAvail) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsFontAvailableRgch( - /* [in] */ int cch, - /* [in] */ OLECHAR *prgchName, - /* [retval][out] */ ComBool *pfAvail) = 0; - - virtual HRESULT STDMETHODCALLTYPE AvailableFonts( - /* [out] */ BSTR *pbstrNames) = 0; - - virtual HRESULT STDMETHODCALLTYPE RefreshFontList( void) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgFontManagerVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgFontManager * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgFontManager * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgFontManager * This); - - HRESULT ( STDMETHODCALLTYPE *IsFontAvailable )( - ILgFontManager * This, - /* [in] */ BSTR bstrName, - /* [retval][out] */ ComBool *pfAvail); - - HRESULT ( STDMETHODCALLTYPE *IsFontAvailableRgch )( - ILgFontManager * This, - /* [in] */ int cch, - /* [in] */ OLECHAR *prgchName, - /* [retval][out] */ ComBool *pfAvail); - - HRESULT ( STDMETHODCALLTYPE *AvailableFonts )( - ILgFontManager * This, - /* [out] */ BSTR *pbstrNames); - - HRESULT ( STDMETHODCALLTYPE *RefreshFontList )( - ILgFontManager * This); - - END_INTERFACE - } ILgFontManagerVtbl; - - interface ILgFontManager - { - CONST_VTBL struct ILgFontManagerVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgFontManager_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgFontManager_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgFontManager_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgFontManager_IsFontAvailable(This,bstrName,pfAvail) \ - ( (This)->lpVtbl -> IsFontAvailable(This,bstrName,pfAvail) ) - -#define ILgFontManager_IsFontAvailableRgch(This,cch,prgchName,pfAvail) \ - ( (This)->lpVtbl -> IsFontAvailableRgch(This,cch,prgchName,pfAvail) ) - -#define ILgFontManager_AvailableFonts(This,pbstrNames) \ - ( (This)->lpVtbl -> AvailableFonts(This,pbstrNames) ) - -#define ILgFontManager_RefreshFontList(This) \ - ( (This)->lpVtbl -> RefreshFontList(This) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgFontManager_INTERFACE_DEFINED__ */ - - -#define CLSID_LgInputMethodEditor __uuidof(LgInputMethodEditor) - -#ifdef __cplusplus - -class DECLSPEC_UUID("659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9") -LgInputMethodEditor; -#endif - -#define CLSID_LgFontManager __uuidof(LgFontManager) - -#ifdef __cplusplus - -class DECLSPEC_UUID("02C3F580-796D-4B5F-BE43-166D97319DA5") -LgFontManager; -#endif - #ifndef __ILgIcuCharPropEngine_INTERFACE_DEFINED__ #define __ILgIcuCharPropEngine_INTERFACE_DEFINED__ @@ -10972,22 +10436,9 @@ LgFontManager; virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NLayout( - /* [retval][out] */ int *pclayout) = 0; - - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( - /* [in] */ int ilayout, - /* [retval][out] */ BSTR *pbstrName) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ActiveKeyboardName( /* [retval][out] */ BSTR *pbstrName) = 0; - virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ActiveKeyboardName( - /* [in] */ BSTR bstrName) = 0; - - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_KeymanWindowsMessage( - /* [retval][out] */ int *pwm) = 0; - }; #else /* C style interface */ @@ -11015,27 +10466,10 @@ LgFontManager; HRESULT ( STDMETHODCALLTYPE *Close )( ILgKeymanHandler * This); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NLayout )( - ILgKeymanHandler * This, - /* [retval][out] */ int *pclayout); - - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( - ILgKeymanHandler * This, - /* [in] */ int ilayout, - /* [retval][out] */ BSTR *pbstrName); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ActiveKeyboardName )( ILgKeymanHandler * This, /* [retval][out] */ BSTR *pbstrName); - /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ActiveKeyboardName )( - ILgKeymanHandler * This, - /* [in] */ BSTR bstrName); - - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeymanWindowsMessage )( - ILgKeymanHandler * This, - /* [retval][out] */ int *pwm); - END_INTERFACE } ILgKeymanHandlerVtbl; @@ -11065,21 +10499,9 @@ LgFontManager; #define ILgKeymanHandler_Close(This) \ ( (This)->lpVtbl -> Close(This) ) -#define ILgKeymanHandler_get_NLayout(This,pclayout) \ - ( (This)->lpVtbl -> get_NLayout(This,pclayout) ) - -#define ILgKeymanHandler_get_Name(This,ilayout,pbstrName) \ - ( (This)->lpVtbl -> get_Name(This,ilayout,pbstrName) ) - #define ILgKeymanHandler_get_ActiveKeyboardName(This,pbstrName) \ ( (This)->lpVtbl -> get_ActiveKeyboardName(This,pbstrName) ) -#define ILgKeymanHandler_put_ActiveKeyboardName(This,bstrName) \ - ( (This)->lpVtbl -> put_ActiveKeyboardName(This,bstrName) ) - -#define ILgKeymanHandler_get_KeymanWindowsMessage(This,pwm) \ - ( (This)->lpVtbl -> get_KeymanWindowsMessage(This,pwm) ) - #endif /* COBJMACROS */ @@ -11091,184 +10513,6 @@ LgFontManager; #endif /* __ILgKeymanHandler_INTERFACE_DEFINED__ */ -#ifndef __ILgCodePageEnumerator_INTERFACE_DEFINED__ -#define __ILgCodePageEnumerator_INTERFACE_DEFINED__ - -/* interface ILgCodePageEnumerator */ -/* [unique][object][uuid] */ - - -#define IID_ILgCodePageEnumerator __uuidof(ILgCodePageEnumerator) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A") - ILgCodePageEnumerator : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Init( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Next( - /* [out] */ int *pnId, - /* [out] */ BSTR *pbstrName) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgCodePageEnumeratorVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgCodePageEnumerator * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgCodePageEnumerator * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgCodePageEnumerator * This); - - HRESULT ( STDMETHODCALLTYPE *Init )( - ILgCodePageEnumerator * This); - - HRESULT ( STDMETHODCALLTYPE *Next )( - ILgCodePageEnumerator * This, - /* [out] */ int *pnId, - /* [out] */ BSTR *pbstrName); - - END_INTERFACE - } ILgCodePageEnumeratorVtbl; - - interface ILgCodePageEnumerator - { - CONST_VTBL struct ILgCodePageEnumeratorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgCodePageEnumerator_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgCodePageEnumerator_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgCodePageEnumerator_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgCodePageEnumerator_Init(This) \ - ( (This)->lpVtbl -> Init(This) ) - -#define ILgCodePageEnumerator_Next(This,pnId,pbstrName) \ - ( (This)->lpVtbl -> Next(This,pnId,pbstrName) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgCodePageEnumerator_INTERFACE_DEFINED__ */ - - -#ifndef __ILgLanguageEnumerator_INTERFACE_DEFINED__ -#define __ILgLanguageEnumerator_INTERFACE_DEFINED__ - -/* interface ILgLanguageEnumerator */ -/* [unique][object][uuid] */ - - -#define IID_ILgLanguageEnumerator __uuidof(ILgLanguageEnumerator) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("746A16E1-0C36-4268-A261-E8012B0D67C5") - ILgLanguageEnumerator : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Init( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Next( - /* [out] */ int *pnId, - /* [out] */ BSTR *pbstrName) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgLanguageEnumeratorVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgLanguageEnumerator * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgLanguageEnumerator * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgLanguageEnumerator * This); - - HRESULT ( STDMETHODCALLTYPE *Init )( - ILgLanguageEnumerator * This); - - HRESULT ( STDMETHODCALLTYPE *Next )( - ILgLanguageEnumerator * This, - /* [out] */ int *pnId, - /* [out] */ BSTR *pbstrName); - - END_INTERFACE - } ILgLanguageEnumeratorVtbl; - - interface ILgLanguageEnumerator - { - CONST_VTBL struct ILgLanguageEnumeratorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgLanguageEnumerator_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgLanguageEnumerator_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgLanguageEnumerator_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgLanguageEnumerator_Init(This) \ - ( (This)->lpVtbl -> Init(This) ) - -#define ILgLanguageEnumerator_Next(This,pnId,pbstrName) \ - ( (This)->lpVtbl -> Next(This,pnId,pbstrName) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgLanguageEnumerator_INTERFACE_DEFINED__ */ - - #ifndef __ILgIcuConverterEnumerator_INTERFACE_DEFINED__ #define __ILgIcuConverterEnumerator_INTERFACE_DEFINED__ @@ -11990,30 +11234,6 @@ class DECLSPEC_UUID("69ACA99C-F852-4C2C-9B5F-FF83238A17A5") LgKeymanHandler; #endif -#define CLSID_LgTextServices __uuidof(LgTextServices) - -#ifdef __cplusplus - -class DECLSPEC_UUID("720485C5-E8D5-4761-92F0-F70D2B3CF980") -LgTextServices; -#endif - -#define CLSID_LgCodePageEnumerator __uuidof(LgCodePageEnumerator) - -#ifdef __cplusplus - -class DECLSPEC_UUID("9045F113-8626-41C0-A61E-A73FBE5920D1") -LgCodePageEnumerator; -#endif - -#define CLSID_LgLanguageEnumerator __uuidof(LgLanguageEnumerator) - -#ifdef __cplusplus - -class DECLSPEC_UUID("B887505B-74DE-4ADC-A1D9-5553428C8D02") -LgLanguageEnumerator; -#endif - #define CLSID_LgIcuConverterEnumerator __uuidof(LgIcuConverterEnumerator) #ifdef __cplusplus diff --git a/Lib/linux/Common/FwKernelTlb.idl b/Lib/linux/Common/FwKernelTlb.idl index 4660789763..63a8827ba3 100644 --- a/Lib/linux/Common/FwKernelTlb.idl +++ b/Lib/linux/Common/FwKernelTlb.idl @@ -3680,7 +3680,6 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("7A1B89C0-C2D6-11d3-9BB7-0040 interface ICollation; interface ILgWritingSystem; interface ILgWritingSystemFactory; - interface ILgTextServices; @@ -3878,13 +3877,6 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("7A1B89C0-C2D6-11d3-9BB7-0040 [out, retval] BSTR * pbstr); - [propget] HRESULT LCID( - [out, retval] int * pnLocale); - - [propput] HRESULT LCID( - [in] int nLocale); - - [propget] HRESULT SpellCheckingId( @@ -3959,177 +3951,10 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("7A1B89C0-C2D6-11d3-9BB7-0040 - - - - - - - - - - - - - - - - - - - - - - - - - - - cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgInputMethodEditor") cpp_quote(",") cpp_quote("E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC") cpp_quote(");") [ uuid("E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC"), object, pointer_default(unique) ] interface ILgInputMethodEditor : IUnknown - { - - - HRESULT Setup(); - - - - - - - - - - - - - - - - - - - [local, restricted] HRESULT Replace( - [in] BSTR bstrInput, - [in] ITsTextProps * pttpInput, - [in] ITsStrBldr * ptsbOld, - [in] int ichMin, - [in] int ichLim, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP); - - - - - - - - - - - - - - HRESULT Backspace( - [in] int pichStart, - [in] int cactBackspace, - [in] ITsStrBldr * ptsbOld, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP, - [out] int * pcactBsRemaining); - - - - - - - - - - - - - HRESULT DeleteForward( - [in] int pichStart, - [in] int cactDelForward, - [in] ITsStrBldr * ptsbInOut, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP, - [out] int * pcactDfRemaining); - - - - - HRESULT IsValidInsertionPoint( - [in] int ich, - [in] ITsString * ptss, - [out, retval] BOOL * pfValid); - }; - - - - - - - - - - - - - - - - - - - - - - - - - cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgFontManager") cpp_quote(",") cpp_quote("73718689-B701-4241-A408-4C389ECD6664") cpp_quote(");") [ uuid("73718689-B701-4241-A408-4C389ECD6664"), object, pointer_default(unique) ] interface ILgFontManager : IUnknown - { - - HRESULT IsFontAvailable( - [in] BSTR bstrName, - [out, retval] ComBool * pfAvail); - - - HRESULT IsFontAvailableRgch( - [in] int cch, - [in] OLECHAR * prgchName, - [out, retval] ComBool * pfAvail); - - - HRESULT AvailableFonts( - [out] BSTR * pbstrNames); - - - HRESULT RefreshFontList(); - }; - - - - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9") cpp_quote(",") cpp_quote("LgInputMethodEditor") cpp_quote(");") [ uuid(659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9) ] coclass LgInputMethodEditor - { - interface ILgInputMethodEditor; - }; - - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("02C3F580-796D-4B5F-BE43-166D97319DA5") cpp_quote(",") cpp_quote("LgFontManager") cpp_quote(");") [ uuid(02C3F580-796D-4B5F-BE43-166D97319DA5) ] coclass LgFontManager - { - interface ILgFontManager; - }; - #line 498 "C:\\fwrepo\\fw\\src\\Language\\Language.idh" - - @@ -5333,107 +5158,8 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgKeymanHandler") HRESULT Close(); - [propget] HRESULT NLayout( - [out, retval] int * pclayout); - - [propget] HRESULT Name( - [in] int ilayout, - [out, retval] BSTR * pbstrName); - [propget] HRESULT ActiveKeyboardName( [out, retval] BSTR * pbstrName); - [propput] HRESULT ActiveKeyboardName( - [in] BSTR bstrName); - - [propget] HRESULT KeymanWindowsMessage( - [out, retval] int * pwm); - -}; - - - - - - - - - - - - - - - - - - - - -cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgTextServices") cpp_quote(",") cpp_quote("5B6303DE-E635-4DD7-A7FC-345BEEF352D8") cpp_quote(");") [ uuid("5B6303DE-E635-4DD7-A7FC-345BEEF352D8"), object, pointer_default(unique) ] interface ILgTextServices : IUnknown -{ - - HRESULT SetKeyboard( - [in] int nLcid, - [in] BSTR bstrKeymanKbd, - [in, out] int * pnActiveLangId, - [in, out] BSTR * pbstrActiveKeymanKbd, - [in, out] ComBool * pfSelectLangPending - ); -}; - - - - - - - - - - - - - - - -cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgCodePageEnumerator") cpp_quote(",") cpp_quote("2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A") cpp_quote(");") [ uuid("2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A"), object, pointer_default(unique) ] interface ILgCodePageEnumerator : IUnknown -{ - - - - HRESULT Init(); - - - HRESULT Next( - [out] int * pnId, - [out] BSTR * pbstrName); -}; - - - - - - - - - - - - - - - -cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgLanguageEnumerator") cpp_quote(",") cpp_quote("746A16E1-0C36-4268-A261-E8012B0D67C5") cpp_quote(");") [ uuid("746A16E1-0C36-4268-A261-E8012B0D67C5"), object, pointer_default(unique) ] interface ILgLanguageEnumerator : IUnknown -{ - - - - HRESULT Init(); - - - - HRESULT Next( - [out] int * pnId, - [out] BSTR * pbstrName); }; @@ -5719,18 +5445,6 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IRegexMatcher") cpp { interface ILgKeymanHandler; }; - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("720485C5-E8D5-4761-92F0-F70D2B3CF980") cpp_quote(",") cpp_quote("LgTextServices") cpp_quote(");") [ uuid(720485C5-E8D5-4761-92F0-F70D2B3CF980) ] coclass LgTextServices - { - interface ILgTextServices; - }; - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("9045F113-8626-41C0-A61E-A73FBE5920D1") cpp_quote(",") cpp_quote("LgCodePageEnumerator") cpp_quote(");") [ uuid(9045F113-8626-41C0-A61E-A73FBE5920D1) ] coclass LgCodePageEnumerator - { - interface ILgCodePageEnumerator; - }; - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("B887505B-74DE-4ADC-A1D9-5553428C8D02") cpp_quote(",") cpp_quote("LgLanguageEnumerator") cpp_quote(");") [ uuid(B887505B-74DE-4ADC-A1D9-5553428C8D02) ] coclass LgLanguageEnumerator - { - interface ILgLanguageEnumerator; - }; cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("9E729461-F80D-4796-BA17-086BC61907F1") cpp_quote(",") cpp_quote("LgIcuConverterEnumerator") cpp_quote(");") [ uuid(9E729461-F80D-4796-BA17-086BC61907F1) ] coclass LgIcuConverterEnumerator { interface ILgIcuConverterEnumerator; @@ -5747,7 +5461,7 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IRegexMatcher") cpp { interface ILgIcuLocaleEnumerator; }; -#line 2118 "C:\\fwrepo\\fw\\src\\Language\\Language.idh" +#line 1832 "C:\\fwrepo\\fw\\src\\Language\\Language.idh" #line 25 "C:\\fwrepo\\fw\\src\\Kernel\\FwKernelTlb.idl" }; diff --git a/Lib/linux/Common/FwKernelTlb.tlb b/Lib/linux/Common/FwKernelTlb.tlb index 1a97183cf4..3bcde46556 100644 Binary files a/Lib/linux/Common/FwKernelTlb.tlb and b/Lib/linux/Common/FwKernelTlb.tlb differ diff --git a/Lib/linux/Common/LanguageTlb.h b/Lib/linux/Common/LanguageTlb.h index 600ebb3585..adc7aa0459 100644 --- a/Lib/linux/Common/LanguageTlb.h +++ b/Lib/linux/Common/LanguageTlb.h @@ -4,7 +4,7 @@ /* File created by MIDL compiler version 7.00.0555 */ -/* at Tue Jul 23 10:57:50 2013 +/* at Tue Sep 10 15:51:53 2013 */ /* Compiler settings for C:\fwrepo\fw\Output\Common\LanguageTlb.idl: Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 @@ -233,12 +233,6 @@ typedef struct TsMultiString TsMultiString; #endif /* __TsMultiString_FWD_DEFINED__ */ -#ifndef __ILgInputMethodEditor_FWD_DEFINED__ -#define __ILgInputMethodEditor_FWD_DEFINED__ -typedef interface ILgInputMethodEditor ILgInputMethodEditor; -#endif /* __ILgInputMethodEditor_FWD_DEFINED__ */ - - #ifndef __IVwGraphics_FWD_DEFINED__ #define __IVwGraphics_FWD_DEFINED__ typedef interface IVwGraphics IVwGraphics; @@ -413,42 +407,6 @@ typedef interface ILgWritingSystem ILgWritingSystem; #endif /* __ILgWritingSystem_FWD_DEFINED__ */ -#ifndef __ILgTextServices_FWD_DEFINED__ -#define __ILgTextServices_FWD_DEFINED__ -typedef interface ILgTextServices ILgTextServices; -#endif /* __ILgTextServices_FWD_DEFINED__ */ - - -#ifndef __ILgFontManager_FWD_DEFINED__ -#define __ILgFontManager_FWD_DEFINED__ -typedef interface ILgFontManager ILgFontManager; -#endif /* __ILgFontManager_FWD_DEFINED__ */ - - -#ifndef __LgInputMethodEditor_FWD_DEFINED__ -#define __LgInputMethodEditor_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgInputMethodEditor LgInputMethodEditor; -#else -typedef struct LgInputMethodEditor LgInputMethodEditor; -#endif /* __cplusplus */ - -#endif /* __LgInputMethodEditor_FWD_DEFINED__ */ - - -#ifndef __LgFontManager_FWD_DEFINED__ -#define __LgFontManager_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgFontManager LgFontManager; -#else -typedef struct LgFontManager LgFontManager; -#endif /* __cplusplus */ - -#endif /* __LgFontManager_FWD_DEFINED__ */ - - #ifndef __ILgIcuCharPropEngine_FWD_DEFINED__ #define __ILgIcuCharPropEngine_FWD_DEFINED__ typedef interface ILgIcuCharPropEngine ILgIcuCharPropEngine; @@ -467,18 +425,6 @@ typedef interface ILgKeymanHandler ILgKeymanHandler; #endif /* __ILgKeymanHandler_FWD_DEFINED__ */ -#ifndef __ILgCodePageEnumerator_FWD_DEFINED__ -#define __ILgCodePageEnumerator_FWD_DEFINED__ -typedef interface ILgCodePageEnumerator ILgCodePageEnumerator; -#endif /* __ILgCodePageEnumerator_FWD_DEFINED__ */ - - -#ifndef __ILgLanguageEnumerator_FWD_DEFINED__ -#define __ILgLanguageEnumerator_FWD_DEFINED__ -typedef interface ILgLanguageEnumerator ILgLanguageEnumerator; -#endif /* __ILgLanguageEnumerator_FWD_DEFINED__ */ - - #ifndef __ILgIcuConverterEnumerator_FWD_DEFINED__ #define __ILgIcuConverterEnumerator_FWD_DEFINED__ typedef interface ILgIcuConverterEnumerator ILgIcuConverterEnumerator; @@ -617,42 +563,6 @@ typedef struct LgKeymanHandler LgKeymanHandler; #endif /* __LgKeymanHandler_FWD_DEFINED__ */ -#ifndef __LgTextServices_FWD_DEFINED__ -#define __LgTextServices_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgTextServices LgTextServices; -#else -typedef struct LgTextServices LgTextServices; -#endif /* __cplusplus */ - -#endif /* __LgTextServices_FWD_DEFINED__ */ - - -#ifndef __LgCodePageEnumerator_FWD_DEFINED__ -#define __LgCodePageEnumerator_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgCodePageEnumerator LgCodePageEnumerator; -#else -typedef struct LgCodePageEnumerator LgCodePageEnumerator; -#endif /* __cplusplus */ - -#endif /* __LgCodePageEnumerator_FWD_DEFINED__ */ - - -#ifndef __LgLanguageEnumerator_FWD_DEFINED__ -#define __LgLanguageEnumerator_FWD_DEFINED__ - -#ifdef __cplusplus -typedef class LgLanguageEnumerator LgLanguageEnumerator; -#else -typedef struct LgLanguageEnumerator LgLanguageEnumerator; -#endif /* __cplusplus */ - -#endif /* __LgLanguageEnumerator_FWD_DEFINED__ */ - - #ifndef __LgIcuConverterEnumerator_FWD_DEFINED__ #define __LgIcuConverterEnumerator_FWD_DEFINED__ @@ -1373,7 +1283,6 @@ FwGraphiteProcess - typedef /* [v1_enum] */ enum LgGeneralCharCategory { kccLu = 0, @@ -1499,26 +1408,6 @@ ILgWritingSystem , 9F74A170-E8BB-466d-8848-5FDB28AC5AF8 ); -GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgInputMethodEditor -, -E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgFontManager -, -73718689-B701-4241-A408-4C389ECD6664 -); -ATTACH_GUID_TO_CLASS(class, -659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9 -, -LgInputMethodEditor -); -ATTACH_GUID_TO_CLASS(class, -02C3F580-796D-4B5F-BE43-166D97319DA5 -, -LgFontManager -); typedef /* [v1_enum] */ enum LgCollatingOptions { fcoDefault = 0, @@ -1622,21 +1511,6 @@ ILgKeymanHandler 3F42144B-509F-4def-8DD3-6D8D26677001 ); GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgTextServices -, -5B6303DE-E635-4DD7-A7FC-345BEEF352D8 -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgCodePageEnumerator -, -2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( -ILgLanguageEnumerator -, -746A16E1-0C36-4268-A261-E8012B0D67C5 -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( ILgIcuConverterEnumerator , 8E6D558E-8755-4EA1-9FF6-039D375312E9 @@ -1707,21 +1581,6 @@ ATTACH_GUID_TO_CLASS(class, LgKeymanHandler ); ATTACH_GUID_TO_CLASS(class, -720485C5-E8D5-4761-92F0-F70D2B3CF980 -, -LgTextServices -); -ATTACH_GUID_TO_CLASS(class, -9045F113-8626-41C0-A61E-A73FBE5920D1 -, -LgCodePageEnumerator -); -ATTACH_GUID_TO_CLASS(class, -B887505B-74DE-4ADC-A1D9-5553428C8D02 -, -LgLanguageEnumerator -); -ATTACH_GUID_TO_CLASS(class, 9E729461-F80D-4796-BA17-086BC61907F1 , LgIcuConverterEnumerator @@ -5414,165 +5273,6 @@ class DECLSPEC_UUID("7A1B89C0-C2D6-11d3-9BB7-00400541F9E9") TsMultiString; #endif -#ifndef __ILgInputMethodEditor_INTERFACE_DEFINED__ -#define __ILgInputMethodEditor_INTERFACE_DEFINED__ - -/* interface ILgInputMethodEditor */ -/* [unique][object][uuid] */ - - -#define IID_ILgInputMethodEditor __uuidof(ILgInputMethodEditor) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC") - ILgInputMethodEditor : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Setup( void) = 0; - - virtual /* [restricted][local] */ HRESULT STDMETHODCALLTYPE Replace( - /* [in] */ BSTR bstrInput, - /* [in] */ ITsTextProps *pttpInput, - /* [in] */ ITsStrBldr *ptsbOld, - /* [in] */ int ichMin, - /* [in] */ int ichLim, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP) = 0; - - virtual HRESULT STDMETHODCALLTYPE Backspace( - /* [in] */ int pichStart, - /* [in] */ int cactBackspace, - /* [in] */ ITsStrBldr *ptsbOld, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP, - /* [out] */ int *pcactBsRemaining) = 0; - - virtual HRESULT STDMETHODCALLTYPE DeleteForward( - /* [in] */ int pichStart, - /* [in] */ int cactDelForward, - /* [in] */ ITsStrBldr *ptsbInOut, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP, - /* [out] */ int *pcactDfRemaining) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsValidInsertionPoint( - /* [in] */ int ich, - /* [in] */ ITsString *ptss, - /* [retval][out] */ BOOL *pfValid) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgInputMethodEditorVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgInputMethodEditor * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgInputMethodEditor * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgInputMethodEditor * This); - - HRESULT ( STDMETHODCALLTYPE *Setup )( - ILgInputMethodEditor * This); - - /* [restricted][local] */ HRESULT ( STDMETHODCALLTYPE *Replace )( - ILgInputMethodEditor * This, - /* [in] */ BSTR bstrInput, - /* [in] */ ITsTextProps *pttpInput, - /* [in] */ ITsStrBldr *ptsbOld, - /* [in] */ int ichMin, - /* [in] */ int ichLim, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP); - - HRESULT ( STDMETHODCALLTYPE *Backspace )( - ILgInputMethodEditor * This, - /* [in] */ int pichStart, - /* [in] */ int cactBackspace, - /* [in] */ ITsStrBldr *ptsbOld, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP, - /* [out] */ int *pcactBsRemaining); - - HRESULT ( STDMETHODCALLTYPE *DeleteForward )( - ILgInputMethodEditor * This, - /* [in] */ int pichStart, - /* [in] */ int cactDelForward, - /* [in] */ ITsStrBldr *ptsbInOut, - /* [out] */ int *pichModMin, - /* [out] */ int *pichModLim, - /* [out] */ int *pichIP, - /* [out] */ int *pcactDfRemaining); - - HRESULT ( STDMETHODCALLTYPE *IsValidInsertionPoint )( - ILgInputMethodEditor * This, - /* [in] */ int ich, - /* [in] */ ITsString *ptss, - /* [retval][out] */ BOOL *pfValid); - - END_INTERFACE - } ILgInputMethodEditorVtbl; - - interface ILgInputMethodEditor - { - CONST_VTBL struct ILgInputMethodEditorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgInputMethodEditor_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgInputMethodEditor_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgInputMethodEditor_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgInputMethodEditor_Setup(This) \ - ( (This)->lpVtbl -> Setup(This) ) - -#define ILgInputMethodEditor_Replace(This,bstrInput,pttpInput,ptsbOld,ichMin,ichLim,pichModMin,pichModLim,pichIP) \ - ( (This)->lpVtbl -> Replace(This,bstrInput,pttpInput,ptsbOld,ichMin,ichLim,pichModMin,pichModLim,pichIP) ) - -#define ILgInputMethodEditor_Backspace(This,pichStart,cactBackspace,ptsbOld,pichModMin,pichModLim,pichIP,pcactBsRemaining) \ - ( (This)->lpVtbl -> Backspace(This,pichStart,cactBackspace,ptsbOld,pichModMin,pichModLim,pichIP,pcactBsRemaining) ) - -#define ILgInputMethodEditor_DeleteForward(This,pichStart,cactDelForward,ptsbInOut,pichModMin,pichModLim,pichIP,pcactDfRemaining) \ - ( (This)->lpVtbl -> DeleteForward(This,pichStart,cactDelForward,ptsbInOut,pichModMin,pichModLim,pichIP,pcactDfRemaining) ) - -#define ILgInputMethodEditor_IsValidInsertionPoint(This,ich,ptss,pfValid) \ - ( (This)->lpVtbl -> IsValidInsertionPoint(This,ich,ptss,pfValid) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgInputMethodEditor_INTERFACE_DEFINED__ */ - - #ifndef __IVwGraphics_INTERFACE_DEFINED__ #define __IVwGraphics_INTERFACE_DEFINED__ @@ -9748,12 +9448,6 @@ FwGraphiteProcess; virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ISO3( /* [retval][out] */ BSTR *pbstr) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_LCID( - /* [retval][out] */ int *pnLocale) = 0; - - virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_LCID( - /* [in] */ int nLocale) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_SpellCheckingId( /* [retval][out] */ BSTR *pbstr) = 0; @@ -9836,14 +9530,6 @@ FwGraphiteProcess; ILgWritingSystem * This, /* [retval][out] */ BSTR *pbstr); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_LCID )( - ILgWritingSystem * This, - /* [retval][out] */ int *pnLocale); - - /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_LCID )( - ILgWritingSystem * This, - /* [in] */ int nLocale); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_SpellCheckingId )( ILgWritingSystem * This, /* [retval][out] */ BSTR *pbstr); @@ -9940,12 +9626,6 @@ FwGraphiteProcess; #define ILgWritingSystem_get_ISO3(This,pbstr) \ ( (This)->lpVtbl -> get_ISO3(This,pbstr) ) -#define ILgWritingSystem_get_LCID(This,pnLocale) \ - ( (This)->lpVtbl -> get_LCID(This,pnLocale) ) - -#define ILgWritingSystem_put_LCID(This,nLocale) \ - ( (This)->lpVtbl -> put_LCID(This,nLocale) ) - #define ILgWritingSystem_get_SpellCheckingId(This,pbstr) \ ( (This)->lpVtbl -> get_SpellCheckingId(This,pbstr) ) @@ -10002,222 +9682,6 @@ FwGraphiteProcess; #endif /* __ILgWritingSystem_INTERFACE_DEFINED__ */ -#ifndef __ILgTextServices_INTERFACE_DEFINED__ -#define __ILgTextServices_INTERFACE_DEFINED__ - -/* interface ILgTextServices */ -/* [unique][object][uuid] */ - - -#define IID_ILgTextServices __uuidof(ILgTextServices) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5B6303DE-E635-4DD7-A7FC-345BEEF352D8") - ILgTextServices : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetKeyboard( - /* [in] */ int nLcid, - /* [in] */ BSTR bstrKeymanKbd, - /* [out][in] */ int *pnActiveLangId, - /* [out][in] */ BSTR *pbstrActiveKeymanKbd, - /* [out][in] */ ComBool *pfSelectLangPending) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgTextServicesVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgTextServices * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgTextServices * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgTextServices * This); - - HRESULT ( STDMETHODCALLTYPE *SetKeyboard )( - ILgTextServices * This, - /* [in] */ int nLcid, - /* [in] */ BSTR bstrKeymanKbd, - /* [out][in] */ int *pnActiveLangId, - /* [out][in] */ BSTR *pbstrActiveKeymanKbd, - /* [out][in] */ ComBool *pfSelectLangPending); - - END_INTERFACE - } ILgTextServicesVtbl; - - interface ILgTextServices - { - CONST_VTBL struct ILgTextServicesVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgTextServices_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgTextServices_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgTextServices_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgTextServices_SetKeyboard(This,nLcid,bstrKeymanKbd,pnActiveLangId,pbstrActiveKeymanKbd,pfSelectLangPending) \ - ( (This)->lpVtbl -> SetKeyboard(This,nLcid,bstrKeymanKbd,pnActiveLangId,pbstrActiveKeymanKbd,pfSelectLangPending) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgTextServices_INTERFACE_DEFINED__ */ - - -#ifndef __ILgFontManager_INTERFACE_DEFINED__ -#define __ILgFontManager_INTERFACE_DEFINED__ - -/* interface ILgFontManager */ -/* [unique][object][uuid] */ - - -#define IID_ILgFontManager __uuidof(ILgFontManager) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("73718689-B701-4241-A408-4C389ECD6664") - ILgFontManager : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE IsFontAvailable( - /* [in] */ BSTR bstrName, - /* [retval][out] */ ComBool *pfAvail) = 0; - - virtual HRESULT STDMETHODCALLTYPE IsFontAvailableRgch( - /* [in] */ int cch, - /* [in] */ OLECHAR *prgchName, - /* [retval][out] */ ComBool *pfAvail) = 0; - - virtual HRESULT STDMETHODCALLTYPE AvailableFonts( - /* [out] */ BSTR *pbstrNames) = 0; - - virtual HRESULT STDMETHODCALLTYPE RefreshFontList( void) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgFontManagerVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgFontManager * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgFontManager * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgFontManager * This); - - HRESULT ( STDMETHODCALLTYPE *IsFontAvailable )( - ILgFontManager * This, - /* [in] */ BSTR bstrName, - /* [retval][out] */ ComBool *pfAvail); - - HRESULT ( STDMETHODCALLTYPE *IsFontAvailableRgch )( - ILgFontManager * This, - /* [in] */ int cch, - /* [in] */ OLECHAR *prgchName, - /* [retval][out] */ ComBool *pfAvail); - - HRESULT ( STDMETHODCALLTYPE *AvailableFonts )( - ILgFontManager * This, - /* [out] */ BSTR *pbstrNames); - - HRESULT ( STDMETHODCALLTYPE *RefreshFontList )( - ILgFontManager * This); - - END_INTERFACE - } ILgFontManagerVtbl; - - interface ILgFontManager - { - CONST_VTBL struct ILgFontManagerVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgFontManager_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgFontManager_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgFontManager_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgFontManager_IsFontAvailable(This,bstrName,pfAvail) \ - ( (This)->lpVtbl -> IsFontAvailable(This,bstrName,pfAvail) ) - -#define ILgFontManager_IsFontAvailableRgch(This,cch,prgchName,pfAvail) \ - ( (This)->lpVtbl -> IsFontAvailableRgch(This,cch,prgchName,pfAvail) ) - -#define ILgFontManager_AvailableFonts(This,pbstrNames) \ - ( (This)->lpVtbl -> AvailableFonts(This,pbstrNames) ) - -#define ILgFontManager_RefreshFontList(This) \ - ( (This)->lpVtbl -> RefreshFontList(This) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgFontManager_INTERFACE_DEFINED__ */ - - -#define CLSID_LgInputMethodEditor __uuidof(LgInputMethodEditor) - -#ifdef __cplusplus - -class DECLSPEC_UUID("659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9") -LgInputMethodEditor; -#endif - -#define CLSID_LgFontManager __uuidof(LgFontManager) - -#ifdef __cplusplus - -class DECLSPEC_UUID("02C3F580-796D-4B5F-BE43-166D97319DA5") -LgFontManager; -#endif - #ifndef __ILgIcuCharPropEngine_INTERFACE_DEFINED__ #define __ILgIcuCharPropEngine_INTERFACE_DEFINED__ @@ -10973,22 +10437,9 @@ LgFontManager; virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_NLayout( - /* [retval][out] */ int *pclayout) = 0; - - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_Name( - /* [in] */ int ilayout, - /* [retval][out] */ BSTR *pbstrName) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_ActiveKeyboardName( /* [retval][out] */ BSTR *pbstrName) = 0; - virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_ActiveKeyboardName( - /* [in] */ BSTR bstrName) = 0; - - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_KeymanWindowsMessage( - /* [retval][out] */ int *pwm) = 0; - }; #else /* C style interface */ @@ -11016,27 +10467,10 @@ LgFontManager; HRESULT ( STDMETHODCALLTYPE *Close )( ILgKeymanHandler * This); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_NLayout )( - ILgKeymanHandler * This, - /* [retval][out] */ int *pclayout); - - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )( - ILgKeymanHandler * This, - /* [in] */ int ilayout, - /* [retval][out] */ BSTR *pbstrName); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_ActiveKeyboardName )( ILgKeymanHandler * This, /* [retval][out] */ BSTR *pbstrName); - /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_ActiveKeyboardName )( - ILgKeymanHandler * This, - /* [in] */ BSTR bstrName); - - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_KeymanWindowsMessage )( - ILgKeymanHandler * This, - /* [retval][out] */ int *pwm); - END_INTERFACE } ILgKeymanHandlerVtbl; @@ -11066,21 +10500,9 @@ LgFontManager; #define ILgKeymanHandler_Close(This) \ ( (This)->lpVtbl -> Close(This) ) -#define ILgKeymanHandler_get_NLayout(This,pclayout) \ - ( (This)->lpVtbl -> get_NLayout(This,pclayout) ) - -#define ILgKeymanHandler_get_Name(This,ilayout,pbstrName) \ - ( (This)->lpVtbl -> get_Name(This,ilayout,pbstrName) ) - #define ILgKeymanHandler_get_ActiveKeyboardName(This,pbstrName) \ ( (This)->lpVtbl -> get_ActiveKeyboardName(This,pbstrName) ) -#define ILgKeymanHandler_put_ActiveKeyboardName(This,bstrName) \ - ( (This)->lpVtbl -> put_ActiveKeyboardName(This,bstrName) ) - -#define ILgKeymanHandler_get_KeymanWindowsMessage(This,pwm) \ - ( (This)->lpVtbl -> get_KeymanWindowsMessage(This,pwm) ) - #endif /* COBJMACROS */ @@ -11092,184 +10514,6 @@ LgFontManager; #endif /* __ILgKeymanHandler_INTERFACE_DEFINED__ */ -#ifndef __ILgCodePageEnumerator_INTERFACE_DEFINED__ -#define __ILgCodePageEnumerator_INTERFACE_DEFINED__ - -/* interface ILgCodePageEnumerator */ -/* [unique][object][uuid] */ - - -#define IID_ILgCodePageEnumerator __uuidof(ILgCodePageEnumerator) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A") - ILgCodePageEnumerator : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Init( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Next( - /* [out] */ int *pnId, - /* [out] */ BSTR *pbstrName) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgCodePageEnumeratorVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgCodePageEnumerator * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgCodePageEnumerator * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgCodePageEnumerator * This); - - HRESULT ( STDMETHODCALLTYPE *Init )( - ILgCodePageEnumerator * This); - - HRESULT ( STDMETHODCALLTYPE *Next )( - ILgCodePageEnumerator * This, - /* [out] */ int *pnId, - /* [out] */ BSTR *pbstrName); - - END_INTERFACE - } ILgCodePageEnumeratorVtbl; - - interface ILgCodePageEnumerator - { - CONST_VTBL struct ILgCodePageEnumeratorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgCodePageEnumerator_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgCodePageEnumerator_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgCodePageEnumerator_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgCodePageEnumerator_Init(This) \ - ( (This)->lpVtbl -> Init(This) ) - -#define ILgCodePageEnumerator_Next(This,pnId,pbstrName) \ - ( (This)->lpVtbl -> Next(This,pnId,pbstrName) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgCodePageEnumerator_INTERFACE_DEFINED__ */ - - -#ifndef __ILgLanguageEnumerator_INTERFACE_DEFINED__ -#define __ILgLanguageEnumerator_INTERFACE_DEFINED__ - -/* interface ILgLanguageEnumerator */ -/* [unique][object][uuid] */ - - -#define IID_ILgLanguageEnumerator __uuidof(ILgLanguageEnumerator) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("746A16E1-0C36-4268-A261-E8012B0D67C5") - ILgLanguageEnumerator : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE Init( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Next( - /* [out] */ int *pnId, - /* [out] */ BSTR *pbstrName) = 0; - - }; - -#else /* C style interface */ - - typedef struct ILgLanguageEnumeratorVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ILgLanguageEnumerator * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - ILgLanguageEnumerator * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - ILgLanguageEnumerator * This); - - HRESULT ( STDMETHODCALLTYPE *Init )( - ILgLanguageEnumerator * This); - - HRESULT ( STDMETHODCALLTYPE *Next )( - ILgLanguageEnumerator * This, - /* [out] */ int *pnId, - /* [out] */ BSTR *pbstrName); - - END_INTERFACE - } ILgLanguageEnumeratorVtbl; - - interface ILgLanguageEnumerator - { - CONST_VTBL struct ILgLanguageEnumeratorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define ILgLanguageEnumerator_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ILgLanguageEnumerator_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ILgLanguageEnumerator_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define ILgLanguageEnumerator_Init(This) \ - ( (This)->lpVtbl -> Init(This) ) - -#define ILgLanguageEnumerator_Next(This,pnId,pbstrName) \ - ( (This)->lpVtbl -> Next(This,pnId,pbstrName) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __ILgLanguageEnumerator_INTERFACE_DEFINED__ */ - - #ifndef __ILgIcuConverterEnumerator_INTERFACE_DEFINED__ #define __ILgIcuConverterEnumerator_INTERFACE_DEFINED__ @@ -11991,30 +11235,6 @@ class DECLSPEC_UUID("69ACA99C-F852-4C2C-9B5F-FF83238A17A5") LgKeymanHandler; #endif -#define CLSID_LgTextServices __uuidof(LgTextServices) - -#ifdef __cplusplus - -class DECLSPEC_UUID("720485C5-E8D5-4761-92F0-F70D2B3CF980") -LgTextServices; -#endif - -#define CLSID_LgCodePageEnumerator __uuidof(LgCodePageEnumerator) - -#ifdef __cplusplus - -class DECLSPEC_UUID("9045F113-8626-41C0-A61E-A73FBE5920D1") -LgCodePageEnumerator; -#endif - -#define CLSID_LgLanguageEnumerator __uuidof(LgLanguageEnumerator) - -#ifdef __cplusplus - -class DECLSPEC_UUID("B887505B-74DE-4ADC-A1D9-5553428C8D02") -LgLanguageEnumerator; -#endif - #define CLSID_LgIcuConverterEnumerator __uuidof(LgIcuConverterEnumerator) #ifdef __cplusplus diff --git a/Lib/linux/Common/LanguageTlb.idl b/Lib/linux/Common/LanguageTlb.idl index 464cb6fb9c..35b7ff3af7 100644 --- a/Lib/linux/Common/LanguageTlb.idl +++ b/Lib/linux/Common/LanguageTlb.idl @@ -3689,7 +3689,6 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("7A1B89C0-C2D6-11d3-9BB7-0040 interface ICollation; interface ILgWritingSystem; interface ILgWritingSystemFactory; - interface ILgTextServices; @@ -3887,13 +3886,6 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("7A1B89C0-C2D6-11d3-9BB7-0040 [out, retval] BSTR * pbstr); - [propget] HRESULT LCID( - [out, retval] int * pnLocale); - - [propput] HRESULT LCID( - [in] int nLocale); - - [propget] HRESULT SpellCheckingId( @@ -3968,177 +3960,10 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("7A1B89C0-C2D6-11d3-9BB7-0040 - - - - - - - - - - - - - - - - - - - - - - - - - - - cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgInputMethodEditor") cpp_quote(",") cpp_quote("E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC") cpp_quote(");") [ uuid("E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC"), object, pointer_default(unique) ] interface ILgInputMethodEditor : IUnknown - { - - - HRESULT Setup(); - - - - - - - - - - - - - - - - - - - [local, restricted] HRESULT Replace( - [in] BSTR bstrInput, - [in] ITsTextProps * pttpInput, - [in] ITsStrBldr * ptsbOld, - [in] int ichMin, - [in] int ichLim, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP); - - - - - - - - - - - - - - HRESULT Backspace( - [in] int pichStart, - [in] int cactBackspace, - [in] ITsStrBldr * ptsbOld, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP, - [out] int * pcactBsRemaining); - - - - - - - - - - - - - HRESULT DeleteForward( - [in] int pichStart, - [in] int cactDelForward, - [in] ITsStrBldr * ptsbInOut, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP, - [out] int * pcactDfRemaining); - - - - - HRESULT IsValidInsertionPoint( - [in] int ich, - [in] ITsString * ptss, - [out, retval] BOOL * pfValid); - }; - - - - - - - - - - - - - - - - - - - - - - - - - cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgFontManager") cpp_quote(",") cpp_quote("73718689-B701-4241-A408-4C389ECD6664") cpp_quote(");") [ uuid("73718689-B701-4241-A408-4C389ECD6664"), object, pointer_default(unique) ] interface ILgFontManager : IUnknown - { - - HRESULT IsFontAvailable( - [in] BSTR bstrName, - [out, retval] ComBool * pfAvail); - - - HRESULT IsFontAvailableRgch( - [in] int cch, - [in] OLECHAR * prgchName, - [out, retval] ComBool * pfAvail); - - - HRESULT AvailableFonts( - [out] BSTR * pbstrNames); - - - HRESULT RefreshFontList(); - }; - - - - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9") cpp_quote(",") cpp_quote("LgInputMethodEditor") cpp_quote(");") [ uuid(659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9) ] coclass LgInputMethodEditor - { - interface ILgInputMethodEditor; - }; - - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("02C3F580-796D-4B5F-BE43-166D97319DA5") cpp_quote(",") cpp_quote("LgFontManager") cpp_quote(");") [ uuid(02C3F580-796D-4B5F-BE43-166D97319DA5) ] coclass LgFontManager - { - interface ILgFontManager; - }; - #line 498 "c:\\fwrepo\\fw\\src\\language\\Language.idh" - - @@ -5342,107 +5167,8 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgKeymanHandler") HRESULT Close(); - [propget] HRESULT NLayout( - [out, retval] int * pclayout); - - [propget] HRESULT Name( - [in] int ilayout, - [out, retval] BSTR * pbstrName); - [propget] HRESULT ActiveKeyboardName( [out, retval] BSTR * pbstrName); - [propput] HRESULT ActiveKeyboardName( - [in] BSTR bstrName); - - [propget] HRESULT KeymanWindowsMessage( - [out, retval] int * pwm); - -}; - - - - - - - - - - - - - - - - - - - - -cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgTextServices") cpp_quote(",") cpp_quote("5B6303DE-E635-4DD7-A7FC-345BEEF352D8") cpp_quote(");") [ uuid("5B6303DE-E635-4DD7-A7FC-345BEEF352D8"), object, pointer_default(unique) ] interface ILgTextServices : IUnknown -{ - - HRESULT SetKeyboard( - [in] int nLcid, - [in] BSTR bstrKeymanKbd, - [in, out] int * pnActiveLangId, - [in, out] BSTR * pbstrActiveKeymanKbd, - [in, out] ComBool * pfSelectLangPending - ); -}; - - - - - - - - - - - - - - - -cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgCodePageEnumerator") cpp_quote(",") cpp_quote("2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A") cpp_quote(");") [ uuid("2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A"), object, pointer_default(unique) ] interface ILgCodePageEnumerator : IUnknown -{ - - - - HRESULT Init(); - - - HRESULT Next( - [out] int * pnId, - [out] BSTR * pbstrName); -}; - - - - - - - - - - - - - - - -cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("ILgLanguageEnumerator") cpp_quote(",") cpp_quote("746A16E1-0C36-4268-A261-E8012B0D67C5") cpp_quote(");") [ uuid("746A16E1-0C36-4268-A261-E8012B0D67C5"), object, pointer_default(unique) ] interface ILgLanguageEnumerator : IUnknown -{ - - - - HRESULT Init(); - - - - HRESULT Next( - [out] int * pnId, - [out] BSTR * pbstrName); }; @@ -5728,18 +5454,6 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IRegexMatcher") cpp { interface ILgKeymanHandler; }; - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("720485C5-E8D5-4761-92F0-F70D2B3CF980") cpp_quote(",") cpp_quote("LgTextServices") cpp_quote(");") [ uuid(720485C5-E8D5-4761-92F0-F70D2B3CF980) ] coclass LgTextServices - { - interface ILgTextServices; - }; - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("9045F113-8626-41C0-A61E-A73FBE5920D1") cpp_quote(",") cpp_quote("LgCodePageEnumerator") cpp_quote(");") [ uuid(9045F113-8626-41C0-A61E-A73FBE5920D1) ] coclass LgCodePageEnumerator - { - interface ILgCodePageEnumerator; - }; - cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("B887505B-74DE-4ADC-A1D9-5553428C8D02") cpp_quote(",") cpp_quote("LgLanguageEnumerator") cpp_quote(");") [ uuid(B887505B-74DE-4ADC-A1D9-5553428C8D02) ] coclass LgLanguageEnumerator - { - interface ILgLanguageEnumerator; - }; cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("9E729461-F80D-4796-BA17-086BC61907F1") cpp_quote(",") cpp_quote("LgIcuConverterEnumerator") cpp_quote(");") [ uuid(9E729461-F80D-4796-BA17-086BC61907F1) ] coclass LgIcuConverterEnumerator { interface ILgIcuConverterEnumerator; @@ -5756,7 +5470,7 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IRegexMatcher") cpp { interface ILgIcuLocaleEnumerator; }; -#line 2118 "c:\\fwrepo\\fw\\src\\language\\Language.idh" +#line 1832 "c:\\fwrepo\\fw\\src\\language\\Language.idh" #line 34 "C:\\fwrepo\\fw\\Src\\Language\\LanguageTlb.idl" }; diff --git a/Lib/linux/Common/LanguageTlb.tlb b/Lib/linux/Common/LanguageTlb.tlb index 7da92ced4a..e036d6ae9f 100644 Binary files a/Lib/linux/Common/LanguageTlb.tlb and b/Lib/linux/Common/LanguageTlb.tlb differ diff --git a/Lib/linux/Common/ViewsTlb.h b/Lib/linux/Common/ViewsTlb.h index 247281add4..a856b4b653 100644 --- a/Lib/linux/Common/ViewsTlb.h +++ b/Lib/linux/Common/ViewsTlb.h @@ -4,7 +4,7 @@ /* File created by MIDL compiler version 7.00.0555 */ -/* at Tue Jul 23 10:57:52 2013 +/* at Tue Sep 10 15:51:55 2013 */ /* Compiler settings for C:\fwrepo\fw\Output\Common\ViewsTlb.idl: Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 @@ -371,12 +371,6 @@ typedef struct VwLayoutStream VwLayoutStream; #endif /* __VwLayoutStream_FWD_DEFINED__ */ -#ifndef __IIMEKeyboardSwitcher_FWD_DEFINED__ -#define __IIMEKeyboardSwitcher_FWD_DEFINED__ -typedef interface IIMEKeyboardSwitcher IIMEKeyboardSwitcher; -#endif /* __IIMEKeyboardSwitcher_FWD_DEFINED__ */ - - #ifndef __IPictureFactory_FWD_DEFINED__ #define __IPictureFactory_FWD_DEFINED__ typedef interface IPictureFactory IPictureFactory; @@ -862,7 +856,7 @@ enum VwBoundaryMark GENERIC_DECLARE_SMART_INTERFACE_PTR( IVwRootBox , -85DB7D7D-D47B-440e-A213-F62D5224C982 +A8944421-3A75-4DD5-A469-2EE251228A26 ); ATTACH_GUID_TO_CLASS(class, 705C1A9A-D6DC-4C3F-9B29-85F0C4F4B7BE @@ -1090,11 +1084,6 @@ IVwLayoutManager 13F3A421-4915-455b-B57F-AFD4073CFFA0 ); GENERIC_DECLARE_SMART_INTERFACE_PTR( -IIMEKeyboardSwitcher -, -4D2BC310-DADF-11DE-9E3A-0019DBF4566E -); -GENERIC_DECLARE_SMART_INTERFACE_PTR( IPictureFactory , 110B7E88-2968-11E0-B493-0019DBF4566E @@ -5320,7 +5309,7 @@ e41668f7-d506-4c8a-a5d7-feae5630797e #if defined(__cplusplus) && !defined(CINTERFACE) - MIDL_INTERFACE("85DB7D7D-D47B-440e-A213-F62D5224C982") + MIDL_INTERFACE("A8944421-3A75-4DD5-A469-2EE251228A26") IVwRootBox : public IVwNotifyChange { public: @@ -5612,13 +5601,6 @@ e41668f7-d506-4c8a-a5d7-feae5630797e /* [in] */ int ysTop, /* [in] */ int dysHeight) = 0; - virtual HRESULT STDMETHODCALLTYPE SetKeyboardForWs( - /* [in] */ /* external definition not present */ ILgWritingSystem *pws, - /* [out][in] */ BSTR *pbstrActiveKeymanKbd, - /* [out][in] */ int *pnActiveLangId, - /* [out][in] */ int *phklActive, - /* [out][in] */ ComBool *pfSelectLangPending) = 0; - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_MaxParasToScan( /* [retval][out] */ int *pcParas) = 0; @@ -6017,14 +5999,6 @@ e41668f7-d506-4c8a-a5d7-feae5630797e /* [in] */ int ysTop, /* [in] */ int dysHeight); - HRESULT ( STDMETHODCALLTYPE *SetKeyboardForWs )( - IVwRootBox * This, - /* [in] */ /* external definition not present */ ILgWritingSystem *pws, - /* [out][in] */ BSTR *pbstrActiveKeymanKbd, - /* [out][in] */ int *pnActiveLangId, - /* [out][in] */ int *phklActive, - /* [out][in] */ ComBool *pfSelectLangPending); - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_MaxParasToScan )( IVwRootBox * This, /* [retval][out] */ int *pcParas); @@ -6260,9 +6234,6 @@ e41668f7-d506-4c8a-a5d7-feae5630797e #define IVwRootBox_DrawRoot2(This,pvg,rcSrc,rcDst,fDrawSel,ysTop,dysHeight) \ ( (This)->lpVtbl -> DrawRoot2(This,pvg,rcSrc,rcDst,fDrawSel,ysTop,dysHeight) ) -#define IVwRootBox_SetKeyboardForWs(This,pws,pbstrActiveKeymanKbd,pnActiveLangId,phklActive,pfSelectLangPending) \ - ( (This)->lpVtbl -> SetKeyboardForWs(This,pws,pbstrActiveKeymanKbd,pnActiveLangId,phklActive,pfSelectLangPending) ) - #define IVwRootBox_get_MaxParasToScan(This,pcParas) \ ( (This)->lpVtbl -> get_MaxParasToScan(This,pcParas) ) @@ -9236,125 +9207,6 @@ class DECLSPEC_UUID("1CD09E06-6978-4969-A1FC-462723587C32") VwLayoutStream; #endif -#ifndef __IIMEKeyboardSwitcher_INTERFACE_DEFINED__ -#define __IIMEKeyboardSwitcher_INTERFACE_DEFINED__ - -/* interface IIMEKeyboardSwitcher */ -/* [unique][object][uuid] */ - - -#define IID_IIMEKeyboardSwitcher __uuidof(IIMEKeyboardSwitcher) - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("4D2BC310-DADF-11DE-9E3A-0019DBF4566E") - IIMEKeyboardSwitcher : public IUnknown - { - public: - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IMEKeyboard( - /* [retval][out] */ BSTR *pbstr) = 0; - - virtual /* [propput] */ HRESULT STDMETHODCALLTYPE put_IMEKeyboard( - /* [in] */ BSTR pbstr) = 0; - - virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_IMEKeyboardsCount( - /* [retval][out] */ int *pdCount) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetKeyboardName( - /* [in] */ int index, - /* [retval][out] */ BSTR *pbstr) = 0; - - virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; - - }; - -#else /* C style interface */ - - typedef struct IIMEKeyboardSwitcherVtbl - { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IIMEKeyboardSwitcher * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - __RPC__deref_out void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IIMEKeyboardSwitcher * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IIMEKeyboardSwitcher * This); - - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IMEKeyboard )( - IIMEKeyboardSwitcher * This, - /* [retval][out] */ BSTR *pbstr); - - /* [propput] */ HRESULT ( STDMETHODCALLTYPE *put_IMEKeyboard )( - IIMEKeyboardSwitcher * This, - /* [in] */ BSTR pbstr); - - /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_IMEKeyboardsCount )( - IIMEKeyboardSwitcher * This, - /* [retval][out] */ int *pdCount); - - HRESULT ( STDMETHODCALLTYPE *GetKeyboardName )( - IIMEKeyboardSwitcher * This, - /* [in] */ int index, - /* [retval][out] */ BSTR *pbstr); - - HRESULT ( STDMETHODCALLTYPE *Close )( - IIMEKeyboardSwitcher * This); - - END_INTERFACE - } IIMEKeyboardSwitcherVtbl; - - interface IIMEKeyboardSwitcher - { - CONST_VTBL struct IIMEKeyboardSwitcherVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - - -#define IIMEKeyboardSwitcher_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define IIMEKeyboardSwitcher_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define IIMEKeyboardSwitcher_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - - -#define IIMEKeyboardSwitcher_get_IMEKeyboard(This,pbstr) \ - ( (This)->lpVtbl -> get_IMEKeyboard(This,pbstr) ) - -#define IIMEKeyboardSwitcher_put_IMEKeyboard(This,pbstr) \ - ( (This)->lpVtbl -> put_IMEKeyboard(This,pbstr) ) - -#define IIMEKeyboardSwitcher_get_IMEKeyboardsCount(This,pdCount) \ - ( (This)->lpVtbl -> get_IMEKeyboardsCount(This,pdCount) ) - -#define IIMEKeyboardSwitcher_GetKeyboardName(This,index,pbstr) \ - ( (This)->lpVtbl -> GetKeyboardName(This,index,pbstr) ) - -#define IIMEKeyboardSwitcher_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#endif /* COBJMACROS */ - - -#endif /* C style interface */ - - - - -#endif /* __IIMEKeyboardSwitcher_INTERFACE_DEFINED__ */ - - #ifndef __IPictureFactory_INTERFACE_DEFINED__ #define __IPictureFactory_INTERFACE_DEFINED__ diff --git a/Lib/linux/Common/ViewsTlb.idl b/Lib/linux/Common/ViewsTlb.idl index 66a6c0cdb6..bac77d9218 100644 --- a/Lib/linux/Common/ViewsTlb.idl +++ b/Lib/linux/Common/ViewsTlb.idl @@ -1797,7 +1797,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 - cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IVwRootBox") cpp_quote(",") cpp_quote("85DB7D7D-D47B-440e-A213-F62D5224C982") cpp_quote(");") [ uuid("85DB7D7D-D47B-440e-A213-F62D5224C982"), object, pointer_default(unique) ] interface IVwRootBox : IVwNotifyChange + cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IVwRootBox") cpp_quote(",") cpp_quote("A8944421-3A75-4DD5-A469-2EE251228A26") cpp_quote(");") [ uuid("A8944421-3A75-4DD5-A469-2EE251228A26"), object, pointer_default(unique) ] interface IVwRootBox : IVwNotifyChange { @@ -2479,18 +2479,6 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 - HRESULT SetKeyboardForWs( - [in] ILgWritingSystem * pws, - [in, out] BSTR * pbstrActiveKeymanKbd, - [in, out] int * pnActiveLangId, - [in, out] int * phklActive, - [in, out] ComBool * pfSelectLangPending); - - - - - - @@ -2542,7 +2530,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 { interface IVwRootBox; }; -#line 2413 "c:\\fwrepo\\fw\\src\\views\\Views.idh" +#line 2401 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -4388,14 +4376,14 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 -#line 4259 "c:\\fwrepo\\fw\\src\\views\\Views.idh" +#line 4247 "c:\\fwrepo\\fw\\src\\views\\Views.idh" }; cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("CCE2A7ED-464C-4ec7-A0B0-E3C1F6B94C5A") cpp_quote(",") cpp_quote("VwStylesheet") cpp_quote(");") [ uuid(CCE2A7ED-464C-4ec7-A0B0-E3C1F6B94C5A) ] coclass VwStylesheet { interface IVwStylesheet; }; -#line 4266 "c:\\fwrepo\\fw\\src\\views\\Views.idh" +#line 4254 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -4472,7 +4460,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 { interface IVwPropertyStore; }; - #line 4343 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 4331 "c:\\fwrepo\\fw\\src\\views\\Views.idh" typedef [v1_enum] enum VwOverlayFlags @@ -4756,7 +4744,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 { interface IVwOverlay; }; - #line 4627 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 4615 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -4968,7 +4956,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 { interface IVwPrintContext; }; - #line 4839 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 4827 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -5279,7 +5267,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 { interface IVwPattern; }; - #line 5150 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 5138 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -5313,7 +5301,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 interface IVwTxtSrcInit2; interface IVwTextSource; }; - #line 5184 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 5172 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -5345,7 +5333,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 interface IVwTxtSrcInit; interface IVwTextSource; }; - #line 5216 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 5204 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -5387,7 +5375,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 { interface IVwSearchKiller; }; - #line 5258 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 5246 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -5467,7 +5455,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 { interface IVwDrawRootBuffered; }; - #line 5338 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 5326 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -5515,7 +5503,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("f6d10640-c00c-11d2-8078-0000 { interface IVwSynchronizer; }; - #line 5386 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 5374 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -5684,7 +5672,7 @@ cpp_quote("ATTACH_GUID_TO_CLASS(class,") cpp_quote("1CD09E06-6978-4969-A1FC-4627 { interface IVwLayoutStream; }; -#line 5555 "c:\\fwrepo\\fw\\src\\views\\Views.idh" +#line 5543 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -5780,30 +5768,6 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IVwLayoutManager") [out, retval] int * pdxpHeight); }; - - - - -cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IIMEKeyboardSwitcher") cpp_quote(",") cpp_quote("4D2BC310-DADF-11DE-9E3A-0019DBF4566E") cpp_quote(");") [ uuid("4D2BC310-DADF-11DE-9E3A-0019DBF4566E"), object, pointer_default(unique) ] interface IIMEKeyboardSwitcher : IUnknown -{ - - [propget] HRESULT IMEKeyboard( - [out, retval] BSTR * pbstr); - - - [propput] HRESULT IMEKeyboard( - [in] BSTR pbstr); - - [propget] HRESULT IMEKeyboardsCount( - [out, retval] int * pdCount); - - HRESULT GetKeyboardName( - [in] int index, - [out, retval] BSTR * pbstr); - - HRESULT Close(); -} - @@ -5821,7 +5785,7 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IIMEKeyboardSwitche { interface IPictureFactory; }; -#line 5692 "c:\\fwrepo\\fw\\src\\views\\Views.idh" +#line 5656 "c:\\fwrepo\\fw\\src\\views\\Views.idh" @@ -6055,7 +6019,7 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IIMEKeyboardSwitche { interface IVwWindow; }; - #line 5926 "c:\\fwrepo\\fw\\src\\views\\Views.idh" + #line 5890 "c:\\fwrepo\\fw\\src\\views\\Views.idh" typedef [v1_enum] enum VwMouseEvent @@ -6122,17 +6086,8 @@ cpp_quote("GENERIC_DECLARE_SMART_INTERFACE_PTR(") cpp_quote("IViewInputMgr") cpp HRESULT OnTextChange(); - - - - } #line 29 "C:\\fwrepo\\fw\\Src\\Views\\ViewsTlb.idl" - - - - - }; diff --git a/Lib/linux/Common/ViewsTlb.tlb b/Lib/linux/Common/ViewsTlb.tlb index da94ba65c8..0e8bd01012 100644 Binary files a/Lib/linux/Common/ViewsTlb.tlb and b/Lib/linux/Common/ViewsTlb.tlb differ diff --git a/Lib/linux/Common/idhfiles.MD5 b/Lib/linux/Common/idhfiles.MD5 index 0d7969b86f..0bd87370b8 100644 --- a/Lib/linux/Common/idhfiles.MD5 +++ b/Lib/linux/Common/idhfiles.MD5 @@ -1 +1 @@ -221c55d2215b1530a08a147b9509e298 \ No newline at end of file +96caff1714836a9b4bc6b7f82f670ec0 \ No newline at end of file diff --git a/Lib/linux/Debug/ibusdotnet.dll b/Lib/linux/Debug/ibusdotnet.dll deleted file mode 100755 index 2e61791681..0000000000 Binary files a/Lib/linux/Debug/ibusdotnet.dll and /dev/null differ diff --git a/Lib/linux/Release/ibusdotnet.dll b/Lib/linux/Release/ibusdotnet.dll index a4bfd676d0..2520da84bb 100755 Binary files a/Lib/linux/Release/ibusdotnet.dll and b/Lib/linux/Release/ibusdotnet.dll differ diff --git a/Lib/src/SilUtils/Win32Wrappers.cs b/Lib/src/SilUtils/Win32Wrappers.cs index 3ecc4575e7..b159eb930f 100644 --- a/Lib/src/SilUtils/Win32Wrappers.cs +++ b/Lib/src/SilUtils/Win32Wrappers.cs @@ -3428,16 +3428,76 @@ public enum NotificationMessages #region Imm32.dll + /// + /// These values are used with the ImmGetConversionStatus and ImmSetConversionStatus functions. + /// + [Flags] + public enum IME_CMODE: uint + { + /// Alphanumeric input mode. This is the default. + ALPHANUMERIC = 0x0000, + /// Set to 1 if NATIVE mode; 0 if ALPHANUMERIC mode. + NATIVE = 0x0001, + /// Set to 1 if KATAKANA mode; 0 if HIRAGANA mode. + KATAKANA = 0x0002, // only effect under IME_CMODE_NATIVE + /// Set to 1 if full shape mode; 0 if half shape mode. + FULLSHAPE = 0x0008, + /// Set to 1 if ROMAN input mode; 0 if not. + ROMAN = 0x0010, + /// Set to 1 if character code input mode; 0 if not. + CHARCODE = 0x0020, + /// Set to 1 if HANJA convert mode; 0 if not. + HANJACONVERT = 0x0040, + /// Set to 1 if Soft Keyboard mode; 0 if not. + SOFTKBD = 0x0080, + /// Set to 1 to prevent processing of conversions by IME; 0 if not. + NOCONVERSION = 0x0100, + /// Set to 1 if EUDC conversion mode; 0 if not. + EUDC = 0x0200, + /// Set to 1 if SYMBOL conversion mode; 0 if not. + SYMBOL = 0x0400, + /// Set to 1 if fixed conversion mode; 0 if not. + FIXED = 0x0800, + } + + /// ------------------------------------------------------------------------------------ + /// + /// Determines if the specified input locale has an IME. + /// + /// Input locale identifier. + /// Returns a true if the specified locale has an IME, or false + /// otherwise. + /// ------------------------------------------------------------------------------------ + [DllImport("imm32.dll", CharSet = CharSet.Auto)] + public static extern bool ImmIsIME(HandleRef hKL); + /// ------------------------------------------------------------------------------------ /// /// Retrieve the input context associated with the specified window. /// /// The window handle. /// Returns the handle to the input context. + /// An application should routinely use this function to retrieve the current + /// input context before attempting to access information in the context. + /// The application must call ImmReleaseContext when it is finished with the input + /// context. /// ------------------------------------------------------------------------------------ [DllImport("imm32.dll", CharSet=CharSet.Auto)] public static extern IntPtr ImmGetContext(HandleRef hWnd); + /// ------------------------------------------------------------------------------------ + /// + /// Releases the input context and unlocks the memory associated in the input context. + /// An application must call this function for each call to the ImmGetContext function. + /// + /// Handle to the window for which the input context was previously + /// retrieved. + /// Handle to the input context. + /// Returns true if successful, otherwise false. + /// ------------------------------------------------------------------------------------ + [DllImport("imm32.dll", CharSet = CharSet.Auto)] + public static extern bool ImmReleaseContext(HandleRef hWnd, HandleRef hIMC); + /// ------------------------------------------------------------------------------------ /// /// Retrieves the current conversion status. diff --git a/Makefile b/Makefile index fc953d271e..c8d89b764f 100644 --- a/Makefile +++ b/Makefile @@ -707,7 +707,10 @@ Fw: Fw-build: (cd $(BUILD_ROOT)/Build && xbuild /t:remakefw) +# Import certificates so mono applications can check ssl certificates, specifically when a build task +# downloads dependency dlls. Output md5sum of certificates imported for the record. Fw-build-package: + (cd $(mktemp -d) && wget -q "http://mxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1" && md5sum "certdata.txt?raw=1" && mozroots --import --sync --file "certdata.txt?raw=1") (cd $(BUILD_ROOT)/Build && xbuild /t:remakefw /property:config=release && xbuild /t:zipLocalizedLists) TE-run: ComponentsMap-nodep diff --git a/Src/Common/COMInterfaces/IcuWrappers.cs b/Src/Common/COMInterfaces/IcuWrappers.cs index 8f7213d360..c38fe7823f 100644 --- a/Src/Common/COMInterfaces/IcuWrappers.cs +++ b/Src/Common/COMInterfaces/IcuWrappers.cs @@ -889,6 +889,29 @@ public static int GetLanguageCode(string localeID, out string language, out UErr } } + /// ------------------------------------------------------------------------------------ + /// + /// Gets the language code for the specified locale. + /// + /// the locale to get the language code with + /// the language code for the locale. + /// Thrown if ICU method fails with an error. + /// + /// ------------------------------------------------------------------------------------ + public static string GetLanguageCode(string locale) + { + string languageCode; + UErrorCode err; + GetLanguageCode(locale, out languageCode, out err); + if (err != UErrorCode.U_ZERO_ERROR) + { + throw new ArgumentException( + string.Format("ICU uloc_getLanguage with argument '{0}' failed with error {1}", locale, err), + "locale"); + } + return languageCode; + } + /// ------------------------------------------------------------------------------------ /// /// Gets the script code for the specified locale. @@ -975,6 +998,29 @@ public static int GetCountryCode(string localeID, out string country, out UError } } + /// ------------------------------------------------------------------------------------ + /// + /// Gets the country code for the specified locale. + /// + /// the locale to get the country code with + /// The country code for the locale. + /// Thrown if ICU method fails with an error. + /// + /// ------------------------------------------------------------------------------------ + public static string GetCountryCode(string locale) + { + string countryCode; + UErrorCode err; + GetCountryCode(locale, out countryCode, out err); + if (err != UErrorCode.U_ZERO_ERROR) + { + throw new ArgumentException( + string.Format("ICU uloc_getCountry with argument '{0}' failed with error {1}", locale, err), + "locale"); + } + return countryCode; + } + /// ------------------------------------------------------------------------------------ /// /// Gets the variant code for the specified locale. diff --git a/Src/Common/Controls/Widgets/Widgets.csproj b/Src/Common/Controls/Widgets/Widgets.csproj index 2532141587..50c8d89b10 100644 --- a/Src/Common/Controls/Widgets/Widgets.csproj +++ b/Src/Common/Controls/Widgets/Widgets.csproj @@ -122,11 +122,11 @@ False - ..\..\..\..\Output\Debug\Palaso.dll + ..\..\..\..\Downloads\Palaso.dll False - ..\..\..\..\Output\Debug\Palaso.Media.dll + ..\..\..\..\Downloads\Palaso.Media.dll False diff --git a/Src/Common/Controls/XMLViews/XMLViewsTests/XMLViewsTests.csproj b/Src/Common/Controls/XMLViews/XMLViewsTests/XMLViewsTests.csproj index e845e8ca36..9d846c768b 100644 --- a/Src/Common/Controls/XMLViews/XMLViewsTests/XMLViewsTests.csproj +++ b/Src/Common/Controls/XMLViews/XMLViewsTests/XMLViewsTests.csproj @@ -198,12 +198,6 @@ - - ..\..\..\..\..\Output\Debug\Keyboarding.dll - - - ..\..\..\..\..\Output\Debug\KeyboardingTests.dll - @@ -236,12 +230,8 @@ - - UserControl - - - UserControl - + + @@ -283,4 +273,4 @@ - + \ No newline at end of file diff --git a/Src/Common/Controls/XMLViews/XMLViewsTests/XmlBrowseViewBaseTests.cs b/Src/Common/Controls/XMLViews/XMLViewsTests/XmlBrowseViewBaseTests.cs index 6de60dc27e..58f6963d81 100644 --- a/Src/Common/Controls/XMLViews/XMLViewsTests/XmlBrowseViewBaseTests.cs +++ b/Src/Common/Controls/XMLViews/XMLViewsTests/XmlBrowseViewBaseTests.cs @@ -470,12 +470,6 @@ public void DrawRoot2(IVwGraphics _vg, Rect rcSrc, Rect rcDst, bool fDrawSel, in throw new NotImplementedException(); } - /// - public void SetKeyboardForWs(ILgWritingSystem _ws, ref string _bstrActiveKeymanKbd, ref int _nActiveLangId, ref int _hklActive, ref bool _fSelectLangPending) - { - throw new NotImplementedException(); - } - /// public bool DoSpellCheckStep() { diff --git a/Src/Common/CoreImpl/CoreImpl.csproj b/Src/Common/CoreImpl/CoreImpl.csproj index 7e72c93cb6..cd51efad72 100644 --- a/Src/Common/CoreImpl/CoreImpl.csproj +++ b/Src/Common/CoreImpl/CoreImpl.csproj @@ -112,12 +112,12 @@ + - True True @@ -183,4 +183,4 @@ ../../../DistFiles - + \ No newline at end of file diff --git a/Src/Common/CoreImpl/CoreImplTests/PalasoWritingSystemManagerTests.cs b/Src/Common/CoreImpl/CoreImplTests/PalasoWritingSystemManagerTests.cs index b88df79d10..5740743e5b 100644 --- a/Src/Common/CoreImpl/CoreImplTests/PalasoWritingSystemManagerTests.cs +++ b/Src/Common/CoreImpl/CoreImplTests/PalasoWritingSystemManagerTests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Globalization; using System.IO; using System.Linq; using System.Threading; @@ -64,7 +65,7 @@ public void SerializeDeserialize() var ws = wsManager.Set("en-US"); ws.SpellCheckingId = "en-US"; ws.MatchedPairs = "matched pairs"; - ws.LCID = 0x409; + ((ILegacyWritingSystemDefinition)ws).WindowsLcid = 0x409.ToString(CultureInfo.InvariantCulture); ws.ValidChars = "valid characters"; ws.LegacyMapping = "legacy mapping"; wsManager.Save(); @@ -78,7 +79,7 @@ public void SerializeDeserialize() Assert.AreEqual("en-US", ws.SpellCheckingId); Assert.AreEqual("United States", ws.RegionSubtag.Name); Assert.AreEqual("matched pairs", ws.MatchedPairs); - Assert.AreEqual(0x409 , ws.LCID); + Assert.AreEqual(0x409.ToString(CultureInfo.InvariantCulture), ((ILegacyWritingSystemDefinition)ws).WindowsLcid); Assert.AreEqual("valid characters", ws.ValidChars); Assert.AreEqual("legacy mapping", ws.LegacyMapping); Assert.AreEqual("eng", ws.ISO3); @@ -266,9 +267,7 @@ public void Create() Assert.AreEqual("Latin", enWs.ScriptSubtag.Name); Assert.AreEqual("United States", enWs.RegionSubtag.Name); Assert.AreEqual("International Phonetic Alphabet", enWs.VariantSubtag.Name); - // On Linux InstalledInputLanguages or DefaultInputLanguage doesn't do anything sensible. - // see: https://bugzilla.novell.com/show_bug.cgi?id=613014 - Assert.AreEqual(MiscUtils.IsUnix ? 0x409 : InputLanguage.DefaultInputLanguage.Culture.LCID, enWs.LCID); + Assert.AreEqual(null, ((ILegacyWritingSystemDefinition)enWs).WindowsLcid); IWritingSystem chWs = wsManager.Create("zh-CN"); Assert.AreEqual("Man", chWs.Abbreviation); diff --git a/Src/Common/CoreImpl/GlobalFileWritingSystemStore.cs b/Src/Common/CoreImpl/GlobalFileWritingSystemStore.cs index 4cf9a2dae7..914349f7ea 100644 --- a/Src/Common/CoreImpl/GlobalFileWritingSystemStore.cs +++ b/Src/Common/CoreImpl/GlobalFileWritingSystemStore.cs @@ -42,7 +42,7 @@ public GlobalFileWritingSystemStore(string path) /// an already-existing writing system. Set should be called when there is a change /// that updates the RFC5646 information. /// - public void Set(WritingSystemDefinition ws) + public void Set(IWritingSystemDefinition ws) { m_mutex.WaitOne(); MemoryStream oldData = null; @@ -87,7 +87,7 @@ public void Set(WritingSystemDefinition ws) // configuration of the package which allows group access. using (new FileModeOverride()) { - adaptor.Write(writingSystemFilePath, ws, oldData); + adaptor.Write(writingSystemFilePath, (WritingSystemDefinition)ws, oldData); } } catch (UnauthorizedAccessException) @@ -110,7 +110,7 @@ public void Set(WritingSystemDefinition ws) /// /// Returns true if a call to Set should succeed, false if a call to Set would throw /// - public bool CanSet(WritingSystemDefinition ws) + public bool CanSet(IWritingSystemDefinition ws) { return true; } @@ -118,7 +118,7 @@ public bool CanSet(WritingSystemDefinition ws) /// /// Gets the writing system object for the given Store ID /// - public WritingSystemDefinition Get(string identifier) + public IWritingSystemDefinition Get(string identifier) { m_mutex.WaitOne(); try @@ -138,7 +138,7 @@ public WritingSystemDefinition Get(string identifier) /// If the given writing system were passed to Set, this function returns the /// new StoreID that would be assigned. /// - public string GetNewStoreIDWhenSet(WritingSystemDefinition ws) + public string GetNewStoreIDWhenSet(IWritingSystemDefinition ws) { if (ws == null) throw new ArgumentNullException("ws"); @@ -182,6 +182,20 @@ public IEnumerable FilterForTextIds(IEnumerable idsToFilter) return TextWritingSystems.Where(ws => idsToFilter.Contains(ws.Id)).Select(ws => ws.Id); } + /// + /// Only needed in local store + /// + /// + /// + /// + /// + /// + public IWritingSystemDefinition GetWsForInputLanguage(string layoutName, CultureInfo cultureInfo, + IWritingSystemDefinition wsCurrent, IWritingSystemDefinition[] candidates) + { + throw new NotImplementedException(); + } + /// /// Gives the total number of writing systems in the store /// @@ -205,7 +219,7 @@ public int Count /// Creates a new writing system object and returns it. Set will need to be called /// once identifying information has been changed in order to save it in the store. /// - public WritingSystemDefinition CreateNew() + public IWritingSystemDefinition CreateNew() { return new PalasoWritingSystem(); } @@ -241,7 +255,7 @@ public void Remove(string identifier) /// /// Returns a list of all writing system definitions in the store. /// - public IEnumerable AllWritingSystems + public IEnumerable AllWritingSystems { get { @@ -260,7 +274,7 @@ public IEnumerable AllWritingSystems /// /// Added to satisfy definition of IWritingSystemRepository...implementation adapted from WritingSystemRepositoryBase /// - public IEnumerable TextWritingSystems + public IEnumerable TextWritingSystems { get { return AllWritingSystems.Where(ws => !ws.IsVoice); } } @@ -268,7 +282,7 @@ public IEnumerable TextWritingSystems /// /// Added to satisfy definition of IWritingSystemRepository...implementation adapted from WritingSystemRepositoryBase /// - public IEnumerable VoiceWritingSystems + public IEnumerable VoiceWritingSystems { get { return AllWritingSystems.Where(ws => ws.IsVoice); } } @@ -290,7 +304,7 @@ public IEnumerable VoiceWritingSystems /// /// Returns a list of all writing system definitions in the store. (Obsolete) /// - public IEnumerable WritingSystemDefinitions + public IEnumerable WritingSystemDefinitions { get { return AllWritingSystems; } } @@ -300,7 +314,7 @@ public IEnumerable WritingSystemDefinitions /// to be called with this new duplicate once identifying information has been changed /// in order to place the new definition in the store. /// - public WritingSystemDefinition MakeDuplicate(WritingSystemDefinition definition) + public IWritingSystemDefinition MakeDuplicate(IWritingSystemDefinition definition) { return definition.Clone(); } @@ -354,7 +368,7 @@ public bool CanSave(WritingSystemDefinition ws, out string path) /// Returns a list of writing systems from rhs which are newer than ones in the store. /// // TODO: Maybe this should be IEnumerable .... which returns the identifiers. - public IEnumerable WritingSystemsNewerIn(IEnumerable rhs) + public IEnumerable WritingSystemsNewerIn(IEnumerable rhs) { throw new NotImplementedException(); } @@ -362,7 +376,7 @@ public IEnumerable WritingSystemsNewerIn(IEnumerable /// Added to satisfy definition of IWritingSystemRepository...do we need to do anything? /// - public void OnWritingSystemIDChange(WritingSystemDefinition ws, string oldId) + public void OnWritingSystemIDChange(IWritingSystemDefinition ws, string oldId) { } @@ -372,7 +386,7 @@ public void OnWritingSystemIDChange(WritingSystemDefinition ws, string oldId) /// The identifier. /// The writing system. /// - public bool TryGet(string identifier, out WritingSystemDefinition ws) + public bool TryGet(string identifier, out IWritingSystemDefinition ws) { m_mutex.WaitOne(); try @@ -392,11 +406,11 @@ public bool TryGet(string identifier, out WritingSystemDefinition ws) } } - private WritingSystemDefinition GetFromFilePath(string filePath) + private IWritingSystemDefinition GetFromFilePath(string filePath) { try { - WritingSystemDefinition ws = CreateNew(); + var ws = (WritingSystemDefinition)CreateNew(); var adaptor = new FwLdmlAdaptor(); adaptor.Read(filePath, ws); ws.StoreID = ((PalasoWritingSystem)ws).RFC5646; @@ -409,7 +423,7 @@ private WritingSystemDefinition GetFromFilePath(string filePath) } } - private string GetFilePath(WritingSystemDefinition ws) + private string GetFilePath(IWritingSystemDefinition ws) { return Path.Combine(m_path, GetFileName(ws)); } @@ -419,7 +433,7 @@ private string GetFilePath(string identifier) return Path.Combine(m_path, GetFileName(identifier)); } - private static string GetFileName(WritingSystemDefinition ws) + private static string GetFileName(IWritingSystemDefinition ws) { if (string.IsNullOrEmpty(ws.Language)) return ""; @@ -440,5 +454,10 @@ public WritingSystemCompatibility CompatibilityMode { get { return WritingSystemCompatibility.Strict; } } + + /// + /// Only used in local store. + /// + public string LocalKeyboardSettings { get; set; } } } diff --git a/Src/Common/CoreImpl/KeyboardHelper.cs b/Src/Common/CoreImpl/KeyboardHelper.cs index a7511dfc3f..f9ff7b0e05 100644 --- a/Src/Common/CoreImpl/KeyboardHelper.cs +++ b/Src/Common/CoreImpl/KeyboardHelper.cs @@ -23,7 +23,8 @@ namespace SIL.CoreImpl { /// ---------------------------------------------------------------------------------------- /// - /// This class assists with keyboard switching. + /// This is an almost-obsolete class with one function left. There is still one place where + /// we need to know a Keyman keyboard is active. /// /// ---------------------------------------------------------------------------------------- public static class KeyboardHelper @@ -35,17 +36,15 @@ public static class KeyboardHelper /// private sealed class KeyboardHelperImpl: IDisposable { - private readonly ILgTextServices m_lts; private readonly ILgKeymanHandler m_keymanHandler; #region Constructor + public KeyboardHelperImpl() - { + { m_keymanHandler = LgKeymanHandlerClass.Create(); - - if (!MiscUtils.IsUnix) - m_lts = LgTextServicesClass.Create(); } + #endregion #region Disposable stuff @@ -87,32 +86,10 @@ private void Dispose(bool fDisposing) } if (m_keymanHandler != null && Marshal.IsComObject(m_keymanHandler)) Marshal.ReleaseComObject(m_keymanHandler); - if (m_lts != null && Marshal.IsComObject(m_lts)) - Marshal.ReleaseComObject(m_lts); IsDisposed = true; } #endregion - /// ------------------------------------------------------------------------------------ - /// - /// Activates the specified keyboard. - /// - /// ------------------------------------------------------------------------------------ - public bool ActivateKeyboard(int lcid, string keymanKbd, ref int activeLangId, - ref string activeKeymanKbd) - { - if (MiscUtils.IsUnix) - return false; - - //System.Diagnostics.Debug.WriteLine( - // "KeyboardHelper.ActivateKeyboard() -> ILgTextServices::SetKeyboard(" + lcid + ")"); - bool fSelectLangPending = false; - m_lts.SetKeyboard(lcid, keymanKbd, ref activeLangId, ref activeKeymanKbd, - ref fSelectLangPending); - - return fSelectLangPending; - } - /// ------------------------------------------------------------------------------------ /// /// Gets the active Keyman keyboard or an empty string if there is no active Keyman @@ -123,6 +100,8 @@ public string ActiveKeymanKeyboard { get { + if (MiscUtils.IsUnix) + return ""; string sKeymanKbd = m_keymanHandler.ActiveKeyboardName; // This constant '(None)' can not be localized until the C++ version is localized. @@ -171,64 +150,6 @@ public static void Release() } } - /// ----------------------------------------------------------------------------------- - /// - /// Activate the given keyboard. - /// - /// On Windows 98, sending this message unnecessarily destroys - /// the current keystroke context, so only do it when we're actually switching - /// - /// ----------------------------------------------------------------------------------- - public static void ActivateDefaultKeyboard() - { - InputLanguage inputLng = InputLanguage.DefaultInputLanguage; - ActivateKeyboard(inputLng.Culture.LCID); - } - - /// ------------------------------------------------------------------------------------ - /// - /// Activates the specified keyboard. - /// - /// ------------------------------------------------------------------------------------ - public static bool ActivateKeyboard(int lcid) - { - return ActivateKeyboard(lcid, null); - } - - /// ------------------------------------------------------------------------------------ - /// - /// Activates the specified keyboard. - /// - /// ------------------------------------------------------------------------------------ - public static bool ActivateKeyboard(int lcid, string keymanKbd) - { - int langId = 0; - string activeKeymanKbd = null; - return ActivateKeyboard(lcid, keymanKbd, ref langId, ref activeKeymanKbd); - } - - /// ------------------------------------------------------------------------------------ - /// - /// Activates the specified keyboard. - /// - /// ------------------------------------------------------------------------------------ - public static bool ActivateKeyboard(int lcid, ref int activeLangId, - ref string activeKeymanKbd) - { - return ActivateKeyboard(lcid, null, ref activeLangId, ref activeKeymanKbd); - } - - /// ------------------------------------------------------------------------------------ - /// - /// Activates the specified keyboard. - /// - /// ------------------------------------------------------------------------------------ - public static bool ActivateKeyboard(int lcid, string keymanKbd, ref int activeLangId, - ref string activeKeymanKbd) - { - return KeyboardHelperObject.ActivateKeyboard(lcid, keymanKbd, ref activeLangId, ref activeKeymanKbd); - } - /// ------------------------------------------------------------------------------------ /// /// Gets the active Keyman keyboard or an empty string if there is no active Keyman diff --git a/Src/Common/CoreImpl/LocalFileWritingSystemStore.cs b/Src/Common/CoreImpl/LocalFileWritingSystemStore.cs index b661c8189d..bc4443d620 100644 --- a/Src/Common/CoreImpl/LocalFileWritingSystemStore.cs +++ b/Src/Common/CoreImpl/LocalFileWritingSystemStore.cs @@ -39,7 +39,7 @@ public LocalFileWritingSystemStore(string path, IFwWritingSystemStore globalStor /// Creates a new writing system definition. /// /// - public override WritingSystemDefinition CreateNew() + public override IWritingSystemDefinition CreateNew() { return new PalasoWritingSystem(); } @@ -95,7 +95,7 @@ public override void Save() /// The identifier. /// The writing system. /// - public bool TryGet(string identifier, out WritingSystemDefinition ws) + public bool TryGet(string identifier, out IWritingSystemDefinition ws) { if (Contains(identifier)) { @@ -168,13 +168,13 @@ public bool CanSave(WritingSystemDefinition ws, out string filePath) /// /// /// The ws. - protected override void OnChangeNotifySharedStore(WritingSystemDefinition ws) + protected override void OnChangeNotifySharedStore(IWritingSystemDefinition ws) { base.OnChangeNotifySharedStore(ws); if (m_globalStore != null) { - WritingSystemDefinition globalWs; + IWritingSystemDefinition globalWs; if (m_globalStore.TryGet(ws.Id, out globalWs)) { if (ws.DateModified > globalWs.DateModified) diff --git a/Src/Common/CoreImpl/PalasoWritingSystem.cs b/Src/Common/CoreImpl/PalasoWritingSystem.cs index c8b309dfd8..e7ae435ab9 100644 --- a/Src/Common/CoreImpl/PalasoWritingSystem.cs +++ b/Src/Common/CoreImpl/PalasoWritingSystem.cs @@ -331,61 +331,6 @@ public override string DefaultFontName } } - /// - /// Gets or sets the Windows locale ID. - /// - /// The LCID. - public int LCID - { - get - { - lock (m_syncRoot) - { - if (m_lcid == 0) - { - // On Linux InstalledInputLanguages or DefaultInputLanguage doesn't do anything sensible. - // see: https://bugzilla.novell.com/show_bug.cgi?id=613014 - // so just default to en-US. - if (MiscUtils.IsUnix) - return new CultureInfo("en-US").LCID; - var defaultLang = InputLanguage.DefaultInputLanguage; - - InputLanguage first = null; - foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages) - { - try - { - if (lang.Culture.IetfLanguageTag != Id) - continue; - first = lang; - break; - } - catch (ArgumentException e) - { - // Skip unsupported cultures. - } - } - var inputLanguage = first ?? InputLanguage.DefaultInputLanguage; - return inputLanguage.Culture.LCID; - } - return m_lcid; - } - } - - set - { - lock (m_syncRoot) - { - if (m_lcid != value) - { - m_lcid = value; - m_currentLcid = value; - Modified = true; - } - } - } - } - /// /// Gets or sets a value indicating whether the script is right-to-left. /// @@ -1142,12 +1087,14 @@ public void Copy(IWritingSystem source) lock (pws.m_syncRoot) { // ILgWritingSystem properties - lcid = pws.LCID; spellCheckingId = pws.SpellCheckingId; rtol = pws.RightToLeftScript; defFontFeats = pws.DefaultFontFeatures; defFont = pws.DefaultFontName; keyboard = pws.Keyboard; + // This will put the keyboard actually selected into the permanent WS's list. + // We don't need to remember any others that got temporarily added to KnownKeyboards for testing. + LocalKeyboard = pws.LocalKeyboard; // IWritingSystem properties abbr = pws.Abbreviation; @@ -1172,7 +1119,6 @@ public void Copy(IWritingSystem source) lock (m_syncRoot) { // ILgWritingSystem properties - LCID = lcid; SpellCheckingId = spellCheckingId; RightToLeftScript = rtol; DefaultFontFeatures = defFontFeats; diff --git a/Src/Common/CoreImpl/PalasoWritingSystemManager.cs b/Src/Common/CoreImpl/PalasoWritingSystemManager.cs index e3b4a56c67..ef9ed8fe3f 100644 --- a/Src/Common/CoreImpl/PalasoWritingSystemManager.cs +++ b/Src/Common/CoreImpl/PalasoWritingSystemManager.cs @@ -10,6 +10,7 @@ using System.Xml; using System.Collections.Generic; using Palaso.WritingSystems; +using SIL.CoreImpl.Properties; using SIL.FieldWorks.Common.COMInterfaces; using SIL.Utils; @@ -255,7 +256,7 @@ public IWritingSystem Create(string identifier) { if (m_globalStore != null) { - WritingSystemDefinition globalWs; + IWritingSystemDefinition globalWs; if (m_globalStore.TryGet(identifier, out globalWs)) return (PalasoWritingSystem) m_globalStore.MakeDuplicate(globalWs); } @@ -413,7 +414,7 @@ public IWritingSystem Get(string identifier) { lock (m_syncRoot) { - WritingSystemDefinition wrsys; + IWritingSystemDefinition wrsys; if (!m_localStore.TryGet(identifier, out wrsys)) { if (identifier.StartsWith("cmn")) @@ -667,6 +668,8 @@ public void Save() } } m_localStore.Save(); + Settings.Default.LocalKeyboards = m_localStore.LocalKeyboardSettings; + Settings.Default.Save(); } } @@ -928,7 +931,7 @@ public interface IFwWritingSystemStore : IWritingSystemRepository /// The identifier. /// The writing system. /// - bool TryGet(string identifier, out WritingSystemDefinition ws); + bool TryGet(string identifier, out IWritingSystemDefinition ws); /// /// True if it is capable of saving changes to the specified WS. @@ -955,7 +958,7 @@ public MemoryWritingSystemStore() : /// Creates a new writing system definition. /// /// - public override WritingSystemDefinition CreateNew() + public override IWritingSystemDefinition CreateNew() { return new PalasoWritingSystem(); } @@ -999,7 +1002,7 @@ where ws.MarkedForDeletion foreach (string id in idsToRemove) Remove(id); - List allDefs = (from ws in AllWritingSystems + var allDefs = (from ws in AllWritingSystems where CanSet(ws) select ws).ToList(); foreach (WritingSystemDefinition ws in allDefs) @@ -1025,7 +1028,7 @@ public bool CanSave(WritingSystemDefinition ws, out string path) /// The identifier. /// The writing system. /// - public bool TryGet(string identifier, out WritingSystemDefinition ws) + public bool TryGet(string identifier, out IWritingSystemDefinition ws) { if (Contains(identifier)) { @@ -1060,7 +1063,7 @@ public LocalMemoryWritingSystemStore(IFwWritingSystemStore globalStore) /// /// /// The ws. - protected override void OnChangeNotifySharedStore(WritingSystemDefinition ws) + protected override void OnChangeNotifySharedStore(IWritingSystemDefinition ws) { base.OnChangeNotifySharedStore(ws); @@ -1186,9 +1189,8 @@ protected override void ReadTopLevelSpecialElement(XmlReader reader, WritingSyst } } } - int lcid; - if (int.TryParse(GetSpecialValue(reader, "fw", "windowsLCID"), out lcid)) - fwWs.LCID = lcid; + var lcidString = GetSpecialValue(reader, "fw", "windowsLCID"); + ((ILegacyWritingSystemDefinition)fwWs).WindowsLcid = lcidString; while (reader.NodeType != XmlNodeType.EndElement) reader.Read(); @@ -1219,8 +1221,9 @@ protected override void WriteTopLevelSpecialElements(XmlWriter writer, XmlReader WriteSpecialValue(writer, "fw", "scriptName", fwWs.ScriptName); WriteSpecialValue(writer, "fw", "validChars", fwWs.ValidChars); WriteSpecialValue(writer, "fw", "variantName", fwWs.VariantName); - if (fwWs.LCID != 0) - WriteSpecialValue(writer, "fw", "windowsLCID", fwWs.LCID.ToString()); + var legacyWs = (ILegacyWritingSystemDefinition)fwWs; + if (!string.IsNullOrEmpty(legacyWs.WindowsLcid)) + WriteSpecialValue(writer, "fw", "windowsLCID", legacyWs.WindowsLcid); writer.WriteEndElement(); } } diff --git a/Src/Common/CoreImpl/Properties/Settings.Designer.cs b/Src/Common/CoreImpl/Properties/Settings.Designer.cs index 426f9a82d8..5c5314446f 100644 --- a/Src/Common/CoreImpl/Properties/Settings.Designer.cs +++ b/Src/Common/CoreImpl/Properties/Settings.Designer.cs @@ -96,5 +96,20 @@ public bool IsBTE { this["IsBTE"] = value; } } - } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string LocalKeyboards + { + get + { + return ((string)(this["LocalKeyboards"])); + } + set + { + this["LocalKeyboards"] = value; + } + } + } } diff --git a/Src/Common/CoreImpl/Properties/Settings.settings b/Src/Common/CoreImpl/Properties/Settings.settings index d021604b32..2e2898c949 100644 --- a/Src/Common/CoreImpl/Properties/Settings.settings +++ b/Src/Common/CoreImpl/Properties/Settings.settings @@ -17,5 +17,8 @@ True + + + - + \ No newline at end of file diff --git a/Src/Common/CoreImpl/app.config b/Src/Common/CoreImpl/app.config index da08ee1cc6..59d6d4736e 100644 --- a/Src/Common/CoreImpl/app.config +++ b/Src/Common/CoreImpl/app.config @@ -19,6 +19,9 @@ True + + + diff --git a/Src/Common/FieldWorks/FieldWorks.cs b/Src/Common/FieldWorks/FieldWorks.cs index f1d2c255e0..3a6419db5b 100644 --- a/Src/Common/FieldWorks/FieldWorks.cs +++ b/Src/Common/FieldWorks/FieldWorks.cs @@ -32,6 +32,7 @@ using System.Windows.Forms; using Microsoft.Win32; using Palaso.Reporting; +using Palaso.UI.WindowsForms.Keyboarding; using SIL.FieldWorks.Common.COMInterfaces; using SIL.FieldWorks.Common.Controls; using SIL.FieldWorks.Common.Framework; @@ -232,6 +233,9 @@ static int Main(string[] rgArgs) // initialize ICU Icu.InitIcuDataDir(); + // initialize Palaso keyboarding + KeyboardController.Initialize(); + FwAppArgs appArgs = new FwAppArgs(rgArgs); s_noUserInterface = appArgs.NoUserInterface; s_appServerMode = appArgs.AppServerMode; @@ -3402,6 +3406,8 @@ private static void StaticDispose() s_serviceChannel = null; } + KeyboardController.Shutdown(); + GracefullyShutDown(); if (s_threadHelper != null) @@ -3409,7 +3415,6 @@ private static void StaticDispose() s_threadHelper = null; FwRegistrySettings.Release(); - KeyboardHelper.Release(); } #if DEBUG diff --git a/Src/Common/FieldWorks/FieldWorks.csproj b/Src/Common/FieldWorks/FieldWorks.csproj index cb09c4a0e8..65ae5049c2 100644 --- a/Src/Common/FieldWorks/FieldWorks.csproj +++ b/Src/Common/FieldWorks/FieldWorks.csproj @@ -1,4 +1,4 @@ - + Debug @@ -123,6 +123,10 @@ False ..\..\..\Downloads\Palaso.dll + + False + ..\..\..\Downloads\PalasoUIWindowsForms.dll + False ..\..\..\DistFiles\PaToFdoInterfaces.dll @@ -176,10 +180,10 @@ \usr\lib\cli\geckofx-14.0.1\geckofx-core-14.dll - + \usr\lib\cli\geckofx-14.0.1\Geckofx-Winforms-14.dll - + PreserveNewest @@ -313,4 +317,4 @@ --> - + \ No newline at end of file diff --git a/Src/Common/Framework/Framework.csproj b/Src/Common/Framework/Framework.csproj index 3e9389b968..1bd34cd8b7 100644 --- a/Src/Common/Framework/Framework.csproj +++ b/Src/Common/Framework/Framework.csproj @@ -113,10 +113,6 @@ ..\..\..\Output\Debug\COMInterfaces.dll False - - ..\..\..\Output\Debug\Controls.Design.dll - False - False ..\..\..\Output\Debug\CoreImpl.dll @@ -157,6 +153,10 @@ False + + False + ..\..\..\Downloads\Palaso.dll + ..\..\..\Output\Debug\Reporting.dll False @@ -244,9 +244,7 @@ Code - - UserControl - + diff --git a/Src/Common/Framework/FwMainWnd.cs b/Src/Common/Framework/FwMainWnd.cs index 71c53916f7..d436194b8e 100644 --- a/Src/Common/Framework/FwMainWnd.cs +++ b/Src/Common/Framework/FwMainWnd.cs @@ -19,6 +19,7 @@ using System.Linq; using System.Windows.Forms; using Microsoft.Win32; +using Palaso.WritingSystems; using SIL.CoreImpl; using SIL.FieldWorks.Common.COMInterfaces; using SIL.FieldWorks.Common.Controls; @@ -2825,9 +2826,8 @@ protected virtual bool OnFileProjectProperties(object args) // so we manually switch to the default keyboard here so that the Project Properties // dialog displays the default keyboard. When we're all done we switch back to the // keyboard we had recently. (TE-4683) - int oldWs = 0; - if (EditingHelper != null) // JohnT: guard against e.g. TE-6543. - oldWs = EditingHelper.SetKeyboardForWs(-1); + var oldWsd = Keyboard.Controller.ActiveKeyboard; + Keyboard.Controller.ActivateDefaultKeyboard(); // Disable windows on cache to prevent painting when fonts for writing system are changed m_app.EnableMainWindows(false); bool fDbRenamed = false; @@ -2879,8 +2879,8 @@ protected virtual bool OnFileProjectProperties(object args) if (!IsDisposed) { // Restore the previous keyboard - if (oldWs != 0 && EditingHelper != null) - EditingHelper.SetKeyboardForWs(oldWs); + if (oldWsd != null) + oldWsd.Activate(); } } } diff --git a/Src/Common/KeyboardSwitcher/AssemblyInfo.cs b/Src/Common/KeyboardSwitcher/AssemblyInfo.cs deleted file mode 100644 index 53dc64e4fc..0000000000 --- a/Src/Common/KeyboardSwitcher/AssemblyInfo.cs +++ /dev/null @@ -1,17 +0,0 @@ -// -------------------------------------------------------------------------------------------- -#region // Copyright © 2002, SIL International. All Rights Reserved. -// -// Copyright © 2002, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -#endregion -// -------------------------------------------------------------------------------------------- -using System.Reflection; -using System.Runtime.CompilerServices; - -[assembly: AssemblyTitle("KeyboardSwitcher")] - -[assembly: System.Runtime.InteropServices.ComVisible(false)] -[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("KeyboardSwitcherTests")] diff --git a/Src/Common/KeyboardSwitcher/BuildInclude.targets b/Src/Common/KeyboardSwitcher/BuildInclude.targets deleted file mode 100644 index 640e792b9e..0000000000 --- a/Src/Common/KeyboardSwitcher/BuildInclude.targets +++ /dev/null @@ -1,20 +0,0 @@ - - - - - ../../../Lib/linux/$(Configuration) - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Src/Common/KeyboardSwitcher/GlobalCachedInputContext.cs b/Src/Common/KeyboardSwitcher/GlobalCachedInputContext.cs deleted file mode 100644 index f093224d36..0000000000 --- a/Src/Common/KeyboardSwitcher/GlobalCachedInputContext.cs +++ /dev/null @@ -1,35 +0,0 @@ -#if __MonoCS__ -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; -using SIL.FieldWorks.Common.COMInterfaces; -using IBusDotNet; -using NDesk.DBus; - -namespace SIL.FieldWorks.Views -{ - /// - /// a global cache used only to reduce traffic with ibus via dbus. - /// - public static class GlobalCachedInputContext - { - /// - /// Caches the current InputContext. - /// - public static InputContext InputContext { get; set; } - /// - /// Cache the keyboard name of the InputContext. - /// - public static string KeyboardName { get; set; } - - /// - /// Clear the cached InputContext details. - /// - public static void Clear() - { - KeyboardName = String.Empty; - InputContext = null; - } - } -} -#endif \ No newline at end of file diff --git a/Src/Common/KeyboardSwitcher/KeyboardSwitcher.cs b/Src/Common/KeyboardSwitcher/KeyboardSwitcher.cs deleted file mode 100644 index df9db2ecd6..0000000000 --- a/Src/Common/KeyboardSwitcher/KeyboardSwitcher.cs +++ /dev/null @@ -1,152 +0,0 @@ -#if __MonoCS__ -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using IBusDotNet; -using SIL.FieldWorks.Common.COMInterfaces; -using SIL.FieldWorks.Resources; - -namespace SIL.FieldWorks.Views -{ - /// - /// This class allows COM clients to switch IME keyboards - /// - [Guid("4ED1E8bC-DAdE-11DE-B350-0019DBf4566E")] - public class KeyboardSwitcher : IIMEKeyboardSwitcher, IDisposable - { - private IBusConnection Connection = IBusConnectionFactory.Create(); - - #region IDisposable implementation -#if DEBUG - ~KeyboardSwitcher() - { - Dispose(false); - } -#endif - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool fDisposing) - { - System.Diagnostics.Debug.WriteLineIf(!fDisposing, "****** Missing Dispose() call for " + GetType().Name + ". ****** "); - if (fDisposing) - { - if (Connection != null) - Connection.Dispose(); - } - Connection = null; - } - #endregion - - #region IIMEKeyboardSwitcher implementation - - /// - /// get/set the keyboard of the current focused inputContext - /// get returns String.Empty if not connected to ibus - /// - public string IMEKeyboard - { - get - { - if (Connection == null || GlobalCachedInputContext.InputContext == null) - return String.Empty; - - InputContext context = GlobalCachedInputContext.InputContext; - - object engine = context.GetEngine(); - IBusEngineDesc engineDesc = IBusEngineDesc.GetEngineDesc(engine); - return engineDesc.LongName; - } - - set - { - try - { - if (Connection == null || GlobalCachedInputContext.InputContext == null) - return; - - // check our cached value - if (GlobalCachedInputContext.KeyboardName == value) - return; - - InputContext context = GlobalCachedInputContext.InputContext; - - if (String.IsNullOrEmpty(value) || value == ResourceHelper.GetResourceString("kstidKeyboardNone")) - { - context.Reset(); - GlobalCachedInputContext.KeyboardName = value; - context.Disable(); - return; - } - - var ibusWrapper = new IBusDotNet.InputBusWrapper(Connection); - object[] engines = ibusWrapper.InputBus.ListActiveEngines(); - - foreach (object engine in engines) - { - IBusEngineDesc engineDesc = IBusEngineDesc.GetEngineDesc(engine); - if (value == FormatKeyboardIdentifier(engineDesc)) - { - context.SetEngine(engineDesc.LongName); - break; - } - } - - GlobalCachedInputContext.KeyboardName = value; - } - catch (Exception e) - { - Debug.WriteLine(String.Format("KeyboardSwitcher changing keyboard failed, is kfml/ibus running? {0}", e)); - } - } - } - - /// Get Ibus keyboard at given index - public string GetKeyboardName(int index) - { - if (Connection == null) - return String.Empty; - var ibusWrapper = new IBusDotNet.InputBusWrapper(Connection); - object[] engines = ibusWrapper.InputBus.ListActiveEngines(); - IBusEngineDesc engineDesc = IBusEngineDesc.GetEngineDesc(engines[index]); - - return FormatKeyboardIdentifier(engineDesc); - } - - /// - /// Produce IBus keyboard identifier which is simular to the actual ibus switcher menu. - /// - internal string FormatKeyboardIdentifier(IBusEngineDesc engineDesc) - { - string id = engineDesc.Language; - string languageName = string.IsNullOrEmpty(id) ? ResourceHelper.GetResourceString("kstidOtherLanguage") : Icu.GetDisplayName(id); - return String.Format("{0} - {1}", languageName, engineDesc.Name); - } - - /// number of ibus keyboards - public int IMEKeyboardsCount - { - get - { - if (Connection == null) - return 0; - - var ibusWrapper = new IBusDotNet.InputBusWrapper(Connection); - object[] engines = ibusWrapper.InputBus.ListActiveEngines(); - return engines.Length; - } - } - - /// - public void Close() - { - Dispose(); - } - #endregion - } -} -#endif diff --git a/Src/Common/KeyboardSwitcher/KeyboardSwitcher.csproj b/Src/Common/KeyboardSwitcher/KeyboardSwitcher.csproj deleted file mode 100644 index 586a337b0b..0000000000 --- a/Src/Common/KeyboardSwitcher/KeyboardSwitcher.csproj +++ /dev/null @@ -1,118 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {21FC0FD4-E1FD-434F-A954-D10A5E9EEFE5} - Library - KeyboardSwitcher - - - 3.5 - - - false - KeyboardSwitcher - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - True - full - False - 168,169,219,414,649,1635,1702,1701 - ..\..\..\Output\Debug - DEBUG - prompt - 4 - AllRules.ruleset - x86 - - - none - False - 168,169,219,414,649,1635,1702,1701 - ..\..\..\Output\Release - prompt - 4 - AllRules.ruleset - x86 - - - - - - CommonAssemblyInfo.cs - - - - - - - - - - ..\..\..\Output\Debug\NDesk.DBus.dll - - - ..\..\..\Output\Debug\FwResources.dll - - - ..\..\..\Output\Debug\ibusdotnet.dll - - - ..\..\..\Output\Debug\BasicUtils.dll - - - ..\..\..\Output\Debug\COMInterfaces.dll - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - - - false - - - False - - - false - - - False - - - false - - - False - .NET Framework 3.5 SP1 - false - - - - - - - diff --git a/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/IBusDotNetTests.cs b/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/IBusDotNetTests.cs deleted file mode 100644 index 3b61674db5..0000000000 --- a/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/IBusDotNetTests.cs +++ /dev/null @@ -1,62 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using NUnit.Framework; -using IBusDotNet; - -namespace KeyboardSwitcherTests -{ - /// - /// Tests for ibusdotnet. These tests really belong to ibusdotnet, but they are here so that - /// we run them regularly in order to identify problems with updated ibus libraries (which - /// might change the API) - /// - [TestFixture] - public class IBusDotNetTests // can't derive from BaseTest because of circular dependency - { - private IBusConnection Connection; - - /// - /// Close connection to ibus - /// - [TearDown] - public void TearDown() - { - if (Connection != null) - Connection.Dispose(); - Connection = null; - } - - /// - /// Tests that we can get the ibus engine. This will fail if the ibus API changed. - /// - [Test] - public void CanGetEngineDesc() - { - Connection = IBusConnectionFactory.Create(); - if (Connection == null) - { - Assert.Ignore("Can't run this test without ibus running."); - return; - } - - var ibusWrapper = new IBusDotNet.InputBusWrapper(Connection); - object[] engines = ibusWrapper.InputBus.ListActiveEngines(); - if (engines.Length == 0) - { - Assert.Ignore("Can't run this test without any ibus keyboards installed."); - return; - } - - Assert.IsNotNull(IBusEngineDesc.GetEngineDesc(engines[0])); - } - } -} -#endif diff --git a/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/KeyboardSwitcherTests.cs b/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/KeyboardSwitcherTests.cs deleted file mode 100644 index c7a862dec3..0000000000 --- a/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/KeyboardSwitcherTests.cs +++ /dev/null @@ -1,209 +0,0 @@ -#if __MonoCS__ -using System; -using IBusDotNet; -using NUnit.Framework; -using SIL.FieldWorks.Views; -using SIL.Utils; - -namespace KeyboardSwitcherTests -{ - [TestFixture] - public class KeyboardSwitcherTests - { - /// FWNX-442: Keyboard not turning off when it should - [Test] - public void IMEKeyboard_SetNoKeyboard_DisablesKeyboard() - { - using (var switcher = new KeyboardSwitcher()) - { - // Create an input context - using (var controller = new DummyInputBusController()) - { - controller.Focus(); - var context = GlobalCachedInputContext.InputContext; - - // Set input method using the first available keyboard - if (switcher.IMEKeyboardsCount <= 0) - { - Console.WriteLine("Warning: Test IMEKeyboard_SetNoKeyboard_DisablesKeyboard unable to run since no iBus keyboards available or no iBus running."); - return; // Can't test without an iBus engine to use. - } - switcher.IMEKeyboard = switcher.GetKeyboardName(0); - Assert.That(context.IsEnabled(), Is.True, "Keyboard input method should be enabled when set"); - - // Turn off input method - switcher.IMEKeyboard = null; - Assert.That(context.IsEnabled(), Is.False, "Should have disabled keyboard input method"); - } - } - } - } - - class DummyInputBusController: IDisposable - { - protected IBusConnection m_connection; - protected InputContext m_inputContext; - protected IBusDotNet.InputBusWrapper m_ibus; - - /// - public DummyInputBusController() - { - m_connection = IBusConnectionFactory.Create(); - - if (m_connection == null) - return; - - m_ibus = new IBusDotNet.InputBusWrapper(m_connection); - m_inputContext = m_ibus.InputBus.CreateInputContext("UnitTest"); - m_inputContext.SetCapabilities(Capabilities.Focus | Capabilities.PreeditText); - } - - #region Disposable stuff - #if DEBUG - /// - ~DummyInputBusController() - { - Dispose(false); - } - #endif - - /// - public bool IsDisposed - { - get; - private set; - } - - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - protected virtual void Dispose(bool fDisposing) - { - System.Diagnostics.Debug.WriteLineIf(!fDisposing, "****** Missing Dispose() call for " + GetType().Name + ". ****** "); - if (fDisposing && !IsDisposed) - { - // dispose managed and unmanaged objects - if (m_connection != null) - m_connection.Dispose(); - } - m_connection = null; - IsDisposed = true; - } - #endregion - - /// Focus the input context - public void Focus() - { - if (m_connection == null) - return; - - if (m_inputContext != null) - m_inputContext.FocusIn(); - - SIL.FieldWorks.Views.GlobalCachedInputContext.InputContext = m_inputContext; - } - } - - class DummyIConvertible : IConvertible - { - object m_result; - - public DummyIConvertible(object result) - { - m_result = result; - } - - #region IConvertible implementation - public TypeCode GetTypeCode() - { - throw new NotImplementedException(); - } - - public bool ToBoolean(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public byte ToByte(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public char ToChar(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public DateTime ToDateTime(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public decimal ToDecimal(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public double ToDouble(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public short ToInt16(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public int ToInt32(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public long ToInt64(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public sbyte ToSByte(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public float ToSingle(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public string ToString(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public object ToType(Type conversionType, IFormatProvider provider) - { - return m_result; - } - - public ushort ToUInt16(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public uint ToUInt32(IFormatProvider provider) - { - throw new NotImplementedException(); - } - - public ulong ToUInt64(IFormatProvider provider) - { - throw new NotImplementedException(); - } - #endregion - } -} -#endif diff --git a/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/KeyboardSwitcherTests.csproj b/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/KeyboardSwitcherTests.csproj deleted file mode 100644 index a76181814d..0000000000 --- a/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/KeyboardSwitcherTests.csproj +++ /dev/null @@ -1,104 +0,0 @@ - - - - Debug - AnyCPU - 9.0.21022 - 2.0 - {6CE0EFE2-D885-4744-A91A-100B00DD8DC6} - Library - KeyboardSwitcherTests - KeyboardSwitcherTests - v4.0 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - ..\..\..\..\Output\Debug\ - DEBUG - prompt - 4 - false - AllRules.ruleset - x86 - - - none - false - ..\..\..\..\Output\Release\ - prompt - 4 - false - AllRules.ruleset - x86 - - - - False - ..\..\..\..\Output\Debug\BasicUtilsTests.dll - - - False - ..\..\..\..\Output\Debug\COMInterfacesTests.dll - - - False - ..\..\..\..\Bin\NUnit\bin\nunit.framework.dll - - - - False - ..\..\..\..\Output\Debug\KeyboardSwitcher.dll - - - ..\..\..\..\Output\Debug\ibusdotnet.dll - - - - - - AssemblyInfoForTests.cs - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - \ No newline at end of file diff --git a/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/gendarme-KeyboardSwitcherTests.ignore b/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/gendarme-KeyboardSwitcherTests.ignore deleted file mode 100644 index e0edcd58ad..0000000000 --- a/Src/Common/KeyboardSwitcher/KeyboardSwitcherTests/gendarme-KeyboardSwitcherTests.ignore +++ /dev/null @@ -1,7 +0,0 @@ -# Gendarme filter file to suppress reporting of defects - -#----------------------------------------------------------------------------------------------- -R: Gendarme.Rules.Design.TypesWithDisposableFieldsShouldBeDisposableRule - -# Disposed in Teardown method -T: KeyboardSwitcherTests.IBusDotNetTests \ No newline at end of file diff --git a/Src/Common/Keyboarding/AssemblyInfo.cs b/Src/Common/Keyboarding/AssemblyInfo.cs deleted file mode 100644 index be6bfcf8b8..0000000000 --- a/Src/Common/Keyboarding/AssemblyInfo.cs +++ /dev/null @@ -1,17 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System.Reflection; -using System.Runtime.CompilerServices; - -[assembly: AssemblyTitle("Keyboarding")] - -[assembly: System.Runtime.InteropServices.ComVisible(false)] - -[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("KeyboardingTests")] -[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("FwCoreDlgControlsTests")] diff --git a/Src/Common/Keyboarding/BuildInclude.targets b/Src/Common/Keyboarding/BuildInclude.targets deleted file mode 100644 index df0ddc9f5e..0000000000 --- a/Src/Common/Keyboarding/BuildInclude.targets +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/Src/Common/Keyboarding/Interfaces/IKeyboardAdaptor.cs b/Src/Common/Keyboarding/Interfaces/IKeyboardAdaptor.cs deleted file mode 100644 index faa0758493..0000000000 --- a/Src/Common/Keyboarding/Interfaces/IKeyboardAdaptor.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; -using System.Collections.Generic; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// Methods and properties for dealing with keyboards - /// - public interface IKeyboardAdaptor - { - /// - /// Initialize the installed keyboards - /// - void Initialize(); - - /// - void Close(); - - /// - /// List of keyboard layouts that either gave an exception or other error trying to - /// get more information. We don't have enough information for these keyboard layouts - /// to include them in the list of installed keyboards. - /// - /// List of IKeyboardErrorDescription objects, or an empty list. - List ErrorKeyboards { get; } - - /// - /// Activates the keyboard - /// - /// The keyboard to activate - /// A second keyboard (usually a system keyboard) that, - /// depending on the implementation, might also get activated when this keyboard gets - /// activated, or null. - void ActivateKeyboard(IKeyboardDescription keyboard, IKeyboardDescription systemKeyboard); - - /// - /// Deactivates the keyboard - /// - /// The keyboard to deactivate - void DeactivateKeyboard(IKeyboardDescription keyboard); - } -} diff --git a/Src/Common/Keyboarding/Interfaces/IKeyboardCallback.cs b/Src/Common/Keyboarding/Interfaces/IKeyboardCallback.cs deleted file mode 100644 index 14e424fae3..0000000000 --- a/Src/Common/Keyboarding/Interfaces/IKeyboardCallback.cs +++ /dev/null @@ -1,30 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// Interface that needs to be implemented by the view/document. This interface allows the - /// keyboard controller to get the correct keyboard based on the current position in the - /// document/the current selection in the view. - /// - public interface IKeyboardCallback - { - /// - /// Gets the keyboard associated with the current selection. - /// - IKeyboardDescription Keyboard { get; } - - /// - /// Gets or sets the active keyboard. - /// - IKeyboardDescription ActiveKeyboard { get; set; } - } -} diff --git a/Src/Common/Keyboarding/Interfaces/IKeyboardController.cs b/Src/Common/Keyboarding/Interfaces/IKeyboardController.cs deleted file mode 100644 index fa5baa6a4d..0000000000 --- a/Src/Common/Keyboarding/Interfaces/IKeyboardController.cs +++ /dev/null @@ -1,69 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2012, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; -using System.Collections.Generic; - -namespace SIL.FieldWorks.Common.Keyboarding.Interfaces -{ - /// - /// Internal interface for the implementation of the keyboard controller. Implement this - /// interface if you want to provide a double for unit testing. Otherwise the default - /// implementation is sufficient. - /// - interface IKeyboardController: IDisposable - { - /// - /// Tries to get the keyboard specified by or (if - /// not found) . Returns KeyboardDescription.Zero if - /// no keyboard can be found. - /// - IKeyboardDescription GetKeyboard(int? lcid, string otherImKeyboard); - /// - IKeyboardDescription GetKeyboard(int lcid); - /// - IKeyboardDescription GetKeyboard(string otherImKeyboard); - - /// - /// Sets the keyboard. - /// - /// Keyboard identifier of system keyboard - /// Identifier for other input method keyboard (Keyman/ibus) - /// - /// The active keyboard lcid. - /// Active other input method keyboard. - /// - void SetKeyboard(int lcid, string otherImKeyboard, ref int nActiveLangId, - ref string activeOtherImKeyboard, ref bool fSelectLangPending); - - /// - /// Gets the installed keyboard layouts/languages. - /// - List InstalledKeyboards { get; } - - /// - /// List of keyboard layouts that either gave an exception or other error trying to - /// get more information. We don't have enough information for these keyboard layouts - /// to include them in the list of installed keyboards. - /// - List ErrorKeyboards { get; } - - /// - /// Gets the available keyboards - /// - Dictionary Keyboards { get; } - /// - /// Gets or sets the implementation of the internal event handlers. - /// - IKeyboardEventHandler InternalEventHandler { get; set; } - /// - /// Gets or sets the implementation of the internal methods. - /// - IKeyboardMethods InternalMethods { get; set; } - } -} diff --git a/Src/Common/Keyboarding/Interfaces/IKeyboardDescription.cs b/Src/Common/Keyboarding/Interfaces/IKeyboardDescription.cs deleted file mode 100644 index b5da23c089..0000000000 --- a/Src/Common/Keyboarding/Interfaces/IKeyboardDescription.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// The different keyboard types we're supporting. - /// - public enum KeyboardType - { - /// - /// System keyboard like Windows API or xkb - /// - System, - /// - /// Other input method like Keyman, InKey or ibus - /// - OtherIm - } - - /// - /// Represents an installed keyboard layout/language - /// - public interface IKeyboardDescription - { - /// - /// Gets an identifier of the language/keyboard layout - /// - int Id { get; } - - /// - /// Gets the type of this keyboard (system or other) - /// - KeyboardType Type { get; } - - /// - /// Gets a human-readable name of the language. - /// - string Name { get; } - - /// - /// Gets the keyboard adaptor that handles this keyboard. - /// - IKeyboardAdaptor Engine { get; } - - /// - /// Activate this keyboard layout. - /// - void Activate(); - - /// - /// Deactivate this keyboard layout. - /// - void Deactivate(); - } -} diff --git a/Src/Common/Keyboarding/Interfaces/IKeyboardErrorDescription.cs b/Src/Common/Keyboarding/Interfaces/IKeyboardErrorDescription.cs deleted file mode 100644 index 0ee35831b4..0000000000 --- a/Src/Common/Keyboarding/Interfaces/IKeyboardErrorDescription.cs +++ /dev/null @@ -1,30 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// Describes a keyboard layout that either gave an exception or other error trying to - /// get more information. We don't have enough information for these keyboard layouts - /// to include them in the list of installed keyboards. - /// - public interface IKeyboardErrorDescription - { - /// - /// Gets the type of this keyboard (system or other) - /// - KeyboardType Type { get; } - - /// - /// Gets the details about the error, e.g. layout name. - /// - object Details { get; } - } -} diff --git a/Src/Common/Keyboarding/Interfaces/IKeyboardEventHandler.cs b/Src/Common/Keyboarding/Interfaces/IKeyboardEventHandler.cs deleted file mode 100644 index fa35cd4968..0000000000 --- a/Src/Common/Keyboarding/Interfaces/IKeyboardEventHandler.cs +++ /dev/null @@ -1,84 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; -using System.Drawing; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// The different types of a selection change - /// - public enum SelChangeType - { - /// Selection did not change - NoChange = -1, - /// Selection changed but stayed in same paragraph - SamePara = 1, - /// Selection moved to a different paragraph - DiffPara = 2, - /// Selection changed, it is not known whether it moved paragraph... maybe no - /// previous sel. - Unknown = 3, - /// Selection removed altogether, there is now no current selection. - Deleted = 4, - } - - /// - /// Event handler that the keyboard controller or the keyboard implements to get notified - /// about changes and events in the view/document. - /// - /// The keyboard controller creates an object that implements IKeyboardEventHandler. - /// If different keyboard types on a system require different treatment of events, an - /// event handler on each keyboard type should be implemented together with a wrapper class - /// that calls the handler on the keyboard. If all keyboard types can use the same event - /// handling code, only one class needs to be implemented. The reason it is done this way is - /// that in the second case we save some time if we don't have to determine the current - /// keyboard based on the current selection in the text. - public interface IKeyboardEventHandler - { - /// - /// Called before a property gets updated. - /// - /// Returns true if the property should be updated without normalization - /// (i.e. not updated in the database) in order to avoid messing up compositions; - /// false if property can be processed regularly. - /// The event handler should do what was done in C++ with the following two - /// lines and return the value of ptxs->IsCompositionActive: - /// if (ptxs->IsCompositionActive()) - /// ptxs->NoteCommitDuringComposition(); - /// - bool OnUpdateProp(IKeyboardCallback callback); - - /// - /// Called when a mouse event happened. - /// - /// Returns true if the mouse event was handled, otherwise false. - /// - /// Corresponding C++ method is VwTextStore::MouseEvent. - bool OnMouseEvent(IKeyboardCallback callback, int xd, int yd, Rectangle rcSrc, - Rectangle rcDst, MouseEvent mouseEvent); - - /// - /// Called when the layout of the view changes. - /// - void OnLayoutChange(IKeyboardCallback callback); - - /// - /// Called when the selection changes. - /// - /// Corresponding C++ method is VwTextStore::OnSelChange. - void OnSelectionChange(IKeyboardCallback callback, SelChangeType how); - - /// - /// Called when the text changes. - /// - /// Corresponding C++ method is VwTextStore::OnDocChange. - void OnTextChange(IKeyboardCallback callback); - } -} diff --git a/Src/Common/Keyboarding/Interfaces/IKeyboardMethods.cs b/Src/Common/Keyboarding/Interfaces/IKeyboardMethods.cs deleted file mode 100644 index 9e9cab267e..0000000000 --- a/Src/Common/Keyboarding/Interfaces/IKeyboardMethods.cs +++ /dev/null @@ -1,59 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// This interface provides additional methods for keyboards - /// - public interface IKeyboardMethods - { - /// - /// End all active compositions. - /// - void TerminateAllCompositions(IKeyboardCallback callback); - - /// - /// Activate the input method - /// - void SetFocus(IKeyboardCallback callback); - - /// - /// Deactivate the input method - /// - void KillFocus(IKeyboardCallback callback); - - /// - /// Gets a value indicating whether a composition window is active. - /// - bool IsCompositionActive(IKeyboardCallback callback); - - /// - /// Gets a value indicating if the input method is in the process of closing a composition - /// window. - /// - /// Corresponding C++ method is VwTextStore::IsDoingRecommit. - bool IsEndingComposition(IKeyboardCallback callback); - - /// - /// Enables the input method. This gets called as part of VwRootBox::HandleActivate when - /// enabling a selection. - /// - /// Corresponding C++ method is VwTextStore::SetFocus. - void EnableInput(IKeyboardCallback callback); - - /// - /// Disables the input method. This gets called as part of VwRootBox::HandleActivate when - /// disabling a selection. - /// - /// Corresponding C++ method is VwTextStore::OnLoseFocus. - void DisableInput(IKeyboardCallback callback); - } -} diff --git a/Src/Common/Keyboarding/Interfaces/MouseEvent.cs b/Src/Common/Keyboarding/Interfaces/MouseEvent.cs deleted file mode 100644 index be9d014bbd..0000000000 --- a/Src/Common/Keyboarding/Interfaces/MouseEvent.cs +++ /dev/null @@ -1,30 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2012, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// Mouse event type - /// - /// Keep in sync with VwMouseEvent - public enum MouseEvent - { - /// - kmeDown, - /// - kmeDblClick, - /// - kmeMoveDrag, - /// - kmeExtend, - /// - kmeUp - } -} diff --git a/Src/Common/Keyboarding/KeyboardController.cs b/Src/Common/Keyboarding/KeyboardController.cs deleted file mode 100644 index 58ee641832..0000000000 --- a/Src/Common/Keyboarding/KeyboardController.cs +++ /dev/null @@ -1,361 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using SIL.FieldWorks.Common.Keyboarding.Interfaces; -using SIL.Utils; -#if __MonoCS__ -using SIL.FieldWorks.Views; -using SIL.FieldWorks.Common.Keyboarding.Linux; -#else -using SIL.FieldWorks.Common.Keyboarding.Windows; -#endif - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// Singleton class with methods for registering different keyboarding engines (e.g. Windows - /// system, Keyman, XKB, IBus keyboards), and activating keyboards. - /// - public static class KeyboardController - { - #region Nested Manager class - /// - /// Allows setting different keyboard adapters which is needed for tests. Also allows - /// registering keyboard layouts. - /// - public static class Manager - { - /// - /// Sets the available keyboard adaptors - /// - public static void SetKeyboardAdaptors(IKeyboardAdaptor[] adaptors) - { - if (SingletonsContainer.Contains()) - { - // we're modifying an existent KeyboardController. - Instance.Keyboards.Clear(); - - if (Adaptors != null) - { - foreach (var adaptor in Adaptors) - adaptor.Close(); - } - - Adaptors = adaptors; - - InitializeAdaptors(); - } - else - { - // KeyboardController doesn't exist yet. We'll initialize the adaptors - // when the KeyboardController gets created - Adaptors = adaptors; - } - } - - /// - /// Resets the keyboard adaptors to the default ones. - /// - public static void Reset() - { - SetKeyboardAdaptors(new IKeyboardAdaptor[] { -#if __MonoCS__ - new XkbKeyboardAdaptor(), new IbusKeyboardAdaptor() -#else - new WinKeyboardAdaptor() -#endif - }); - } - - internal static void InitializeAdaptors() - { - // this will also populate m_keyboards - foreach (var adaptor in Adaptors) - adaptor.Initialize(); - } - - /// - /// Adds a keyboard to the list of installed keyboards - /// - /// Identifier of the language/keyboard layout (LCID), or hash code - /// of the keyboard name. - /// Keyboard description object - public static void RegisterKeyboard(int lcid, IKeyboardDescription description) - { - Debug.Assert(!Instance.Keyboards.ContainsKey(lcid), - String.Format("KeyboardController.Manager.RegisterKeyboard called with duplicate keyboard lcid '{0}', with description '{1}'.", lcid, description)); - - Instance.Keyboards[lcid] = description; - } - } - #endregion - - #region Class KeyboardControllerImpl - private class KeyboardControllerImpl: IKeyboardController, IDisposable - { - public Dictionary Keyboards { get; private set; } - public IKeyboardEventHandler InternalEventHandler { get; set; } - public IKeyboardMethods InternalMethods { get; set; } - - public KeyboardControllerImpl() - { - Keyboards = new Dictionary(); - } - - #region Disposable stuff -#if DEBUG - /// - ~KeyboardControllerImpl() - { - Dispose(false); - } -#endif - - /// - public bool IsDisposed { get; private set; } - - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - protected virtual void Dispose(bool fDisposing) - { - System.Diagnostics.Debug.WriteLineIf(!fDisposing, - "****** Missing Dispose() call for " + GetType() + ". *******"); - if (fDisposing && !IsDisposed) - { - // dispose managed and unmanaged objects - if (Adaptors != null) - { - foreach (var adaptor in Adaptors) - adaptor.Close(); - Adaptors = null; - } - } - IsDisposed = true; - } - #endregion - - /// - /// Tries to get the keyboard specified by or (if - /// not found) . Returns KeyboardDescription.Zero if - /// no keyboard can be found. - /// - public IKeyboardDescription GetKeyboard(int? lcid, string otherImKeyboard) - { - IKeyboardDescription systemKeyboard = null; - IKeyboardDescription otherKeyboard = null; - if (lcid.HasValue) - Keyboards.TryGetValue(lcid.Value, out systemKeyboard); - - if (!string.IsNullOrEmpty(otherImKeyboard)) - Keyboards.TryGetValue(otherImKeyboard.GetHashCode(), out otherKeyboard); - - if (otherKeyboard != null && systemKeyboard != null) - return new KeyboardDescriptionWrapper(systemKeyboard, otherKeyboard); - return systemKeyboard ?? otherKeyboard ?? KeyboardDescription.Zero; - } - - public IKeyboardDescription GetKeyboard(int lcid) - { - return GetKeyboard(lcid, null); - } - - public IKeyboardDescription GetKeyboard(string otherImKeyboard) - { - return GetKeyboard(null, otherImKeyboard); - } - - /// - /// Sets the keyboard. - /// - /// Keyboard identifier of system keyboard - /// Identifier for other input method keyboard (Keyman/ibus) - /// - /// The active keyboard lcid. - /// Active other input method keyboard. - /// - public void SetKeyboard(int lcid, string otherImKeyboard, ref int nActiveLangId, - ref string activeOtherImKeyboard, ref bool fSelectLangPending) - { - var keyboard = GetKeyboard(lcid, otherImKeyboard); - keyboard.Activate(); - nActiveLangId = lcid; - activeOtherImKeyboard = otherImKeyboard; - fSelectLangPending = true; - } - - /// - /// Gets the installed keyboard layouts/languages. - /// - public List InstalledKeyboards - { - get - { - return Keyboards.Values.ToList(); - } - } - - /// - /// List of keyboard layouts that either gave an exception or other error trying to - /// get more information. We don't have enough information for these keyboard layouts - /// to include them in the list of installed keyboards. - /// - public List ErrorKeyboards - { - get - { - if (Adaptors == null) - Manager.Reset(); - - return Adaptors.SelectMany(adaptor => adaptor.ErrorKeyboards).ToList(); - } - } - } - #endregion - - #region Static methods and properties - /// - /// Create an instance of IKeyboardController. This gets called if SingletonsContainer - /// doesn't contain already one. - /// - private static IKeyboardController Create() - { - var controller = new KeyboardControllerImpl(); - if (Adaptors == null) - Manager.Reset(); - -#if __MonoCS__ - var keyboardHelper = new LinuxKeyboardHelper(); - controller.InternalEventHandler = keyboardHelper; - controller.InternalMethods = keyboardHelper; -#else - // TODO: No keyboard event handler class implemented on Windows -#endif - - return controller; - } - - /// - /// Gets the current keyboard controller singleton. - /// - private static IKeyboardController Instance - { - get - { - return SingletonsContainer.Get(() => Create(), - () => Manager.InitializeAdaptors()); - } - } - - /// - /// Gets the event handler that processes events that are forwarded to the keyboard. - /// - public static IKeyboardEventHandler EventHandler - { - get - { - return Instance.InternalEventHandler; - } - } - - /// - /// Gets the object that implements additional methods. - /// - public static IKeyboardMethods Methods - { - get - { - return Instance.InternalMethods; - } - } - - /// - /// Gets the installed keyboard layouts/languages. - /// - public static List InstalledKeyboards - { - get - { - return Instance.InstalledKeyboards; - } - } - - /// - /// List of keyboard layouts that either gave an exception or other error trying to - /// get more information. We don't have enough information for these keyboard layouts - /// to include them in the list of installed keyboards. - /// - public static List ErrorKeyboards - { - get - { - return Instance.ErrorKeyboards; - } - } - - /// - /// Tries to get the keyboard specified by or (if not - /// found) . Returns KeyboardDescription.Zero if no - /// keyboard can be found. - /// - public static IKeyboardDescription GetKeyboard(int? lcid, string otherImKeyboard) - { - return Instance.GetKeyboard(lcid, otherImKeyboard); - } - - /// - /// Tries to get the keyboard specified by . - /// Returns KeyboardDescription.Zero if no keyboard can be found. - /// - public static IKeyboardDescription GetKeyboard(int lcid) - { - return Instance.GetKeyboard(lcid); - } - - /// - /// Tries to get the keyboard specified by . - /// Returns KeyboardDescription.Zero if no keyboard can be found. - /// - public static IKeyboardDescription GetKeyboard(string otherImKeyboard) - { - return Instance.GetKeyboard(otherImKeyboard); - } - - /// - /// Sets the keyboard. - /// - /// Keyboard identifier of system keyboard - /// Identifier for other input method keyboard (Keyman/ibus) - /// - /// The active keyboard lcid. - /// Active other input method keyboard. - /// - public static void SetKeyboard(int lcid, string otherImKeyboard, ref int nActiveLangId, - ref string activeOtherImKeyboard, ref bool fSelectLangPending) - { - Instance.SetKeyboard(lcid, otherImKeyboard, ref nActiveLangId, - ref activeOtherImKeyboard, ref fSelectLangPending); - } - - /// - /// Gets or sets the available keyboard adaptors. - /// - private static IKeyboardAdaptor[] Adaptors { get; set; } - #endregion - - } -} diff --git a/Src/Common/Keyboarding/KeyboardDescription.cs b/Src/Common/Keyboarding/KeyboardDescription.cs deleted file mode 100644 index 825f16e79b..0000000000 --- a/Src/Common/Keyboarding/KeyboardDescription.cs +++ /dev/null @@ -1,112 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// Default implementation for a keyboard layout/language description. - /// - public class KeyboardDescription: IKeyboardDescription - { - /// - /// The null keyboard description - /// - public static IKeyboardDescription Zero = new KeyboardDescriptionNull(); - - /// - /// Initializes a new instance of the - /// class. - /// - public KeyboardDescription(int id, string name, IKeyboardAdaptor engine) - : this(id, name, engine, KeyboardType.System) - { - } - - /// - /// Initializes a new instance of the - /// class. - /// - public KeyboardDescription(int id, string name, IKeyboardAdaptor engine, KeyboardType type) - { - Id = id; - Name = name; - Engine = engine; - Type = type; - } - - /// - /// Gets an identifier of the language/keyboard layout (LCID). - /// - public int Id { get; private set; } - - /// - /// Gets the type of this keyboard (system or other) - /// - public KeyboardType Type { get; private set;} - - /// - /// Gets a human-readable name of the language. - /// - public string Name { get; private set; } - - /// - /// Gets the keyboard adaptor that handles this keyboard. - /// - public IKeyboardAdaptor Engine { get; private set; } - - /// - /// Activate this keyboard. - /// - public void Activate() - { - if (Engine != null) - Engine.ActivateKeyboard(this, null); - } - - /// - /// Deactivate this keyboard. - /// - public void Deactivate() - { - if (Engine != null) - Engine.DeactivateKeyboard(this); - } - - /// - /// Returns a that represents the current - /// . - /// - public override string ToString() - { - return Name; - } - - /// - /// Determines whether the specified is equal to the current - /// . - /// - public override bool Equals(object obj) - { - if (obj == null || !(obj is IKeyboardDescription)) - return false; - var other = (IKeyboardDescription)obj; - return other.Id == Id && other.Name == Name; - } - - /// - /// Serves as a hash function for a - /// object. - /// - public override int GetHashCode() - { - return Id.GetHashCode() ^ Name.GetHashCode() ^ base.GetHashCode(); - } - } -} diff --git a/Src/Common/Keyboarding/KeyboardDescriptionNull.cs b/Src/Common/Keyboarding/KeyboardDescriptionNull.cs deleted file mode 100644 index d8a2ad58cd..0000000000 --- a/Src/Common/Keyboarding/KeyboardDescriptionNull.cs +++ /dev/null @@ -1,82 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// This implements a no-op keyboard that can be used where we don't know what keyboard to use - /// - internal class KeyboardDescriptionNull: IKeyboardDescription - { - public KeyboardDescriptionNull() - { - } - - #region IKeyboardDescription implementation - public void Activate() - { - } - - public void Deactivate() - { - } - - public int Id - { - get { return 0; } - } - - public KeyboardType Type - { - get { return KeyboardType.System; } - } - - public string Name - { - get { return string.Empty; } - } - - public IKeyboardAdaptor Engine - { - get - { - throw new NotImplementedException(); - } - } - #endregion - - /// - /// Returns a that represents the current - /// . - /// - public override string ToString() - { - return ""; - } - - /// - /// Determines whether the specified is equal to the current - /// . - /// - public override bool Equals(object obj) - { - return obj is KeyboardDescriptionNull; - } - - /// - /// Serves as a hash function for a - /// object. - /// - public override int GetHashCode() - { - return 0; - } - } -} diff --git a/Src/Common/Keyboarding/KeyboardDescriptionWrapper.cs b/Src/Common/Keyboarding/KeyboardDescriptionWrapper.cs deleted file mode 100644 index 46ad02a841..0000000000 --- a/Src/Common/Keyboarding/KeyboardDescriptionWrapper.cs +++ /dev/null @@ -1,101 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// Wraps one or two keyboard descriptions. This allows to have a OtherIM type keyboard that - /// on activation also activates the system keyboard. The current implementation gives - /// precedence to the other keyboard; it's up to the respective keyboard adapter to deal with - /// the second keyboard (e.g. on Windows we might simply ignore it). - /// - /// It would be possible to implement this by adding an extra property on - /// IKeyboardDescription, but that seems wrong because the association between the two - /// keyboards gets set each time we access the keyboard. - internal class KeyboardDescriptionWrapper: IKeyboardDescription - { - private IKeyboardDescription m_SystemKeyboard; - private IKeyboardDescription m_OtherImKeyboard; - - public KeyboardDescriptionWrapper(IKeyboardDescription systemKeyboard, - IKeyboardDescription otherImKeyboard) - { - m_SystemKeyboard = systemKeyboard; - m_OtherImKeyboard = otherImKeyboard; - } - - private IKeyboardDescription PrimaryKeyboard - { - get { return m_OtherImKeyboard ?? m_SystemKeyboard; } - } - - #region IKeyboardDescription implementation - public void Activate() - { - Engine.ActivateKeyboard(PrimaryKeyboard, m_SystemKeyboard); - } - - public void Deactivate() - { - Engine.DeactivateKeyboard(PrimaryKeyboard); - } - - public int Id - { - get { return PrimaryKeyboard.Id; } - } - - public KeyboardType Type - { - get { return PrimaryKeyboard.Type; } - } - - public string Name - { - get { return PrimaryKeyboard.Name; } - } - - public IKeyboardAdaptor Engine - { - get { return PrimaryKeyboard.Engine; } - } - #endregion - - /// - /// Returns a that represents the current - /// . - /// - public override string ToString() - { - return string.Format("{0} ({1})", PrimaryKeyboard.Name, m_SystemKeyboard.Name); - } - - /// - /// Determines whether the specified is equal to the current - /// . - /// - public override bool Equals(object obj) - { - if (obj == null || !(obj is KeyboardDescriptionWrapper)) - return false; - var other = (KeyboardDescriptionWrapper)obj; - return other.m_OtherImKeyboard == m_OtherImKeyboard && other.m_SystemKeyboard == m_SystemKeyboard; - } - - /// - /// Serves as a hash function for a - /// object. - /// - public override int GetHashCode() - { - return Id.GetHashCode() ^ Name.GetHashCode() ^ m_SystemKeyboard.GetHashCode() ^ base.GetHashCode(); - } - } -} diff --git a/Src/Common/Keyboarding/KeyboardErrorDescription.cs b/Src/Common/Keyboarding/KeyboardErrorDescription.cs deleted file mode 100644 index 96abb1d4a7..0000000000 --- a/Src/Common/Keyboarding/KeyboardErrorDescription.cs +++ /dev/null @@ -1,31 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - internal class KeyboardErrorDescription: IKeyboardErrorDescription - { - public KeyboardErrorDescription(object details): this(KeyboardType.System, details) - { - } - - public KeyboardErrorDescription(KeyboardType type, object details) - { - Type = type; - Details = details; - } - - #region IKeyboardErrorDescription implementation - public KeyboardType Type { get; private set; } - - public object Details { get; private set; } - #endregion - } -} diff --git a/Src/Common/Keyboarding/Keyboarding.csproj b/Src/Common/Keyboarding/Keyboarding.csproj deleted file mode 100644 index 65f4af9fbc..0000000000 --- a/Src/Common/Keyboarding/Keyboarding.csproj +++ /dev/null @@ -1,133 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {3365F220-B39D-423D-8A99-FDD0588970CE} - Library - SIL.FieldWorks.Common.Keyboarding - Keyboarding - v4.0 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - - - - - - true - full - false - ..\..\..\Output\Debug - DEBUG - prompt - 4 - false - true - true - AllRules.ruleset - x86 - - - none - false - ..\..\..\Output\Release - prompt - 4 - false - AllRules.ruleset - x86 - - - - False - ..\..\..\Output\Debug\BasicUtils.dll - - - False - ..\..\..\Output\Debug\KeyboardSwitcher.dll - - - - False - ..\..\..\Output\Debug\COMInterfaces.dll - - - ..\..\..\Output\Debug\SilUtils.dll - - - - - - - - CommonAssemblyInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - diff --git a/Src/Common/Keyboarding/Keyboarding.dll.config b/Src/Common/Keyboarding/Keyboarding.dll.config deleted file mode 100644 index 9e0af794a3..0000000000 --- a/Src/Common/Keyboarding/Keyboarding.dll.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/Src/Common/Keyboarding/KeyboardingTests/App.config b/Src/Common/Keyboarding/KeyboardingTests/App.config deleted file mode 100644 index 8d329647ba..0000000000 --- a/Src/Common/Keyboarding/KeyboardingTests/App.config +++ /dev/null @@ -1,22 +0,0 @@ - - - - -
- - - - - - - - - - - - - - - - - diff --git a/Src/Common/Keyboarding/KeyboardingTests/FakeKeyboardController.cs b/Src/Common/Keyboarding/KeyboardingTests/FakeKeyboardController.cs deleted file mode 100644 index 3a82554814..0000000000 --- a/Src/Common/Keyboarding/KeyboardingTests/FakeKeyboardController.cs +++ /dev/null @@ -1,154 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2012, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Drawing; -using SIL.FieldWorks.Common.Keyboarding.Interfaces; -using SIL.Utils; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - /// - /// Implements a fake do-nothing keyboard controller. - /// - public sealed class FakeKeyboardController: IKeyboardController, IKeyboardEventHandler, IKeyboardMethods - { - /// - /// Installs this fake keyboard controller instead of the real one - /// - [SuppressMessage("Gendarme.Rules.Correctness", "EnsureLocalDisposalRule", - Justification="FakeKeboardController is a Singleton")] - public static void Install() - { - SingletonsContainer.Add(typeof(IKeyboardController).FullName, new FakeKeyboardController()); - } - - #region IDisposable implementation - public void Dispose() - { - } - #endregion - - #region IKeyboardController implementation - public IKeyboardDescription GetKeyboard(int? lcid, string otherImKeyboard) - { - return null; - } - - public IKeyboardDescription GetKeyboard(int lcid) - { - return null; - } - - public IKeyboardDescription GetKeyboard(string otherImKeyboard) - { - return null; - } - - public void SetKeyboard(int lcid, string otherImKeyboard, ref int nActiveLangId, - ref string activeOtherImKeyboard, ref bool fSelectLangPending) - { - } - - public List InstalledKeyboards - { - get - { - return new List(); - } - } - - public List ErrorKeyboards - { - get - { - return new List(); - } - } - - public Dictionary Keyboards - { - get - { - return new Dictionary(); - } - } - - public IKeyboardEventHandler InternalEventHandler - { - get { return this; } - set { } - } - - public IKeyboardMethods InternalMethods - { - get { return this; } - set { } - } - #endregion - - #region IKeyboardEventHandler implementation - public bool OnUpdateProp(IKeyboardCallback callback) - { - return false; - } - - public bool OnMouseEvent(IKeyboardCallback callback, int xd, int yd, Rectangle rcSrc, - Rectangle rcDst, MouseEvent mouseEvent) - { - return false; - } - - public void OnLayoutChange(IKeyboardCallback callback) - { - } - - public void OnSelectionChange(IKeyboardCallback callback, SelChangeType how) - { - } - - public void OnTextChange(IKeyboardCallback callback) - { - } - #endregion - - #region IKeyboardMethods implementation - public void TerminateAllCompositions(IKeyboardCallback callback) - { - } - - public void SetFocus(IKeyboardCallback callback) - { - } - - public void KillFocus(IKeyboardCallback callback) - { - } - - public bool IsCompositionActive(IKeyboardCallback callback) - { - return false; - } - - public bool IsEndingComposition(IKeyboardCallback callback) - { - return false; - } - - public void EnableInput(IKeyboardCallback callback) - { - } - - public void DisableInput(IKeyboardCallback callback) - { - } - #endregion - } -} diff --git a/Src/Common/Keyboarding/KeyboardingTests/KeyboardingTests.csproj b/Src/Common/Keyboarding/KeyboardingTests/KeyboardingTests.csproj deleted file mode 100644 index 51c34921c6..0000000000 --- a/Src/Common/Keyboarding/KeyboardingTests/KeyboardingTests.csproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - Debug - AnyCPU - 9.0.21022 - 2.0 - {4CF2E2E8-FD6B-4FFC-80C9-ACDDA6E7C768} - Library - SIL.FieldWorks.Common.Keyboarding - KeyboardingTests - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - ..\..\..\..\Output\Debug - DEBUG - prompt - 4 - false - AllRules.ruleset - x86 - - - none - false - ..\..\..\..\Output\Release - prompt - 4 - false - AllRules.ruleset - x86 - - - - False - ..\..\..\..\Output\Debug\BasicUtilsTests.dll - - - - ..\..\..\..\Bin\NUnit\bin\nunit.framework.dll - - - ..\..\..\..\Output\Debug\Keyboarding.dll - - - ..\..\..\..\Output\Debug\BasicUtils.dll - - - - ..\..\..\..\Output\Debug\CoreImpl.dll - - - False - ..\..\..\..\Output\Debug\TestUtils.dll - - - - - AssemblyInfoForTests.cs - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - \ No newline at end of file diff --git a/Src/Common/Keyboarding/KeyboardingTests/XkbKeyboardAdapterTests.cs b/Src/Common/Keyboarding/KeyboardingTests/XkbKeyboardAdapterTests.cs deleted file mode 100644 index 9d86f8ee66..0000000000 --- a/Src/Common/Keyboarding/KeyboardingTests/XkbKeyboardAdapterTests.cs +++ /dev/null @@ -1,301 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Runtime.InteropServices; -using NUnit.Framework; -using SIL.FieldWorks.Common.Keyboarding; -using SIL.FieldWorks.Common.Keyboarding.Linux; -using SIL.FieldWorks.Test.TestUtils; -using X11.XKlavier; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - [TestFixture] - [Platform(Include="Linux", Reason="Linux specific tests")] - [SetUICulture("en-US")] - public class XkbKeyboardAdapterTests: BaseTest - { - /// - /// Fakes the installed keyboards - /// - private class XklEngineResponder: XklEngine - { - public static string[] SetGroupNames { set; private get; } - - public override string[] GroupNames { get { return SetGroupNames; } } - - } - - [DllImportAttribute("libgtk-x11-2.0")] - [return: MarshalAs(UnmanagedType.I4)] - private static extern bool gtk_init_check(ref int argc, ref IntPtr argv) ; - - private string KeyboardUSA { get { return KeyboardNames[0]; } } - private string KeyboardGermany { get { return KeyboardNames[1]; } } - private string KeyboardFranceEliminateDeadKeys { get { return KeyboardNames[2]; } } - private string KeyboardUK { get { return KeyboardNames[3]; } } - private string KeyboardBelgium { get { return KeyboardNames[4]; } } - private string KeyboardFinlandNorthernSaami { get { return KeyboardNames[5]; } } - - private string[] KeyboardNames; - private string[] OldKeyboardNames = new string[] { "USA", "Germany", - "France - Eliminate dead keys", "United Kingdom", "Belgium", - "Finland - Northern Saami" }; - private string[] NewKeyboardNames = new string[] { "English (US)", "German", - "French - French (eliminate dead keys)", "English (UK)", "Belgian", - "Finnish - Northern Saami (Finland)" }; - - private string ExpectedKeyboardUSA { get { return ExpectedKeyboardNames[0]; } } - private string ExpectedKeyboardGermany { get { return ExpectedKeyboardNames[1]; } } - private string ExpectedKeyboardFranceEliminateDeadKeys { get { return ExpectedKeyboardNames[2]; } } - private string ExpectedKeyboardUK { get { return ExpectedKeyboardNames[3]; } } - //private string ExpectedKeyboardBelgium { get { return ExpectedKeyboardNames[4]; } } - private string ExpectedKeyboardFinlandNorthernSaami { get { return ExpectedKeyboardNames[5]; } } - - private string[] ExpectedKeyboardNames; - private string[] OldExpectedKeyboardNames = new string[] { "English (United States)", - "German (Germany)", "French (France) - Eliminate dead keys", - "English (United Kingdom)", "", "Northern Sami (Finland) - Northern Saami" }; - private string[] NewExpectedKeyboardNames = new string[] { "English (United States)", - "German (Germany)", "French (France) - French (eliminate dead keys)", - "English (United Kingdom)", "", "Northern Sami (Finland) - Northern Saami (Finland)" }; - - private static bool IsNewEvdevNames - { - get - { - // Debian/Ubuntu version 2.2.1 of xkeyboard-config changed the way keyboard names - // are stored in evdev.xml: previously it the country name was used ("Belgium"), now - // they use the adjective ("Belgian"). We detect this by greping evdev.xml and then - // use the appropriate names - using (var process = new Process()) - { - process.StartInfo.FileName = "/bin/grep"; - process.StartInfo.Arguments = "Belgian /usr/share/X11/xkb/rules/evdev.xml"; - process.Start(); - process.WaitForExit(); - return process.ExitCode == 0; - } - } - } - - public override void FixtureSetup() - { - base.FixtureSetup(); - - // We're using GTK functions, so we need to intialize when we run in - // nunit-console. I'm doing it through p/invoke rather than gtk-sharp (Application.Init()) - // so that we don't need to reference gtk-sharp (which might cause - // problems on Windows) - int argc = 0; - IntPtr argv = IntPtr.Zero; - Assert.IsTrue(gtk_init_check(ref argc, ref argv)); - if (IsNewEvdevNames) - { - KeyboardNames = NewKeyboardNames; - ExpectedKeyboardNames = NewExpectedKeyboardNames; - } - else - { - KeyboardNames = OldKeyboardNames; - ExpectedKeyboardNames = OldExpectedKeyboardNames; - } - } - - /// - /// Tests converting the keyboard layouts that XKB reports to LCIDs with the help of ICU - /// and list of available layouts. - /// - [Test] - public void InstalledKeyboards_USA() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardUSA }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - Assert.AreEqual(1, keyboards.Count); - Assert.AreEqual(1033, keyboards[0].Id); - Assert.AreEqual(ExpectedKeyboardUSA, keyboards[0].Name); - Assert.AreEqual(0, KeyboardController.ErrorKeyboards.Count); - } - - [Test] - public void InstalledKeyboards_Germany() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardGermany }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - Assert.AreEqual(1, keyboards.Count); - Assert.AreEqual(1031, keyboards[0].Id); - Assert.AreEqual(ExpectedKeyboardGermany, keyboards[0].Name); - Assert.AreEqual(0, KeyboardController.ErrorKeyboards.Count); - } - - [Test] - public void InstalledKeyboards_FrenchWithVariant() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardFranceEliminateDeadKeys }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - Assert.AreEqual(1, keyboards.Count); - Assert.AreEqual(1036, keyboards[0].Id); - Assert.AreEqual(ExpectedKeyboardFranceEliminateDeadKeys, keyboards[0].Name); - Assert.AreEqual(0, KeyboardController.ErrorKeyboards.Count); - } - - [Test] - public void InstalledKeyboards_GB() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardUK }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - Assert.AreEqual(1, keyboards.Count); - Assert.AreEqual(2057, keyboards[0].Id); - Assert.AreEqual(ExpectedKeyboardUK, keyboards[0].Name); - Assert.AreEqual(0, KeyboardController.ErrorKeyboards.Count); - } - - [Test] - public void InstalledKeyboards_Belgium() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardBelgium }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - // It seems that Dutch (Belgium) got added recently, so some machines are missing - // this. - Assert.That(keyboards.Count == 3 || keyboards.Count == 2); - keyboards.Sort((x, y) => { - return x.Id.CompareTo(y.Id); }); - var expectedKeyboards = new List() - { new KeyboardDescription(2060, "French (Belgium)", null) }; - // Windows doesn't define German (Belgium), so there is no LCID defined. ICU returns - // some arbitrary number (7 in my case). We cheat and expect what we get here. - expectedKeyboards.Add(new KeyboardDescription(keyboards[0].Id, "German (Belgium)", null)); - - if (keyboards.Count > 2) - expectedKeyboards.Add(new KeyboardDescription(2067, "Dutch (Belgium)", null)); - - CollectionAssert.AreEquivalent(expectedKeyboards, keyboards); - Assert.AreEqual(0, KeyboardController.ErrorKeyboards.Count); - } - - [Test] - public void InstalledKeyboards_Multiple() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardUSA, KeyboardGermany }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - Assert.AreEqual(2, keyboards.Count); - Assert.AreEqual(1033, keyboards[0].Id); - Assert.AreEqual(ExpectedKeyboardUSA, keyboards[0].Name); - Assert.AreEqual(1031, keyboards[1].Id); - Assert.AreEqual(ExpectedKeyboardGermany, keyboards[1].Name); - Assert.AreEqual(0, KeyboardController.ErrorKeyboards.Count); - } - - /// - /// Tests the values returned by InstalledKeyboards if the UICulture is set to German - /// - [Test] - [SetUICulture("de-DE")] - public void InstalledKeyboards_Germany_GermanCulture() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardGermany }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - Assert.AreEqual(1, keyboards.Count); - Assert.AreEqual(1031, keyboards[0].Id); - Assert.AreEqual("Deutsch (Deutschland)", keyboards[0].Name); - Assert.AreEqual(0, KeyboardController.ErrorKeyboards.Count); - } - - /// - /// Tests InstalledKeyboards property. "Finland - Northern Saami" gives us two - /// layouts (smi_FIN and sme_FIN), but ICU returns a LCID only for one of them. - /// - [Test] - public void InstalledKeyboards_NorthernSami() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardFinlandNorthernSaami }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - Assert.AreEqual(1, keyboards.Count); - Assert.AreEqual(59, keyboards[0].Id); - Assert.AreEqual(ExpectedKeyboardFinlandNorthernSaami, keyboards[0].Name); - Assert.AreEqual(0, KeyboardController.ErrorKeyboards.Count); - } - - [Test] - public void ErrorKeyboards() - { - XklEngineResponder.SetGroupNames = new string[] { "Fake" }; - - XkbKeyboardAdaptor.SetXklEngineType(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new XkbKeyboardAdaptor() }); - var keyboards = KeyboardController.InstalledKeyboards; - Assert.AreEqual(0, keyboards.Count); - Assert.AreEqual(1, KeyboardController.ErrorKeyboards.Count); - Assert.AreEqual("Fake", KeyboardController.ErrorKeyboards[0].Details); - } - - /// - [Test] - public void ActivateKeyboard_FirstTime_NotCrash() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardUSA }; - - XkbKeyboardAdaptor.SetXklEngineType(); - var adaptor = new XkbKeyboardAdaptor(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { adaptor }); - - var keyboards = KeyboardController.InstalledKeyboards; - - adaptor.ActivateKeyboard(keyboards[0], null); - } - - /// - /// FWNX-895 - /// - [Test] - public void ActivateKeyboard_SecondTime_NotCrash() - { - XklEngineResponder.SetGroupNames = new string[] { KeyboardUSA }; - XkbKeyboardAdaptor.SetXklEngineType(); - - var adaptor = new XkbKeyboardAdaptor(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { adaptor }); - var keyboards = KeyboardController.InstalledKeyboards; - adaptor.ActivateKeyboard(keyboards[0], null); - - adaptor = new XkbKeyboardAdaptor(); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { adaptor }); - keyboards = KeyboardController.InstalledKeyboards; - adaptor.ActivateKeyboard(keyboards[0], null); - } - } -} -#endif diff --git a/Src/Common/Keyboarding/KeyboardingTests/XklEngineTests.cs b/Src/Common/Keyboarding/KeyboardingTests/XklEngineTests.cs deleted file mode 100644 index 5f76f145e2..0000000000 --- a/Src/Common/Keyboarding/KeyboardingTests/XklEngineTests.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2013, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// Original author: MarkS 2013-01-04 XklEngineTests.cs - -#if __MonoCS__ -using System; -using NUnit.Framework; -using SIL.FieldWorks.Common.Keyboarding.Linux; -using SIL.FieldWorks.Test.TestUtils; -using X11.XKlavier; - -namespace SIL.FieldWorks.Common.Keyboarding -{ - [TestFixture] - [Platform(Include="Linux", Reason="Linux specific tests")] - [SetUICulture("en-US")] - public class XklEngineTests: BaseTest - { - /// - /// Can be created and closed. Doesn't crash. - /// - [Test] - public void Basic() - { - var engine = new XklEngine(); - engine.Close(); - } - - /// - [Test] - public void UseAfterClose_NotCrash() - { - var engine = new XklEngine(); - engine.Close(); - engine.SetGroup(0); - } - - /// - [Test] - public void MultipleEngines_ClosedInReverseOrder_NotCrash() - { - var engine1 = new XklEngine(); - var engine2 = new XklEngine(); - engine2.Close(); - engine1.Close(); - } - - /// - [Test] - public void MultipleEngines_ClosedInOpenOrder_NotCrash() - { - var engine1 = new XklEngine(); - var engine2 = new XklEngine(); - engine1.Close(); - engine2.Close(); - } - - /// - [Test] - public void GetDisplayConnection() - { - var displayConnection = XklEngine.GetDisplayConnection(); - Assert.That(displayConnection, Is.Not.EqualTo(IntPtr.Zero), "Expected display connection"); - } - } -} -#endif diff --git a/Src/Common/Keyboarding/Linux/IbusKeyboardAdaptor.cs b/Src/Common/Keyboarding/Linux/IbusKeyboardAdaptor.cs deleted file mode 100644 index 20606299bd..0000000000 --- a/Src/Common/Keyboarding/Linux/IbusKeyboardAdaptor.cs +++ /dev/null @@ -1,100 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using System.Collections.Generic; -using SIL.FieldWorks.Common.Keyboarding; -using SIL.FieldWorks.Views; - -namespace SIL.FieldWorks.Common.Keyboarding.Linux -{ - /// - /// Class for handling ibus keyboards on Linux. Currently just a wrapper for KeyboardSwitcher. - /// - /// TODO: Move functionality from KeyboardSwitcher to here. - public class IbusKeyboardAdaptor: IKeyboardAdaptor - { - private KeyboardSwitcher m_KeyboardSwitcher; - - /// - /// Initializes a new instance of the - /// class. - /// - public IbusKeyboardAdaptor() - { - } - - private void InitKeyboards() - { - var nKeyboards = m_KeyboardSwitcher.IMEKeyboardsCount; - for (int i = 0; i < nKeyboards; i++) - { - var name = m_KeyboardSwitcher.GetKeyboardName(i); - var id = name.GetHashCode(); - var keyboard = new KeyboardDescription(id, name, this, KeyboardType.OtherIm); - KeyboardController.Manager.RegisterKeyboard(id, keyboard); - } - } - - #region IKeyboardAdaptor implementation - /// - /// Initialize the installed keyboards - /// - public void Initialize() - { - m_KeyboardSwitcher = new KeyboardSwitcher(); - InitKeyboards(); - } - - /// - public void Close() - { - if (m_KeyboardSwitcher == null) - return; - - m_KeyboardSwitcher.Dispose(); - m_KeyboardSwitcher = null; - } - - /// - /// Activates the keyboard - /// - public void ActivateKeyboard(IKeyboardDescription keyboard, - IKeyboardDescription systemKeyboard) - { - m_KeyboardSwitcher.IMEKeyboard = keyboard.Name; - - if (systemKeyboard != null) - systemKeyboard.Activate(); - } - - /// - /// Deactivates the specified keyboard. - /// - public void DeactivateKeyboard(IKeyboardDescription keyboard) - { - m_KeyboardSwitcher.IMEKeyboard = null; - } - - /// - /// List of keyboard layouts that either gave an exception or other error trying to - /// get more information. We don't have enough information for these keyboard layouts - /// to include them in the list of installed keyboards. - /// - public List ErrorKeyboards - { - get - { - return new List(); - } - } - #endregion - } -} -#endif diff --git a/Src/Common/Keyboarding/Linux/IcuLocale.cs b/Src/Common/Keyboarding/Linux/IcuLocale.cs deleted file mode 100644 index 87a566ab8f..0000000000 --- a/Src/Common/Keyboarding/Linux/IcuLocale.cs +++ /dev/null @@ -1,66 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using SIL.FieldWorks.Common.COMInterfaces; - -namespace SIL.FieldWorks.Common.Keyboarding.Linux -{ - /// - /// This class represents an ICU locale. - /// - public class IcuLocale - { - /// - /// Gets or sets the identifier of the ICU locale. - /// - public string Id { get; private set; } - - /// - /// Gets the 3-letter ISO country code - /// - public string CountryCode { get; private set; } - - /// - /// Gets the 3-letter ISO 639-3 language code - /// - public string LanguageCode { get; private set; } - - /// - /// Gets the Windows locale identifier, or 0 if none defined. - /// - public int LCID { get; private set; } - - /// - /// Gets the country and language codes concatenated so that they can be used as a key. - /// - public string LanguageCountry - { - get - { - if (string.IsNullOrEmpty(CountryCode) && string.IsNullOrEmpty(LanguageCode)) - return string.Empty; - return LanguageCode + "_" + CountryCode; - } - } - - /// - /// Initializes a new instance of the - /// class. - /// - public IcuLocale(string localeId) - { - Id = localeId; - CountryCode = Icu.GetISO3Country(localeId); - LanguageCode = Icu.GetISO3Language(localeId); - LCID = Icu.GetLCID(localeId); - } - } -} -#endif diff --git a/Src/Common/Keyboarding/Linux/LinuxKeyboardHelper.cs b/Src/Common/Keyboarding/Linux/LinuxKeyboardHelper.cs deleted file mode 100644 index 8ff8e117c0..0000000000 --- a/Src/Common/Keyboarding/Linux/LinuxKeyboardHelper.cs +++ /dev/null @@ -1,138 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using System.Drawing; - -namespace SIL.FieldWorks.Common.Keyboarding.Linux -{ - /// - /// Common keyboard event handling class for Linux (xkb and ibus) keyboards. - /// - public class LinuxKeyboardHelper: IKeyboardEventHandler, IKeyboardMethods - { - #region IKeyboardEventHandler implementation - /// - /// Called before a property gets updated. - /// - public bool OnUpdateProp(IKeyboardCallback callback) - { - return false; - } - - /// - /// Called when a mouse event happened. - /// - /// Returns true if the mouse event was handled, otherwise false. - /// - public bool OnMouseEvent(IKeyboardCallback callback, int xd, int yd, Rectangle rcSrc, - Rectangle rcDst, MouseEvent mouseEvent) - { - if (mouseEvent == MouseEvent.kmeDown) - { - SetFocus(callback); - return true; - } - return false; - } - - /// - /// Called when the layout of the view changes. - /// - public void OnLayoutChange(IKeyboardCallback callback) - { - } - - /// - /// Called when the selection changes. - /// - /// Corresponding C++ method is VwTextStore::OnSelChange. - public void OnSelectionChange(IKeyboardCallback callback, SelChangeType how) - { - } - - /// - /// Called when the text changes. - /// - /// Corresponding C++ method is VwTextStore::OnDocChange. - public void OnTextChange(IKeyboardCallback callback) - { - } - #endregion - - #region IKeyboardMethods implementation - /// - /// End all active compositions. - /// - public void TerminateAllCompositions(IKeyboardCallback callback) - { - } - - /// - /// Activate the input method - /// - public void SetFocus(IKeyboardCallback callback) - { - var keyboard = callback.Keyboard; - keyboard.Activate(); - callback.ActiveKeyboard = keyboard; - } - - /// - /// Deactivate the input method - /// - /// Corresponding C++ method is VwTextStore::OnLoseFocus. - public void KillFocus(IKeyboardCallback callback) - { - if (callback.ActiveKeyboard != null) - { - callback.ActiveKeyboard.Deactivate(); - callback.ActiveKeyboard = null; - } - } - - /// - /// Enables the input method. This gets called as part of VwRootBox::HandleActivate when - /// enabling a selection. - /// - /// Corresponding C++ method is VwTextStore::SetFocus. - public void EnableInput(IKeyboardCallback callback) - { - } - - /// - /// Disables the input method. This gets called as part of VwRootBox::HandleActivate when - /// disabling a selection. - /// - /// Corresponding C++ method is VwTextStore::OnLoseFocus. - public void DisableInput(IKeyboardCallback callback) - { - } - - /// - /// Gets a value indicating whether a composition window is active. - /// - public bool IsCompositionActive(IKeyboardCallback callback) - { - return false; - } - - /// - /// Gets a value indicating if the input method is in the process of closing a composition - /// window. - /// - /// Corresponding C++ method is VwTextStore::IsDoingRecommit. - public bool IsEndingComposition(IKeyboardCallback callback) - { - return false; - } - #endregion - } -} -#endif diff --git a/Src/Common/Keyboarding/Linux/X11.cs b/Src/Common/Keyboarding/Linux/X11.cs deleted file mode 100644 index c8068067b1..0000000000 --- a/Src/Common/Keyboarding/Linux/X11.cs +++ /dev/null @@ -1,28 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using System.Runtime.InteropServices; - -namespace X11 -{ - /// - /// Declarations of unmanaged X11 functions - /// - public static class Unmanaged - { - /// - [DllImport("libX11", EntryPoint="XOpenDisplay")] - public extern static IntPtr XOpenDisplay(IntPtr display); - /// - [DllImport("libX11", EntryPoint="XCloseDisplay")] - public extern static int XCloseDisplay(IntPtr display); - } -} -#endif diff --git a/Src/Common/Keyboarding/Linux/XkbKeyboardAdaptor.cs b/Src/Common/Keyboarding/Linux/XkbKeyboardAdaptor.cs deleted file mode 100644 index 76b686d0a3..0000000000 --- a/Src/Common/Keyboarding/Linux/XkbKeyboardAdaptor.cs +++ /dev/null @@ -1,166 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using X11.XKlavier; -using SIL.FieldWorks.Common.COMInterfaces; - -namespace SIL.FieldWorks.Common.Keyboarding.Linux -{ - /// - /// Class for handling xkb keyboards on Linux - /// - internal class XkbKeyboardAdaptor: IKeyboardAdaptor - { - private static Type XklEngineType = typeof(XklEngine); - - private List m_BadLocales; - private XklEngine m_engine; - - /// - /// Sets the type of the XklEngine. This is useful for unit tests. - /// - internal static void SetXklEngineType() where T: XklEngine - { - XklEngineType = typeof(T); - } - - public XkbKeyboardAdaptor() - { - m_engine = Activator.CreateInstance(XklEngineType) as XklEngine; - } - - /// - /// Gets the IcuLocales by language and country. The 3-letter language and country codes - /// are concatenated with an underscore in between, e.g. fra_BEL - /// - private Dictionary IcuLocalesByLanguageCountry - { - get - { - var localesByLanguageCountry = new Dictionary(); - for (int i = 0; i < Icu.CountAvailableLocales(); i++) - { - var localeId = string.Copy(Icu.GetAvailableLocale(i)); - var icuLocale = new IcuLocale(localeId); - if (string.IsNullOrEmpty(icuLocale.LanguageCountry) || - localesByLanguageCountry.ContainsKey(icuLocale.LanguageCountry)) - { - continue; - } - localesByLanguageCountry[icuLocale.LanguageCountry] = icuLocale; - } - return localesByLanguageCountry; - } - } - - private void InitLocales() - { - if (m_BadLocales != null) - return; - - m_BadLocales = new List(); - - var configRegistry = XklConfigRegistry.Create(m_engine); - var layouts = configRegistry.Layouts; - var icuLocales = IcuLocalesByLanguageCountry; - - for (int iGroup = 0; iGroup < m_engine.GroupNames.Length; iGroup++) - { - // a group in a xkb keyboard is a keyboard layout. This can be used with - // multiple languages - which language is ambigious. Here we just add all - // of them. - var groupName = m_engine.GroupNames[iGroup]; - List layoutList; - if (!layouts.TryGetValue(groupName, out layoutList)) - { - // No language in layouts uses the groupName keyboard layout. - m_BadLocales.Add(new KeyboardErrorDescription(groupName)); - continue; - } - - string unrecognizedLayout = null; - for (int iLayout = 0; iLayout < layoutList.Count; iLayout++) - { - var layout = layoutList[iLayout]; - string description; - if (string.IsNullOrEmpty(layout.LayoutVariant)) - description = string.Format("{0} ({1})", layout.Language, layout.Country); - else - { - description = string.Format("{0} ({1}) - {2}", layout.Language, - layout.Country, layout.LayoutVariant); - } - - IcuLocale icuLocale; - int lcid; - if (icuLocales.TryGetValue(layout.Locale, out icuLocale)) - lcid = icuLocale.LCID; - else - lcid = Icu.GetLCID(layout.Locale); - - if (lcid <= 0) - { - if (iLayout == 0) - unrecognizedLayout = groupName; - } - else - { - // if we find the LCID for at least one layout, we don't report - // the other failing variations of this layout as error. - unrecognizedLayout = null; - var keyboard = new XkbKeyboardDescription(lcid, description, this, iGroup); - KeyboardController.Manager.RegisterKeyboard(lcid, keyboard); - } - } - if (unrecognizedLayout != null) - m_BadLocales.Add(new KeyboardErrorDescription(unrecognizedLayout)); - } - } - - public List ErrorKeyboards - { - get - { - InitLocales(); - return m_BadLocales; - } - } - - public void Initialize() - { - InitLocales(); - } - - public void Close() - { - m_engine.Close(); - m_engine = null; - } - - public void ActivateKeyboard(IKeyboardDescription keyboard, - IKeyboardDescription ignored) - { - Debug.Assert(keyboard.Engine == this); - Debug.Assert(keyboard is XkbKeyboardDescription); - var xkbKeyboard = keyboard as XkbKeyboardDescription; - if (xkbKeyboard == null) - throw new ArgumentException(); - - m_engine.SetGroup(xkbKeyboard.GroupIndex); - } - - public void DeactivateKeyboard(IKeyboardDescription keyboard) - { - } - } -} -#endif diff --git a/Src/Common/Keyboarding/Linux/XkbKeyboardDescription.cs b/Src/Common/Keyboarding/Linux/XkbKeyboardDescription.cs deleted file mode 100644 index 947d746ff6..0000000000 --- a/Src/Common/Keyboarding/Linux/XkbKeyboardDescription.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using SIL.FieldWorks.Common.Keyboarding; - -namespace SIL.FieldWorks.Common.Keyboarding.Linux -{ - /// - /// Keyboard description for a XKB keyboard layout. - /// - public class XkbKeyboardDescription: KeyboardDescription - { - /// - /// Initializes a new instance of the - /// class. - /// - /// Keyboard identifier. - /// Name of the keyboard layout - /// The keyboard adaptor that will handle this keyboard - /// The group index of this xkb keyboard - public XkbKeyboardDescription(int id, string name, IKeyboardAdaptor engine, - int groupIndex): base(id, name, engine) - { - GroupIndex = groupIndex; - } - - /// - /// Gets the group index of this keyboard. - /// - public int GroupIndex { get; private set; } - } -} -#endif diff --git a/Src/Common/Keyboarding/Linux/XklConfigRegistry.cs b/Src/Common/Keyboarding/Linux/XklConfigRegistry.cs deleted file mode 100644 index 0250d3c5ba..0000000000 --- a/Src/Common/Keyboarding/Linux/XklConfigRegistry.cs +++ /dev/null @@ -1,281 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if __MonoCS__ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Runtime.InteropServices; -using SIL.FieldWorks.Common.COMInterfaces; - -namespace X11.XKlavier -{ - /// - /// Provides access to the xklavier XKB config registry methods which provide access to - /// the keyboard layouts. - /// - internal class XklConfigRegistry - { - /// - /// XKB keyboard layout description - /// - public struct LayoutDescription - { - #region Alternative language codes - // ICU uses the ISO 639-3 language codes; xkb has at least some ISO 639-2/B codes. - // According to http://en.wikipedia.org/wiki/ISO_639-2#B_and_T_codes there are 20 languages - // that have both B and T codes, so we need to translate those. - private static Dictionary s_AlternateLanguageCodes; - - private Dictionary AlternateLanguageCodes - { - get - { - if (s_AlternateLanguageCodes == null) - { - s_AlternateLanguageCodes = new Dictionary(); - s_AlternateLanguageCodes["alb"] = "sqi"; // Albanian - s_AlternateLanguageCodes["arm"] = "hye"; // Armenian - s_AlternateLanguageCodes["baq"] = "eus"; // Basque - s_AlternateLanguageCodes["bur"] = "mya"; // Burmese - s_AlternateLanguageCodes["chi"] = "zho"; // Chinese - s_AlternateLanguageCodes["cze"] = "ces"; // Czech - s_AlternateLanguageCodes["dut"] = "nld"; // Dutch, Flemish - s_AlternateLanguageCodes["fre"] = "fra"; // French - s_AlternateLanguageCodes["geo"] = "kat"; // Georgian - s_AlternateLanguageCodes["ger"] = "deu"; // German - s_AlternateLanguageCodes["gre"] = "ell"; // Modern Greek (1453–) - s_AlternateLanguageCodes["ice"] = "isl"; // Icelandic - s_AlternateLanguageCodes["mac"] = "mkd"; // Macedonian - s_AlternateLanguageCodes["mao"] = "mri"; // Maori - s_AlternateLanguageCodes["may"] = "msa"; // Malay - s_AlternateLanguageCodes["per"] = "fas"; // Persian - s_AlternateLanguageCodes["rum"] = "ron"; // Romanian - s_AlternateLanguageCodes["slo"] = "slk"; // Slovak - s_AlternateLanguageCodes["tib"] = "bod"; // Tibetan - s_AlternateLanguageCodes["wel"] = "cym"; // Welsh - } - return s_AlternateLanguageCodes; - } - } - #endregion - - /// - /// Gets or sets the layout identifier. - /// - /// The layout identifier consists of the layout name and variant, separated - /// by a tab character. Example: "us\tintl". - public string LayoutId { get; internal set; } - - /// - /// Gets or sets the description of the layout as found in XklConfigItem. It consists - /// of the country and the variant, separated by a hyphen. - /// Example:"USA - International". - /// - public string Description { get; internal set; } - - /// - /// Gets or sets the keyboard layout variant, e.g. "International". - /// - public string LayoutVariant { get; internal set; } - - /// - /// Gets the locale for the current layout - /// - public string Locale - { - get { return LanguageCode + "_" + CountryCode; } - } - - private string m_LanguageCode; - - /// - /// Gets or sets the 3-letter language abbreviation (mostly ISO 639-2/B). - /// - public string LanguageCode - { - get { return m_LanguageCode; } - internal set - { - string langCode; - if (AlternateLanguageCodes.TryGetValue(value, out langCode)) - m_LanguageCode = langCode; - else - m_LanguageCode = value; - } - } - - /// - /// Gets the language name in the culture of the current thread - /// - public string Language - { - get - { - string language; - Icu.UErrorCode err; - Icu.GetDisplayLanguage(Locale, CultureInfo.CurrentUICulture.Name, - out language, out err); - return language; - } - } - - /// - /// Gets or sets the 3-letter country abbreviation. This is taken from the short - /// description of the layout converted to uppercase. - /// - public string CountryCode { get; internal set; } - - /// - /// Gets the contry name in the culture of the current thread - /// - public string Country - { - get - { - string country; - Icu.UErrorCode err; - Icu.GetDisplayCountry(Locale, CultureInfo.CurrentUICulture.Name, - out country, out err); - return country; - } - } - - public override string ToString() - { - return string.Format("[LayoutDescription: LayoutId={0}, Description={1}, " + - "LayoutVariant={2}, Locale={3}, LanguageCode={4}, Language={5}, " + - "CountryCode={6}, Country={7}]", LayoutId, Description, LayoutVariant, - Locale, LanguageCode, Language, CountryCode, Country); - } - } - - private Dictionary> m_Layouts; - - public static XklConfigRegistry Create(XklEngine engine) - { - var configRegistry = xkl_config_registry_get_instance(engine.Engine); - if (!xkl_config_registry_load(configRegistry, true)) - throw new ApplicationException("Got error trying to load config registry: " + engine.LastError); - return new XklConfigRegistry(configRegistry); - } - - internal IntPtr ConfigRegistry { get; private set; } - - private XklConfigRegistry(IntPtr configRegistry) - { - ConfigRegistry = configRegistry; - } - - /// - /// Gets all possible keyboard layouts defined in the system (though not necessarily - /// installed). - /// - public Dictionary> Layouts - { - get - { - if (m_Layouts == null) - { - m_Layouts = new Dictionary>(); - xkl_config_registry_foreach_language(ConfigRegistry, - ProcessLanguage, IntPtr.Zero); - } - return m_Layouts; - } - } - - private void ProcessLanguage(IntPtr configRegistry, ref XklConfigItem item, IntPtr unused) - { - IntPtr dataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(item)); - Marshal.StructureToPtr(item, dataPtr, false); - xkl_config_registry_foreach_language_variant(configRegistry, item.Name, - ProcessOneLayoutForLanguage, dataPtr); - Marshal.FreeHGlobal(dataPtr); - } - - private void ProcessOneLayoutForLanguage(IntPtr configRegistry, ref XklConfigItem item, - ref XklConfigItem subitem, IntPtr data) - { - var subitemIsNull = subitem.Parent.RefCount == IntPtr.Zero; - XklConfigItem language = (XklConfigItem)Marshal.PtrToStructure(data, typeof(XklConfigItem)); - var description = subitemIsNull ? item.Description : - item.Description + " - " + subitem.Description; - List layouts; - if (m_Layouts.ContainsKey(description)) - layouts = m_Layouts[description]; - else - { - layouts = new List(); - m_Layouts[description] = layouts; - } - - var newLayout = new LayoutDescription { - LayoutId = subitemIsNull ? item.Name : item.Name + "\t" + subitem.Name, - Description = description, - LayoutVariant = subitemIsNull ? string.Empty : subitem.Description, - LanguageCode = language.Name }; - if (item.Short_Description.Length < 3) - { - // we have a two letter country code; need to find the three-letter one - newLayout.CountryCode = - Icu.GetISO3Country(item.Short_Description + "_" + item.Name).ToUpper(); - } - else - newLayout.CountryCode = item.Short_Description.ToUpper(); - layouts.Add(newLayout); - } - - #region p/invoke related - [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] - private struct XklConfigItem - { - private const int XKL_MAX_CI_NAME_LENGTH = 32; - private const int XKL_MAX_CI_SHORT_DESC_LENGTH = 10; - private const int XKL_MAX_CI_DESC_LENGTH = 192; - - [StructLayout(LayoutKind.Sequential)] - public struct GObject - { - public IntPtr Class; - public IntPtr RefCount; - public IntPtr Data; - } - - public GObject Parent; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst=XKL_MAX_CI_NAME_LENGTH)] - public string Name; - // Setting the length to XKL_MAX_CI_DESC_LENGTH looks like a bug in the header file - // (/usr/include/libxklavier/xkl_config_item.h) - [MarshalAs(UnmanagedType.ByValTStr, SizeConst=XKL_MAX_CI_DESC_LENGTH)] - public string Short_Description; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst=XKL_MAX_CI_DESC_LENGTH)] - public string Description; - } - - private delegate void ConfigItemProcessFunc(IntPtr configRegistry, ref XklConfigItem item, IntPtr data); - private delegate void TwoConfigItemsProcessFunc(IntPtr configRegistry, - ref XklConfigItem item, ref XklConfigItem subitem, IntPtr data); - - [DllImport("libxklavier")] - private extern static IntPtr xkl_config_registry_get_instance(IntPtr engine); - - [DllImport("libxklavier")] - private extern static bool xkl_config_registry_load(IntPtr configRegistry, bool fExtrasNeeded); - - [DllImport("libxklavier")] - private extern static void xkl_config_registry_foreach_language(IntPtr configRegistry, - ConfigItemProcessFunc func, IntPtr data); - - [DllImport("libxklavier")] - private extern static void xkl_config_registry_foreach_language_variant(IntPtr configRegistry, - string languageCode, TwoConfigItemsProcessFunc func, IntPtr data); - #endregion - } -} -#endif diff --git a/Src/Common/Keyboarding/Linux/XklEngine.cs b/Src/Common/Keyboarding/Linux/XklEngine.cs deleted file mode 100644 index 2909762e91..0000000000 --- a/Src/Common/Keyboarding/Linux/XklEngine.cs +++ /dev/null @@ -1,218 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- - -#if __MonoCS__ -using System; -using System.Diagnostics; -using System.Reflection; -using System.Runtime.InteropServices; -using SIL.Utils; - -namespace X11.XKlavier -{ - /// - /// Provides access to the xklavier XKB keyboarding engine methods. - /// - internal class XklEngine - { - private struct XklState - { - public int Group; - public int Indicators; - } - - private string[] m_GroupNames; - - public XklEngine() - { - var display = GetDisplayConnection(); - Engine = xkl_engine_get_instance(display); - } - - public XklEngine(IntPtr display) - { - Engine = xkl_engine_get_instance(display); - } - - /// - /// Gets the X11 display connection that Mono already has open, rather than - /// carefully opening and closing it on our own in a way that doesnt crash (FWNX-895). - /// - internal static IntPtr GetDisplayConnection() - { - // When running views tests that get to this code from C++ through libcom, using - // reflection to load the SWF assembly has trouble finding it unless first access - // SWF without reflection or load it from a more specific path. - - // DisplayHandle is a static field but won't be initialized until a XplatUIX11 is constructed. - // Although a XplatUIX11 is already constructed when - // running Flex, it is not already constructed when running unit tests. So make sure - // it is constructed before requesting DisplayHandle so DisplayHandle is initialized. - var swfAssembly = Assembly.GetAssembly(typeof(System.Windows.Forms.Form)); - var xplatuix11Type = swfAssembly.GetType("System.Windows.Forms.XplatUIX11"); - xplatuix11Type.GetMethod("GetInstance", BindingFlags.Static | BindingFlags.Public).Invoke(null, null); - - var displayHandleField = xplatuix11Type.GetField("DisplayHandle", BindingFlags.Static | BindingFlags.NonPublic); - var displayHandleValue = displayHandleField.GetValue(null); - var displayConnection = (IntPtr)displayHandleValue; - - Debug.Assert(displayConnection != IntPtr.Zero, "Expected to have a handle on X11 display connection."); - return displayConnection; - } - - public void Close() - { - } - - internal IntPtr Engine { get; private set; } - - public string Name - { - get - { - var name = xkl_engine_get_backend_name(Engine); - return Marshal.PtrToStringAuto(name); - } - } - - public int NumGroups - { - get { return xkl_engine_get_num_groups(Engine); } - } - - public virtual string[] GroupNames - { - get - { - if (m_GroupNames == null) - { - int count = NumGroups; - var names = xkl_engine_get_groups_names(Engine); - var namePtrs = new IntPtr[count]; - Marshal.Copy(names, namePtrs, 0, count); - m_GroupNames = new string[count]; - for (int i = 0; i < count; i++) - { - m_GroupNames[i] = Marshal.PtrToStringAuto(namePtrs[i]); - } - } - return m_GroupNames; - } - } - - public int NextGroup - { - get { return xkl_engine_get_next_group(Engine); } - } - - public int PrevGroup - { - get { return xkl_engine_get_prev_group(Engine); } - } - - public int CurrentWindowGroup - { - get { return xkl_engine_get_current_window_group(Engine); } - } - - public int DefaultGroup - { - get { return xkl_engine_get_default_group(Engine); } - set { xkl_engine_set_default_group(Engine, value); } - } - - public void SetGroup(int grp) - { - xkl_engine_lock_group(Engine, grp); - } - - public void SetToplevelWindowGroup(bool fGlobal) - { - xkl_engine_set_group_per_toplevel_window(Engine, fGlobal); - } - - public bool IsToplevelWindowGroup - { - get { return xkl_engine_is_group_per_toplevel_window(Engine); } - } - - public int CurrentState - { - get - { - var statePtr = xkl_engine_get_current_state(Engine); - var state = (XklState)Marshal.PtrToStructure(statePtr, typeof(XklState)); - return state.Group; - } - } - - public int CurrentWindowState - { - get - { - var window = xkl_engine_get_current_window(Engine); - IntPtr statePtr; - if (xkl_engine_get_state(Engine, window, statePtr)) - { - var state = (XklState)Marshal.PtrToStructure(statePtr, typeof(XklState)); - return state.Group; - } - return -1; - } - } - - public string LastError - { - get - { - var error = xkl_get_last_error(); - return Marshal.PtrToStringAuto(error); - } - } - - // from libXKlavier - [DllImport("libxklavier")] - private extern static IntPtr xkl_engine_get_instance(IntPtr display); - - [DllImport("libxklavier")] - private extern static IntPtr xkl_engine_get_backend_name(IntPtr engine); - - [DllImport("libxklavier")] - private extern static int xkl_engine_get_num_groups(IntPtr engine); - - [DllImport("libxklavier")] - private extern static IntPtr xkl_engine_get_groups_names(IntPtr engine); - - [DllImport("libxklavier")] - private extern static int xkl_engine_get_next_group(IntPtr engine); - [DllImport("libxklavier")] - private extern static int xkl_engine_get_prev_group(IntPtr engine); - [DllImport("libxklavier")] - private extern static int xkl_engine_get_current_window_group(IntPtr engine); - [DllImport("libxklavier")] - private extern static void xkl_engine_lock_group(IntPtr engine, int grp); - [DllImport("libxklavier")] - private extern static int xkl_engine_get_default_group(IntPtr engine); - [DllImport("libxklavier")] - private extern static void xkl_engine_set_default_group(IntPtr engine, int grp); - [DllImport("libxklavier")] - private extern static void xkl_engine_set_group_per_toplevel_window(IntPtr engine, bool isGlobal); - [DllImport("libxklavier")] - private extern static bool xkl_engine_is_group_per_toplevel_window(IntPtr engine); - [DllImport("libxklavier")] - private extern static IntPtr xkl_engine_get_current_state(IntPtr engine); - [DllImport("libxklavier")] - private extern static IntPtr xkl_engine_get_current_window(IntPtr engine); - [DllImport("libxklavier")] - private extern static bool xkl_engine_get_state(IntPtr engine, IntPtr win, IntPtr state_out); - [DllImport("libxklavier")] - private extern static IntPtr xkl_get_last_error(); - } -} -#endif diff --git a/Src/Common/Keyboarding/Types/KeyboardCollection.cs b/Src/Common/Keyboarding/Types/KeyboardCollection.cs new file mode 100644 index 0000000000..4cf1f20302 --- /dev/null +++ b/Src/Common/Keyboarding/Types/KeyboardCollection.cs @@ -0,0 +1,44 @@ +// --------------------------------------------------------------------------------------------- +#region // Copyright (c) 2013, SIL International. All Rights Reserved. +// +// Copyright (c) 2013, SIL International. All Rights Reserved. +// +// Distributable under the terms of either the Common Public License or the +// GNU Lesser General Public License, as specified in the LICENSING.txt file. +// +#endregion +// --------------------------------------------------------------------------------------------- +using System; +using System.Collections.ObjectModel; +using SIL.FieldWorks.Common.Keyboarding.Interfaces; + +namespace SIL.FieldWorks.Common.Keyboarding.Types +{ + /// ---------------------------------------------------------------------------------------- + /// + /// A collection of keyboard descriptions + /// + /// ---------------------------------------------------------------------------------------- + public class KeyboardCollection: KeyedCollection + { + #region Overrides of KeyedCollection + /// + ///Returns the key from the specified . + /// + protected override string GetKeyForItem(IKeyboardDescription item) + { + return item.Id; + } + #endregion + + public bool Contains(string layout, string locale) + { + return Contains(KeyboardDescription.GetId(layout, locale)); + } + + public IKeyboardDescription this[string layout, string locale] + { + get { return this[KeyboardDescription.GetId(layout, locale)]; } + } + } +} diff --git a/Src/Common/Keyboarding/Windows/WinKeyboardAdaptor.cs b/Src/Common/Keyboarding/Windows/WinKeyboardAdaptor.cs deleted file mode 100644 index 9686bf91be..0000000000 --- a/Src/Common/Keyboarding/Windows/WinKeyboardAdaptor.cs +++ /dev/null @@ -1,95 +0,0 @@ -// -------------------------------------------------------------------------------------------- -// -// Copyright (c) 2011, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// -------------------------------------------------------------------------------------------- -#if !__MonoCS__ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -using SIL.FieldWorks.Common.COMInterfaces; - -namespace SIL.FieldWorks.Common.Keyboarding.Windows -{ - internal class WinKeyboardAdaptor: IKeyboardAdaptor - { - private List m_BadLocales; - - public WinKeyboardAdaptor() - { - } - - public void Initialize() - { - GetLocales(); - } - - public void Close() - { - } - - public List ErrorKeyboards - { - get { return m_BadLocales; } - } - - private void GetLocales() - { - // REVIEW (EberhardB): Could we use InputLanguage instead of LgLanguageEnumerator? - - ILgLanguageEnumerator lenum = LgLanguageEnumeratorClass.Create(); - int id = 0; - m_BadLocales = new List(); - try - { - lenum.Init(); - for (; ;) - { - string name; - try - { - lenum.Next(out id, out name); - } - catch (OutOfMemoryException) - { - throw; - } - catch - { // if we fail to get a language, skip this one, but display once in error message. - m_BadLocales.Add(new KeyboardErrorDescription(KeyboardType.System, id)); - // Under certain conditions it can happen that lenum.Next() returns - // E_UNEXPECTED right away. We're then stuck in an infinite loop. - if (m_BadLocales.Count > 1000 || id == 0) - break; - continue; - } - if (id == 0) - break; - KeyboardController.Manager.RegisterKeyboard(id, new KeyboardDescription(id, name, this)); - } - } - finally - { - // LT-8465 when Windows and Language Options changes are made lenum does not - // always get updated correctly so we are ensuring the memory for this - // ComObject gets released. - Marshal.FinalReleaseComObject(lenum); - } - } - - public void ActivateKeyboard(IKeyboardDescription keyboard, IKeyboardDescription systemKeyboard) - { - // TODO - throw new NotImplementedException(); - } - - public void DeactivateKeyboard(IKeyboardDescription keyboard) - { - } - } -} -#endif diff --git a/Src/Common/Keyboarding/Windows/WinKeyboardDescription.cs b/Src/Common/Keyboarding/Windows/WinKeyboardDescription.cs new file mode 100644 index 0000000000..6a3e16685c --- /dev/null +++ b/Src/Common/Keyboarding/Windows/WinKeyboardDescription.cs @@ -0,0 +1,56 @@ +// --------------------------------------------------------------------------------------------- +#region // Copyright (c) 2013, SIL International. All Rights Reserved. +// +// Copyright (c) 2013, SIL International. All Rights Reserved. +// +// Distributable under the terms of either the Common Public License or the +// GNU Lesser General Public License, as specified in the LICENSING.txt file. +// +#endregion +// --------------------------------------------------------------------------------------------- +#if !__MonoCS__ +using System; +using System.Diagnostics.CodeAnalysis; +using SIL.FieldWorks.Common.Keyboarding; +using SIL.FieldWorks.Common.Keyboarding.Interfaces; +using SIL.FieldWorks.Common.Keyboarding.InternalInterfaces; +using SIL.Utils; + +namespace SIL.FieldWorks.Common.Keyboarding.Windows +{ + /// ---------------------------------------------------------------------------------------- + /// + /// Keyboard description for a Windows system keyboard + /// + /// Holds information about a specific keyboard, especially for IMEs (e.g. whether + /// English input mode is selected) in addition to the default keyboard description. This + /// is necessary to restore the current setting when switching between fields with + /// differing keyboards. The user expects that a keyboard keeps its state between fields. + /// + /// ---------------------------------------------------------------------------------------- + [SuppressMessage("Gendarme.Rules.Design", "TypesWithNativeFieldsShouldBeDisposableRule", + Justification = "WindowHandle is a reference to a control")] + internal class WinKeyboardDescription : KeyboardDescription + { + /// + /// Initializes a new instance of the + /// class. + /// + public WinKeyboardDescription(string name, string locale, IKeyboardAdaptor engine, int keyboardHandle) + : base(name, locale, engine, KeyboardType.System) + { + ConversionMode = (int)(Win32.IME_CMODE.NATIVE | Win32.IME_CMODE.SYMBOL); + KeyboardHandle = keyboardHandle; + } + + public int ConversionMode { get; set; } + public int SentenceMode { get; set; } + public IntPtr WindowHandle { get; set; } + + // MS defines the Handle as IntPtr, but in reality it is always a 32-bit value, + // so Int32 is better suited. A keyboard handle is just a numeric value, not + // a pointer to some internal datastructure. + public int KeyboardHandle { get; private set; } + } +} +#endif diff --git a/Src/Common/Keyboarding/gendarme-Keyboarding.ignore b/Src/Common/Keyboarding/gendarme-Keyboarding.ignore deleted file mode 100644 index a0410c1407..0000000000 --- a/Src/Common/Keyboarding/gendarme-Keyboarding.ignore +++ /dev/null @@ -1,14 +0,0 @@ -# Gendarme filter file to suppress reporting of defects - -#----------------------------------------------------------------------------------------------- -R: Gendarme.Rules.Design.TypesWithDisposableFieldsShouldBeDisposableRule - -# m_KeyboadSwitcher gets disposed in Close() which in turn gets called from KeyboardControllerImpl.Dispose -T: SIL.FieldWorks.Common.Keyboarding.Linux.IbusKeyboardAdaptor - -#----------------------------------------------------------------------------------------------- -R: Gendarme.Rules.Design.TypesWithNativeFieldsShouldBeDisposableRule - -# No need to release XklConfigRegistry or XklEngine -T: X11.XKlavier.XklConfigRegistry -T: X11.XKlavier.XklEngine diff --git a/Src/Common/PrintLayout/PrintLayoutTests/PublicationControlTests.cs b/Src/Common/PrintLayout/PrintLayoutTests/PublicationControlTests.cs index 2e9bd5aa5f..4dccaf7063 100644 --- a/Src/Common/PrintLayout/PrintLayoutTests/PublicationControlTests.cs +++ b/Src/Common/PrintLayout/PrintLayoutTests/PublicationControlTests.cs @@ -339,11 +339,6 @@ public void Serialize(System.Runtime.InteropServices.ComTypes.IStream _strm) throw new NotImplementedException("The method or operation is not implemented."); } - public void SetKeyboardForWs(ILgWritingSystem _ws, ref string _bstrActiveKeymanKbd, ref int _nActiveLangId, ref int _hklActive, ref bool _fSelectLangPending) - { - throw new NotImplementedException("The method or operation is not implemented."); - } - public void SetRootObject(int hvo, IVwViewConstructor _vwvc, int frag, IVwStylesheet _ss) { throw new NotImplementedException("The method or operation is not implemented."); diff --git a/Src/Common/RootSite/RootSite.cs b/Src/Common/RootSite/RootSite.cs index 8bbdb204f1..e59121fb64 100644 --- a/Src/Common/RootSite/RootSite.cs +++ b/Src/Common/RootSite/RootSite.cs @@ -33,6 +33,7 @@ using System.Runtime.InteropServices; using System.Windows.Automation.Provider; using System.Windows.Forms; +using Palaso.WritingSystems; using SIL.CoreImpl; using SIL.FieldWorks.Common.COMInterfaces; using SIL.FieldWorks.Common.FwUtils; @@ -237,6 +238,14 @@ public override bool InSelectionChanged set { s_fInSelectionChanged = value; } } + /// + /// With access to the cache, we can limit this to writing sytems the user might plausibly want for this project. + /// + protected override IWritingSystemDefinition[] PlausibleWritingSystems + { + get { return m_fdoCache.ServiceLocator.WritingSystems.AllWritingSystems.Cast().ToArray(); } + } + /// ------------------------------------------------------------------------------------ /// /// Creates a new RootSiteEditingHelper used for processing editing requests. diff --git a/Src/Common/RootSite/RootSite.csproj b/Src/Common/RootSite/RootSite.csproj index 8c57ed0f5f..dde1120a7e 100644 --- a/Src/Common/RootSite/RootSite.csproj +++ b/Src/Common/RootSite/RootSite.csproj @@ -142,7 +142,7 @@ False - ..\..\..\Output\Debug\Palaso.dll + ..\..\..\Downloads\Palaso.dll False diff --git a/Src/Common/RootSite/RootSiteTests/BasicViewTestsBase.cs b/Src/Common/RootSite/RootSiteTests/BasicViewTestsBase.cs index 40b661cd20..b5cf2a9062 100644 --- a/Src/Common/RootSite/RootSiteTests/BasicViewTestsBase.cs +++ b/Src/Common/RootSite/RootSiteTests/BasicViewTestsBase.cs @@ -51,13 +51,6 @@ protected virtual DummyBasicView CreateDummyBasicView() return new DummyBasicView(m_hvoRoot, m_flidContainingTexts); } - /// - public override void FixtureTeardown() - { - KeyboardHelper.Release(); - base.FixtureTeardown(); - } - /// ----------------------------------------------------------------------------------- /// /// Create a new basic view diff --git a/Src/Common/SimpleRootSite/EditingHelper.cs b/Src/Common/SimpleRootSite/EditingHelper.cs index 7e98307d2e..208206ba8e 100644 --- a/Src/Common/SimpleRootSite/EditingHelper.cs +++ b/Src/Common/SimpleRootSite/EditingHelper.cs @@ -16,6 +16,8 @@ using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; +using Palaso.UI.WindowsForms.Keyboarding; +using Palaso.WritingSystems; using SIL.CoreImpl; using SIL.FieldWorks.Common.COMInterfaces; using SIL.FieldWorks.Common.RootSites.Properties; @@ -220,14 +222,6 @@ public class EditingHelper : IFWDisposable, ISelectionChangeNotifier private UserControl m_control; // currently either SimpleRootSite or PublicationControl. /// Object that provides editing callback methods (in production code, this is usually (always?) the rootsite) protected IEditingCallbacks m_callbacks; - /// handle of current system keyboard/language - private IntPtr m_hklActive; - /// current Keyman keyboard - private string m_sActiveKeymanKbd; //"xxxUnknownyyy"; - /// Current keyboard's langid - private int m_nActiveLangId; - /// count of pending Keyman keyboard changes to ignore - private int m_cSelectLangPending; /// The default cursor to use private Cursor m_defaultCursor; @@ -242,7 +236,6 @@ public class EditingHelper : IFWDisposable, ISelectionChangeNotifier /// every time the selection changes) Protected to allow for testing - production /// subclasses should not access this member directly protected SelectionHelper m_currentSelection; - private int m_lastKeyboardWS = -1; /// Flag to prevent deletion of an object protected bool m_preventObjDeletions; @@ -387,9 +380,6 @@ protected virtual void Dispose(bool disposing) } // Dispose unmanaged resources here, whether disposing is true or false. - // Should this be zapped? - //Marshal.FreeCoTaskMem(m_hklActive); - //m_hklActive = IntPtr.Zero; m_control = null; m_callbacks = null; m_currentSelection = null; @@ -917,6 +907,9 @@ protected void CollectTypedInput(char chsFirst, StringBuilder buffer) { // The first character goes into the buffer buffer.Append(chsFirst); +#if !__MonoCS__ + // Note: When/if porting to MONO, the following block of code can be removed + // and still work. if (chsFirst < ' ' || chsFirst == (char)VwSpecialChars.kscDelForward) return; @@ -925,11 +918,7 @@ protected void CollectTypedInput(char chsFirst, StringBuilder buffer) if (Control == null || KeyboardHelper.ActiveKeymanKeyboard != string.Empty) return; -#if !__MonoCS__ // Collect any characters that are currently in the message queue - // Note: When/if porting to MONO, the following block of code can be removed - // and still work. However, make sure the final line in the method still remains - // (i.e. the line where stuBuffer is being set). Win32.MSG msg = new Win32.MSG(); while (true) { @@ -1257,15 +1246,6 @@ public IVwViewConstructor ViewConstructor } } - /// - /// Get/Set the active input language. - /// - internal int ActiveLanguageId - { - get { return m_nActiveLangId; } - set { m_nActiveLangId = value; } - } - /// ------------------------------------------------------------------------------------ /// /// Gets a value indicating whether the current view is a Scripture view. @@ -1398,17 +1378,6 @@ public UserControl Control get { CheckDisposed(); return m_control; } } - /// ------------------------------------------------------------------------------------ - /// - /// Get/Set count indicating how many language selections are pending. - /// - /// ------------------------------------------------------------------------------------ - public int SelectLangPending - { - get { CheckDisposed(); return m_cSelectLangPending; } - set { CheckDisposed(); m_cSelectLangPending = value; } - } - /// ----------------------------------------------------------------------------------- /// /// Gets or sets the cursor that will always be shown. @@ -2956,44 +2925,17 @@ internal void WritingSystemHvoChanged() /// ----------------------------------------------------------------------------------- protected void SetKeyboardForWs(ILgWritingSystem ws) { - if(Callbacks == null) - { - return; - } - IVwRootBox rootb = Callbacks.EditedRootBox; - - if (ws == null || rootb == null) + if(Callbacks == null || ws == null) { - //Debug.WriteLine("EditingHelper.SetKeyboardForWs(" + - // ws.WritingSystem + "[" + ws.IcuLocale + - // "]) -> ActivateDefaultKeyboard()"); ActivateDefaultKeyboard(); return; } + try { - int nWs = ws.Handle; - if (nWs == m_lastKeyboardWS) - return; - m_lastKeyboardWS = nWs; - - //Debug.WriteLine("EditingHelper.SetKeyboardForWs(" + - // ws.WritingSystem + "(" + ws.IcuLocale + - // ") -> rootb.SetKeyboardForWs(hklActive = " + (int)hklActive + ")"); - - int hklActive = (int)m_hklActive; - - bool fSelectLangPending = false; - rootb.SetKeyboardForWs(ws, ref m_sActiveKeymanKbd, ref m_nActiveLangId, - ref hklActive, ref fSelectLangPending); - if (fSelectLangPending) - m_cSelectLangPending++; - m_hklActive = (IntPtr)hklActive; - - //Debug.WriteLine("EditingHelper.SetKeyboardForWs(" + - // ws.WritingSystem + "(" + ws.IcuLocale + - // ") - after rootb.SetKeyboardForWs(), LangId = " + m_nActiveLangId + - // ", hklActive = " + (int)hklActive); + var palasoWs = ((IWritingSystemManager)WritingSystemFactory).Get(ws.Handle) as IWritingSystemDefinition; + if (palasoWs != null && palasoWs.LocalKeyboard != null) + palasoWs.LocalKeyboard.Activate(); } catch { @@ -3009,19 +2951,16 @@ protected void SetKeyboardForWs(ILgWritingSystem ws) /// Sets the keyboard for a writing system. /// /// The new ws. - /// The previous writing system /// ------------------------------------------------------------------------------------ - public int SetKeyboardForWs(int newWs) + public void SetKeyboardForWs(int newWs) { CheckDisposed(); - int oldWs = m_lastKeyboardWS; if (Callbacks == null || !Callbacks.GotCacheOrWs || WritingSystemFactory == null) - return oldWs; // Can't do anything useful, so let's not do anything at all. + return; // Can't do anything useful, so let's not do anything at all. ILgWritingSystem ws = WritingSystemFactory.get_EngineOrNull(newWs); SetKeyboardForWs(ws); - return oldWs; } /// ----------------------------------------------------------------------------------- @@ -3057,35 +2996,10 @@ public void SetKeyboardForSelection(IVwSelection vwsel) /// /// Activates the default keyboard. /// - /// On Windows 98, sending this message unnecessarily destroys - /// the current keystroke context, so only do it when we're actually switching - /// /// ------------------------------------------------------------------------------------ private void ActivateDefaultKeyboard() { - InputLanguage inputLng = InputLanguage.DefaultInputLanguage; - - Debug.Assert(inputLng != null); - // REVIEW: Do we really need to try to keep track of m_hklActive and have this - // logic to prevent "switching" when we're going to the same keyboard? The above - // remark suggests this was needed only for Windows 98. - if (inputLng == null || (m_hklActive != (IntPtr)0 && inputLng.Handle == m_hklActive)) - return; - - //Debug.WriteLine("EditingHelper.ActivateKeyboard() - inputLng = " + - // inputLng.ToString() + - // " [" + (int)inputLng.Handle + "], m_hklActive = " + (int)m_hklActive); - - if (KeyboardHelper.ActivateKeyboard(inputLng.Culture.LCID, ref m_nActiveLangId, - ref m_sActiveKeymanKbd)) - { - m_cSelectLangPending++; - } - - m_hklActive = inputLng.Handle; - m_sActiveKeymanKbd = null; - // REVIEW: this is not quite right if the sort is not 0 (default). - m_nActiveLangId = inputLng.Culture.LCID; + Keyboard.Controller.ActivateDefaultKeyboard(); } /// @@ -3141,11 +3055,6 @@ internal void BestStyleNameChanged() public void LostFocus(Control newFocusedControl, bool fIsChildWindow) { CheckDisposed(); - m_hklActive = (IntPtr) 0; - m_sActiveKeymanKbd = null; //"xxxUnknownyyy"; - m_nActiveLangId = 0; - m_cSelectLangPending = 0; - m_lastKeyboardWS = -1; //Debug.WriteLine(string.Format("EditingHelper.LostFocus:\n\t\t\tlost: {3} ({4}), Name={5}\n\t\t\tnew: {0} ({1}), Name={2}", // newFocusedControl != null ? newFocusedControl.ToString() : "", @@ -3177,14 +3086,6 @@ private static bool ShouldRestoreKeyboardSwitchingTo(Control newFocusedControl) /// internal void GotFocus() { - // Added to solve a problem in TE Back Translation view where these values can be out of - // sync with current selected keyboard. Problem is caused by how selection is restored - // to each pane when view is created. - m_hklActive = (IntPtr)0; - m_sActiveKeymanKbd = null; //"xxxUnknownyyy"; - m_nActiveLangId = 0; - m_cSelectLangPending = 0; - m_lastKeyboardWS = -1; } #endregion diff --git a/Src/Common/SimpleRootSite/IBusCommunicator.cs b/Src/Common/SimpleRootSite/IBusCommunicator.cs index e29570670d..21eea4f1cb 100644 --- a/Src/Common/SimpleRootSite/IBusCommunicator.cs +++ b/Src/Common/SimpleRootSite/IBusCommunicator.cs @@ -135,7 +135,8 @@ public void FocusIn() ProtectedIBusInvoke(() => m_inputContext.FocusIn()); // For performance reasons we store the active inputContext - SIL.FieldWorks.Views.GlobalCachedInputContext.InputContext = m_inputContext; + // TODO: re-enable + //SIL.FieldWorks.Views.GlobalCachedInputContext.InputContext = m_inputContext; } /// @@ -148,7 +149,8 @@ public void FocusOut() ProtectedIBusInvoke(() => m_inputContext.FocusOut()); - SIL.FieldWorks.Views.GlobalCachedInputContext.Clear(); + // TODO: re-enable + //SIL.FieldWorks.Views.GlobalCachedInputContext.Clear(); } /// diff --git a/Src/Common/SimpleRootSite/SimpleRootSite.cs b/Src/Common/SimpleRootSite/SimpleRootSite.cs index e8aea7a317..e9f70a404f 100644 --- a/Src/Common/SimpleRootSite/SimpleRootSite.cs +++ b/Src/Common/SimpleRootSite/SimpleRootSite.cs @@ -18,11 +18,13 @@ using System.Diagnostics.CodeAnalysis; using System.Drawing; using System.Drawing.Printing; +using System.Linq; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Windows.Automation.Provider; using Accessibility; - +using Palaso.WritingSystems; +using Palaso.UI.WindowsForms.Keyboarding.Types; using SIL.CoreImpl; using SIL.FieldWorks.Common.COMInterfaces; using SIL.Utils; @@ -166,80 +168,6 @@ public void CheckDisposed() public class SimpleRootSite : UserControl, IVwRootSite, IRootSite, IxCoreColleague, IEditingCallbacks, IReceiveSequentialMessages, IMessageFilter, IFWDisposable { - #region Class LcidKeyboardStatus - /// ------------------------------------------------------------------------------------ - /// - /// Holds information about a specific keyboard, especially for IMEs (e.g. whether - /// English input mode is selected). This is necessary to restore the current setting - /// when switching between fields with differing keyboards. The user expects that a - /// keyboard keeps its state between fields. - /// - /// ------------------------------------------------------------------------------------ - protected class LcidKeyboardMode - { - // we use Nullable for our two fields - private int? m_ConversionMode; - private int? m_SentenceMode; - - /// -------------------------------------------------------------------------------- - /// - /// Initializes a new instance of the class. - /// - /// -------------------------------------------------------------------------------- - public LcidKeyboardMode() - { - m_ConversionMode = null; - m_SentenceMode = null; - } - - /// -------------------------------------------------------------------------------- - /// - /// Initializes a new instance of the class. - /// - /// The conversion mode. - /// The sentence mode. - /// -------------------------------------------------------------------------------- - public LcidKeyboardMode(int conversionMode, int sentenceMode) - { - m_ConversionMode = conversionMode; - m_SentenceMode = sentenceMode; - } - - /// -------------------------------------------------------------------------------- - /// - /// Gets a value indicating whether the conversion or sentence mode properties have - /// a value. - /// - /// -------------------------------------------------------------------------------- - public bool HasValue - { - get { return m_ConversionMode.HasValue || m_SentenceMode.HasValue; } - } - - /// -------------------------------------------------------------------------------- - /// - /// Gets or sets the conversion mode. - /// - /// -------------------------------------------------------------------------------- - public int ConversionMode - { - get { return m_ConversionMode ?? 0; } - set { m_ConversionMode = value; } - } - - /// -------------------------------------------------------------------------------- - /// - /// Gets or sets the sentence mode. - /// - /// -------------------------------------------------------------------------------- - public int SentenceMode - { - get { return m_SentenceMode ?? 0; } - set { m_SentenceMode = value; } - } - } - #endregion - #region Events /// /// This event notifies you that the right mouse button was clicked, @@ -373,23 +301,6 @@ public int SentenceMode /// protected int m_wsPending; - /// Keyman select language message - protected static readonly uint s_wm_kmselectlang = -#if !__MonoCS__ - Win32.RegisterWindowMessage("WM_KMSELECTLANG"); -#else - // This Keyman stuff will not work on Linux. - 0; -#endif - /// Keyman change keyboard message - protected static readonly uint s_wm_kmkbchange = -#if !__MonoCS__ - Win32.RegisterWindowMessage("WM_KMKBCHANGE"); -#else - // This Keyman stuff will not work on Linux. - 0; -#endif - /// height of an optional fixed header at the top of the client window. protected int m_dyHeader; @@ -424,14 +335,6 @@ public int SentenceMode /// Flag used to ensure that OnInputLangChanged gets registered once. private bool m_fRegisteredOnInputLangChanged = false; -#if !__MonoCS__ - /// Keep track of the keyboard states for the different LCIDs (writing systems). - /// This variable can be static since the same keyboard should behave the same in all - /// fields in this application. - private static Dictionary s_KeyboardModes = - new Dictionary(); -#endif - /// /// This is set true during processing of the OnPaint message. It serves to suppress /// certain behavior that ought not to happen during a paint. @@ -2099,7 +2002,7 @@ public bool AllowPainting if (m_nAllowPaint == 0 && Visible && IsHandleCreated) { #if !__MonoCS__ - Win32.SendMessage(Handle, (int)Win32.WinMsgs.WM_SETREDRAW, 1, 0); + Utils.Win32.SendMessage(Handle, (int)Utils.Win32.WinMsgs.WM_SETREDRAW, 1, 0); Update(); Invalidate(); #else @@ -2118,7 +2021,7 @@ public bool AllowPainting { // prevent painting if (m_nAllowPaint == 0 && Visible && IsHandleCreated) #if !__MonoCS__ - Win32.SendMessage(Handle, (int)Win32.WinMsgs.WM_SETREDRAW, 0, 0); + Utils.Win32.SendMessage(Handle, (int)Utils.Win32.WinMsgs.WM_SETREDRAW, 0, 0); #else this.SuspendLayout(); #endif @@ -3152,89 +3055,6 @@ internal int ConvertKeyValue(int keyValue) return m_orientationManager.ConvertKeyValue(keyValue); } - /// ------------------------------------------------------------------------------------ - /// The Keyman keyboard has changed. Determine the writing system that is - /// probably implied, and apply it to the current range and/or future typing. - /// ------------------------------------------------------------------------------------ - public void OnKeymanKeyboardChange(IntPtr wpFlags, IntPtr lpHKL) - { - CheckDisposed(); - if (m_rootb == null) - return; // For paranoia. - IVwSelection vwsel = m_rootb.Selection; - if (vwsel == null) - return; // can't do anything useful. - - ILgWritingSystemFactory wsf; - List vws = EditingHelper.GetWsListCurrentFirst(vwsel, out wsf); - if (vws == null) - return; // not enough valid writing systems to make it worth changing. - - string sKeymanKbd = KeyboardHelper.ActiveKeymanKeyboard; - - int wsMatch = -1; - int countNoKeymanKeyboard = 0; - foreach (int ws in vws) - { - if (ws == 0) - continue; - ILgWritingSystem lgws = wsf.get_EngineOrNull(ws); - if (lgws == null) - continue; - if (string.IsNullOrEmpty(lgws.Keyboard)) - countNoKeymanKeyboard++; - } - foreach (int ws in vws) - { - // Don't consider switching to the default, dummy writing system. - if (ws == 0) - continue; - - ILgWritingSystem lgws = wsf.get_EngineOrNull(ws); - if (lgws == null) - continue; - - string sWsKbd = lgws.Keyboard; - if (sKeymanKbd == sWsKbd) - { - wsMatch = ws; - if (wsMatch == vws[0]) - return; // no change from current. - break; - } - } - - if (wsMatch == -1) // no known writing system uses this keyboard - return; - - // Don't switch to some writing system just on the strength of not using a keyman - // keyboard at all, unless it is the only active one that does not. - if (string.IsNullOrEmpty(sKeymanKbd) && countNoKeymanKeyboard > 1) - return; - - m_wsPending = -1; - bool fRange = vwsel.IsRange; - if (fRange) - { - // Delay handling it until we get an insertion point. - m_wsPending = wsMatch; - return; - } - - // props of current selection, an IP (therefore only 1 lot of props). - ITsTextProps[] vttpTmp; - IVwPropertyStore[] vvpsTmp; - int cttp; - SelectionHelper.GetSelectionProps(vwsel, out vttpTmp, out vvpsTmp, out cttp); - - ITsPropsBldr tpb = vttpTmp[0].GetBldr(); - tpb.SetIntPropValues((int)FwTextPropType.ktptWs, - (int)FwTextPropVar.ktpvDefault, wsMatch); - ITsTextProps[] rgttpNew = new ITsTextProps[1]; - rgttpNew[0] = tpb.GetTextProps(); - vwsel.SetSelectionProps(1, rgttpNew); - } - /// ------------------------------------------------------------------------------------ /// /// Set the accessible name that the root box will return for this root site. @@ -3492,8 +3312,8 @@ protected void OnSetFocus(Message m) #if !__MonoCS__ IntPtr hwndOld = m.WParam; int procIdOld, procIdThis; - Win32.GetWindowThreadProcessId(hwndOld, out procIdOld); - Win32.GetWindowThreadProcessId(Handle, out procIdThis); + Utils.Win32.GetWindowThreadProcessId(hwndOld, out procIdOld); + Utils.Win32.GetWindowThreadProcessId(Handle, out procIdThis); if (procIdOld == procIdThis && m_rootb != null && EditingHelper != null) EditingHelper.SetKeyboardForSelection(m_rootb.Selection); #else @@ -3541,22 +3361,6 @@ protected override void OnGotFocus(EventArgs e) this.EnsureDefaultSelection(); Activate(VwSelectionState.vssEnabled); - // Restore the state of the new keyboard to the previous value. If we don't do - // that e.g. in Chinese IME the input mode will toggle between English and - // Chinese (LT-7487 et al). - // We used to do this only in OnInputLanguageChanged(), but WM_INPUTLANGCHANGED - // messages are no longer sequenced (but WM_SETFOCUS is), and so the field doesn't - // have focus yet when we process WM_INPUTLANGCHANGED. This means we don't call - // RestoreKeyboardStatus which results in toggling between English and Chinese - // input of Chinese IME. - int wsSel = SelectionHelper.GetFirstWsOfSelection(m_rootb.Selection); - if (wsSel != 0) - { - ILgWritingSystem qws = WritingSystemFactory.get_EngineOrNull(wsSel); - if (qws != null) - RestoreKeyboardStatus(qws.LCID); - } - EditingHelper.GotFocus(); } @@ -3618,8 +3422,6 @@ protected virtual void OnKillFocus(Control newWindow, bool fIsChildWindow) UpdateSelectionEnabledState(newWindow); - UpdateCurrentKeyboardStatus(); - // This window is losing control of the keyboard, so make sure when we get the focus // again we reset it to what we want. EditingHelper.LostFocus(newWindow, fIsChildWindow); @@ -3653,56 +3455,6 @@ public interface ISuppressDefaultKeyboardOnKillFocus { } - /// ------------------------------------------------------------------------------------ - /// - /// Updates the current keyboard status so that we can restore this state. - /// - /// ------------------------------------------------------------------------------------ - private void UpdateCurrentKeyboardStatus() - { -#if !__MonoCS__ - IntPtr context = Win32.ImmGetContext(new HandleRef(this, Handle)); - if (context != IntPtr.Zero) - { - int conversionMode; - int sentenceMode; - Win32.ImmGetConversionStatus(new HandleRef(this, context), - out conversionMode, out sentenceMode); - int lcid = LcidHelper.LangIdFromLCID(InputLanguage.CurrentInputLanguage.Culture.LCID); - s_KeyboardModes[lcid] = new LcidKeyboardMode(conversionMode, sentenceMode); - } -#else - // TODO-Linux: May have to do something with keyboard here -#endif - } - - /// ------------------------------------------------------------------------------------ - /// - /// Restores the IME keyboard status. - /// - /// The locale id. - /// ------------------------------------------------------------------------------------ - private void RestoreKeyboardStatus(int lcid) - { -#if !__MonoCS__ - // Restore the state of the new keyboard to the previous value. If we don't do - // that e.g. in Chinese IME the input mode will toggle between English and - // Chinese (LT-7488). - LcidKeyboardMode keyboardMode; - if (s_KeyboardModes.TryGetValue(lcid, out keyboardMode) && keyboardMode.HasValue) - { - IntPtr context = Win32.ImmGetContext(new HandleRef(this, Handle)); - if (context != IntPtr.Zero) - { - Win32.ImmSetConversionStatus(new HandleRef(this, context), - keyboardMode.ConversionMode, keyboardMode.SentenceMode); - } - } -#else - // TODO-Linux: do we need to port this? -#endif - } - /// ----------------------------------------------------------------------------------- /// /// Process mouse move @@ -5128,6 +4880,20 @@ protected virtual void CallMouseUp(Point pt, Rectangle rcSrcRoot, Rectangle rcDs #endregion // Methods that delegate events to the rootbox + /// + /// Writing systems the user might reasonably choose. Overridden in RootSite to limit it to the ones active in this project. + /// + protected virtual IWritingSystemDefinition[] PlausibleWritingSystems + { + get + { + var manager = (WritingSystemFactory as PalasoWritingSystemManager); + if (manager == null) + return new IWritingSystemDefinition[0]; + return manager.LocalWritingSystemStore.AllWritingSystems.ToArray(); + } + } + /// ----------------------------------------------------------------------------------- /// /// The system keyboard has changed. Determine the corresponding codepage to use when @@ -5143,6 +4909,9 @@ protected virtual void OnInputLangChanged(object sender, InputLanguageChangedEve if (IsDisposed || m_rootb == null || DataUpdateMonitor.IsUpdateInProgress()) return; + var manager = WritingSystemFactory as PalasoWritingSystemManager; + if (manager == null) + return; //Debug.WriteLine(string.Format("OnInputLangChanged: Handle={2}, g_focusRootSite={0}, culture={1}", // g_focusRootSite.Target, e.InputLanguage.Culture.ToString(), Handle)); // JT: apparently this comes to all the views, but only the active keyboard @@ -5151,35 +4920,28 @@ protected virtual void OnInputLangChanged(object sender, InputLanguageChangedEve // Responding before that causes a nasty bug in language/keyboard selection. // SMc: also, we trust the lcid derived from vwsel more than we trust the one // passed in as e.CultureInfo.LCID. - if (this.Focused && g_focusRootSite.Target == this) + var wsRepo = manager.LocalWritingSystemStore; + if (this.Focused && g_focusRootSite.Target == this && wsRepo != null) { // If possible, adjust the language of the selection to be one that matches // the keyboard just selected. - IVwSelection vwsel = m_rootb.Selection; - int lcid = LcidHelper.LangIdFromLCID(e.Culture.LCID); - // Since we're being told it changed, assume this really is current, as opposed - // to whatever we last set it to. - m_editingHelper.ActiveLanguageId = lcid; - if (m_fHandlingOnGotFocus) - { - int wsSel = SelectionHelper.GetFirstWsOfSelection(vwsel); - if (wsSel != 0) - { - ILgWritingSystem qws = WritingSystemFactory.get_EngineOrNull(wsSel); - if (qws != null) - lcid = qws.LCID; - } - } - HandleKeyboardChange(vwsel, (short)lcid); + IVwSelection vwsel = m_rootb.Selection; // may be null + int wsSel = SelectionHelper.GetFirstWsOfSelection(vwsel); // may be zero + IWritingSystemDefinition wsSelDefn = null; + if (wsSel != 0) + wsSelDefn = manager.Get(wsSel) as IWritingSystemDefinition; + var wsNewDefn = wsRepo.GetWsForInputLanguage(e.InputLanguage.LayoutName, e.InputLanguage.Culture, wsSelDefn, PlausibleWritingSystems); + if (wsNewDefn == null || wsNewDefn.Equals(wsSelDefn)) + return; + + HandleKeyboardChange(vwsel, ((PalasoWritingSystem)wsNewDefn).Handle); // The following line is needed to get Chinese IMEs to fully initialize. // This causes Text Services to set its focus, which is the crucial bit // of behavior. See LT-7488 and LT-5345. Activate(VwSelectionState.vssEnabled); - RestoreKeyboardStatus(lcid); - //Debug.WriteLine("End SimpleRootSite.OnInputLangChanged(" + lcid + // ") [hwnd = " + this.Handle + "] -> HandleKeyBoardChange(vwsel, " + lcid + // ")"); @@ -5197,114 +4959,15 @@ protected virtual void OnInputLangChanged(object sender, InputLanguageChangedEve /// the selection to something that matches, if possible. /// /// Selection - /// Language identification + /// Writing system determined from keyboard change /// ----------------------------------------------------------------------------------- - public virtual void HandleKeyboardChange(IVwSelection vwsel, short nLangId) + public virtual void HandleKeyboardChange(IVwSelection vwsel, int wsMatch) { CheckDisposed(); // Get the writing system factory associated with the root box. if (m_rootb == null || !GotCacheOrWs) return; // For paranoia. - // Debug.WriteLine("HandleKeyboardChange nLangId=" + nLangId + "; " + Name + - // "/" + this); - - ILgWritingSystemFactory wsf = WritingSystemFactory; - - int cws = wsf.NumberOfWs; - if (cws < 2) - return; // no writing systems to work with - - var vwsTemp = GetPossibleWritingSystemsToSelectByInputLanguage(wsf); - - // resize the array leaving slot 0 empty - int[] vws = new int[++cws]; - Array.Copy(vwsTemp, 0, vws, 1, vwsTemp.Length); - - // Put the writing system of the selection first in the list, which gives it - // priority -- we'll find it first if it matches. - int wsSel = SelectionHelper.GetFirstWsOfSelection(vwsel); - vws[0] = wsSel != 0 ? wsSel : vws[1]; - - InputLanguage lngDefault = InputLanguage.DefaultInputLanguage; - short defaultLangId = LcidHelper.LangIdFromLCID(lngDefault.Culture.LCID); - int wsMatch = -1; - int wsDefault = -1; - int wsCurrentLang = -1; // used to note first ws whose CurrentInputLanguage matches. - for (int iws = 0; iws < cws; iws++) - { - if (vws[iws] == 0) - continue; - - ILgWritingSystem ws = wsf.get_EngineOrNull(vws[iws]); - if (ws == null) - continue; - - // REVIEW SteveMc, SharonC, KenZ, JohnT: nail down where the locale/langid belongs, in - // the writing system or in the old writing system. - int nLocale = ws.LCID; - int nLangIdWs = LcidHelper.LangIdFromLCID(nLocale); - - if (nLangIdWs != 0 && nLangIdWs == nLangId) - { - wsMatch = vws[iws]; - break; - } - if (iws == 0 && nLangIdWs == 0 && nLangId == defaultLangId) - { - // The writing system of the current selection doesn't have any keyboard specified, - // and we've set the keyboard to the default. This is acceptable; leave as is. - wsMatch = vws[iws]; - break; - } - if (nLangIdWs == 0 && nLangId == defaultLangId && wsDefault == -1) - { - // Use this old writing system as the default. - wsDefault = vws[iws]; - } - if (wsCurrentLang == -1) - { - int nLangIdCurrent = ws.CurrentLCID; - if (nLangId == nLangIdCurrent) - wsCurrentLang = vws[iws]; - } - } - - if (wsMatch == -1) - { - wsMatch = wsDefault; - } - m_wsPending = -1; - // Next, see if it is the current langid of any ws. This will leave it -1 if we didn't find such a match. - if (wsMatch == -1) - wsMatch = wsCurrentLang; - - if (wsMatch == -1) - { - // Nothing matched. - if (defaultLangId == nLangId) // We're trying to set to the default keyboard - { - // The default keyboard sets set for odd reasons. Just ignore it. - // Review: what if the HKL's are different versions of the same language, - // eg UK and US English? - } - else - { - // We will make this the current input language for the current writing system for the current session. - ILgWritingSystem wsCurrent = wsf.get_EngineOrNull(wsSel); - if (wsCurrent != null) - wsCurrent.CurrentLCID = nLangId; - } - return; - } - - // We are going to make wsMatch the current writing system. - // Make sure it is set to use the langid that the user just selected. - // (This cleans up any earlier overrides). - ILgWritingSystem wsMatchEng = wsf.get_EngineOrNull(wsMatch); - if (wsMatchEng != null) - wsMatchEng.CurrentLCID = nLangId; - if (vwsel == null) { // Delay handling it until we get a selection. @@ -6500,20 +6163,20 @@ public virtual void OriginalWndProc(ref Message msg) switch (msg.Msg) { #if __MonoCS__ - case (int)Win32.WinMsgs.WM_KEYDOWN: + case (int)Utils.Win32.WinMsgs.WM_KEYDOWN: if (m_inputBusController != null && m_inputBusController.NotifyKeyDown(msg, ModifierKeys)) return; break; - case (int)Win32.WinMsgs.WM_CHAR: + case (int)Utils.Win32.WinMsgs.WM_CHAR: if (m_inputBusController != null && m_inputBusController.NotifyKeyPress((uint)msg.WParam, (uint)msg.LParam, ModifierKeys)) return; break; - case (int)Win32.WinMsgs.WM_DESTROY: - if (m_inputBusController != null) - { - m_inputBusController.Dispose(); - m_inputBusController = null; - } + case (int)Utils.Win32.WinMsgs.WM_DESTROY: + if (m_inputBusController != null) + { + m_inputBusController.Dispose(); + m_inputBusController = null; + } break; #endif @@ -6555,7 +6218,7 @@ public virtual void OriginalWndProc(ref Message msg) OnKeyPress(new KeyPressEventArgs((char)msg.WParam)); return; } - case (int)Win32.WinMsgs.WM_SETFOCUS: + case (int)Utils.Win32.WinMsgs.WM_SETFOCUS: OnSetFocus(msg); #if __MonoCS__ // In Linux+Mono, if you .Focus() a SimpleRootSite, checking .Focused reports false unless @@ -6569,35 +6232,11 @@ public virtual void OriginalWndProc(ref Message msg) base.WndProc(ref msg); #endif // __MonoCS__ return; - case (int)Win32.WinMsgs.WM_KILLFOCUS: + case (int)Utils.Win32.WinMsgs.WM_KILLFOCUS: base.WndProc(ref msg); OnKillFocus(Control.FromHandle(msg.WParam), MiscUtils.IsChildWindowOfForm(ParentForm, msg.WParam)); return; - default: - { - if (msg.Msg == s_wm_kmselectlang) - { - Debug.Assert(s_wm_kmselectlang != 0); - if (msg.WParam == (IntPtr)4) - { - OnKeymanKeyboardChange(msg.WParam, msg.LParam); - } - else if (msg.WParam == (IntPtr)1) - { - // We get these both as a result of our own changes, and changes - // resulting from control keys. If we just initiated a change ourselves, - // ignore it. - if (EditingHelper.SelectLangPending > 0) - EditingHelper.SelectLangPending--; - else - OnKeymanKeyboardChange(msg.WParam, msg.LParam); - } - } - else if (msg.Msg == s_wm_kmkbchange) - Debug.Assert(s_wm_kmkbchange != 0); - break; - } } base.WndProc(ref msg); } @@ -6690,17 +6329,17 @@ public bool PreFilterMessage(ref Message m) switch (m.Msg) { - case (int)Win32.WinMsgs.WM_KEYUP: - case (int)Win32.WinMsgs.WM_LBUTTONUP: - case (int)Win32.WinMsgs.WM_KEYDOWN: + case (int)Utils.Win32.WinMsgs.WM_KEYUP: + case (int)Utils.Win32.WinMsgs.WM_LBUTTONUP: + case (int)Utils.Win32.WinMsgs.WM_KEYDOWN: // If user-initiated messages come (or our spurious one, which we check // for below), remove this filter. Application.RemoveMessageFilter(this); m_messageFilterInstalled = false; // Now check for the spurious CTRL-UP message - if (m.Msg == (int)Win32.WinMsgs.WM_KEYUP && - m.WParam.ToInt32() == (int)Win32.VirtualKeycodes.VK_CONTROL) + if (m.Msg == (int)Utils.Win32.WinMsgs.WM_KEYUP && + m.WParam.ToInt32() == (int)Utils.Win32.VirtualKeycodes.VK_CONTROL) { return true; // discard this message } diff --git a/Src/Common/SimpleRootSite/SimpleRootSite.csproj b/Src/Common/SimpleRootSite/SimpleRootSite.csproj index cd0ef32d1c..ed59415a4d 100644 --- a/Src/Common/SimpleRootSite/SimpleRootSite.csproj +++ b/Src/Common/SimpleRootSite/SimpleRootSite.csproj @@ -121,6 +121,14 @@ False ..\..\..\DistFiles\Microsoft.Practices.ServiceLocation.dll + + False + ..\..\..\Downloads\Palaso.dll + + + False + ..\..\..\Downloads\PalasoUIWindowsForms.dll + False ..\..\..\Output\Debug\Reporting.dll @@ -172,14 +180,6 @@ ..\..\..\Output\Debug\ibusdotnet.dll - - False - ..\..\..\Output\Debug\KeyboardSwitcher.dll - - - False - ..\..\..\Output\Debug\Keyboarding.dll - diff --git a/Src/Common/SimpleRootSite/SimpleRootSiteTests/InputBusControllerTests.cs b/Src/Common/SimpleRootSite/SimpleRootSiteTests/InputBusControllerTests.cs index b658d12331..1ddfccb8e4 100644 --- a/Src/Common/SimpleRootSite/SimpleRootSiteTests/InputBusControllerTests.cs +++ b/Src/Common/SimpleRootSite/SimpleRootSiteTests/InputBusControllerTests.cs @@ -1784,12 +1784,6 @@ public void DrawRoot2(IVwGraphics _vg, Utils.Rect rcSrc, Utils.Rect rcDst, bool throw new System.NotImplementedException(); } - public void SetKeyboardForWs(ILgWritingSystem _ws, ref string _bstrActiveKeymanKbd, - ref int _nActiveLangId, ref int _hklActive, ref bool _fSelectLangPending) - { - throw new System.NotImplementedException(); - } - public bool DoSpellCheckStep() { throw new System.NotImplementedException(); diff --git a/Src/Common/SimpleRootSite/ViewInputManager.cs b/Src/Common/SimpleRootSite/ViewInputManager.cs index 1428ca97e0..ab73b4b3c4 100644 --- a/Src/Common/SimpleRootSite/ViewInputManager.cs +++ b/Src/Common/SimpleRootSite/ViewInputManager.cs @@ -9,27 +9,23 @@ using System; using System.Drawing; using System.Runtime.InteropServices; +using Palaso.UI.WindowsForms.Keyboarding; +using Palaso.WritingSystems; +using SIL.CoreImpl; using SIL.FieldWorks.Common.COMInterfaces; -using SIL.FieldWorks.Common.Keyboarding; using SIL.Utils; namespace SIL.FieldWorks.Common.RootSites { /// - /// Connects a view (rootbox) with keyboards. This class gets created by the VwRootBox. + /// Connects a view (rootbox) with keyboards. This class gets created by the VwRootBox when ENABLE_TSF is not defined + /// and MANAGED_KEYBOARDING is, that is, on Mono but not on Windows. Thus, the code here is basically Mono/Linux-only. /// [Guid("830BAF1F-6F84-46EF-B63E-3C1BFDF9E83E")] - public class ViewInputManager: ILgTextServices, IKeyboardCallback, IViewInputMgr + public class ViewInputManager: IViewInputMgr { private IVwRootBox m_rootb; - /// - /// Initializes a new instance of the ViewInputManager class. - /// - public ViewInputManager() - { - } - #region IViewInputMgr methods /// /// Inititialize the input manager @@ -42,15 +38,13 @@ public void Init(IVwRootBox rootb) /// public void Close() { - } /// - /// End all active compositions. + /// End all active compositions. Not applicable on Mono. /// public void TerminateAllCompositions() { - KeyboardController.Methods.TerminateAllCompositions(this); } /// @@ -58,7 +52,6 @@ public void TerminateAllCompositions() /// public void SetFocus() { - KeyboardController.Methods.EnableInput(this); } /// @@ -66,7 +59,6 @@ public void SetFocus() /// public void KillFocus() { - KeyboardController.Methods.DisableInput(this); } /// @@ -74,7 +66,7 @@ public void KillFocus() /// public bool IsCompositionActive { - get { return KeyboardController.Methods.IsCompositionActive(this); } + get { return false; } } /// @@ -83,7 +75,7 @@ public bool IsCompositionActive /// public bool IsEndingComposition { - get { return KeyboardController.Methods.IsEndingComposition(this); } + get { return false; } } /// @@ -94,17 +86,21 @@ public bool IsEndingComposition /// false if property can be processed regularly. public bool OnUpdateProp() { - return KeyboardController.EventHandler.OnUpdateProp(this); + return false; } /// /// Called when a mouse event happened. /// - /// Always false - if at all we can handle only part of what's necessary. - /// + /// Returns false. Returning true would mean that no further + /// processing of the mouse event should happen. public bool OnMouseEvent(int xd, int yd, Rect rcSrc, Rect rcDst, VwMouseEvent me) { - KeyboardController.EventHandler.OnMouseEvent(this, xd, yd, rcSrc, rcDst, (MouseEvent)me); + var mouseEvent = (MouseEvent) me; + if (mouseEvent == MouseEvent.kmeDown) + { + Keyboard.Activate(); + } return false; } @@ -113,7 +109,6 @@ public bool OnMouseEvent(int xd, int yd, Rect rcSrc, Rect rcDst, VwMouseEvent me /// public void OnLayoutChange() { - KeyboardController.EventHandler.OnLayoutChange(this); } /// @@ -121,7 +116,6 @@ public void OnLayoutChange() /// public void OnSelectionChange(int nHow) { - KeyboardController.EventHandler.OnSelectionChange(this, (SelChangeType)nHow); } /// @@ -129,11 +123,10 @@ public void OnSelectionChange(int nHow) /// public void OnTextChange() { - KeyboardController.EventHandler.OnTextChange(this); } #endregion /* IViewInputMgr */ - private ILgWritingSystem CurrentWritingSystem + private IWritingSystem CurrentWritingSystem { get { @@ -146,61 +139,27 @@ private ILgWritingSystem CurrentWritingSystem if (wsf == null) return null; - return wsf.get_EngineOrNull(nWs); + return wsf.get_EngineOrNull(nWs) as IWritingSystem; } } - #region IKeyboardControllerCallback methods /// /// Gets the keyboard corresponding to the current selection. /// /// The keyboard, or KeyboardDescription.Zero if we can't detect the writing /// system based on the current selection (e.g. there is no selection). - public IKeyboardDescription Keyboard + public IKeyboardDefinition Keyboard { get { + var manager = m_rootb.DataAccess.WritingSystemFactory as PalasoWritingSystemManager; var ws = CurrentWritingSystem; if (ws == null) return KeyboardDescription.Zero; - var locale = ws.LCID; - var langId = ws.CurrentLCID; - var keyboardName = string.Empty; - - // From VwRootBox::SetKeyboardForWs: - // We possibly set a Keyman keyboard, more precisely than the langid can do. Only attempt - // this if we are using the default langid for the ws. - if (locale == langId) - keyboardName = ws.Keyboard; - - return KeyboardController.GetKeyboard(langId, keyboardName); + var wsd = manager.Get(ws.Handle) as IWritingSystemDefinition; + return wsd.LocalKeyboard; } } - - /// - /// Gets or sets the active keyboard. - /// - public IKeyboardDescription ActiveKeyboard { get; set; } - #endregion - - #region ILgTextServices implementation - /// - /// Sets the keyboard. - /// - /// Keyboard identifier of system keyboard - /// Identifier for other input method keyboard (Keyman/ibus) - /// - /// The active keyboard lcid. - /// Active other input method keyboard. - /// - public void SetKeyboard(int lcid, string otherImKeyboard, ref int nActiveLangId, - ref string activeOtherImKeyboard, ref bool fSelectLangPending) - { - KeyboardController.SetKeyboard(lcid, otherImKeyboard, ref nActiveLangId, - ref activeOtherImKeyboard, ref fSelectLangPending); - } - - #endregion } } diff --git a/Src/FDO/Infrastructure/Impl/FDOBackendProvider.cs b/Src/FDO/Infrastructure/Impl/FDOBackendProvider.cs index 8cf2f35d87..0cbb56bdfa 100644 --- a/Src/FDO/Infrastructure/Impl/FDOBackendProvider.cs +++ b/Src/FDO/Infrastructure/Impl/FDOBackendProvider.cs @@ -16,6 +16,7 @@ using System.Text; using System.Threading; using SIL.CoreImpl; +using SIL.CoreImpl.Properties; using SIL.FieldWorks.Common.FwUtils; using SIL.FieldWorks.FDO.DomainServices; using SIL.FieldWorks.FDO.DomainServices.DataMigration; @@ -549,6 +550,7 @@ private void InitializeWritingSystemManager() var wsManager = (PalasoWritingSystemManager)m_cache.ServiceLocator.WritingSystemManager; wsManager.GlobalWritingSystemStore = globalStore; wsManager.LocalWritingSystemStore = new LocalFileWritingSystemStore(storePath, globalStore); + wsManager.LocalWritingSystemStore.LocalKeyboardSettings = Settings.Default.LocalKeyboards; wsManager.TemplateFolder = DirectoryFinder.TemplateDirectory; } diff --git a/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControls.csproj b/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControls.csproj index 7518c4bab9..59d899fffd 100644 --- a/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControls.csproj +++ b/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControls.csproj @@ -1,364 +1,351 @@ - + - Local - 9.0.30729 - 2.0 - {D71043A0-1871-461E-875F-3CEF13929EB9} - - - - Debug - AnyCPU - - - - - FwCoreDlgControls - - - JScript - Grid - IE50 - false - Library - SIL.FieldWorks.FwCoreDlgControls - OnBuildSuccess - - - - - - - - - 3.5 - v4.0 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - + Local + 9.0.30729 + 2.0 + {D71043A0-1871-461E-875F-3CEF13929EB9} + + + + + + + Debug + AnyCPU + + + + + FwCoreDlgControls + + + JScript + Grid + IE50 + false + Library + SIL.FieldWorks.FwCoreDlgControls + OnBuildSuccess + + + + + + + + + 3.5 + v4.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + - ..\..\..\Output\Debug\ - false - 285212672 - false - - - DEBUG;TRACE - ..\..\..\Output\Debug\FwCoreDlgControls.xml - true - 4096 - false - 168,169,219,414,649,1635,1702,1701 - false - false - false - true - 4 - full - prompt - AllRules.ruleset - x86 + ..\..\..\Output\Debug\ + false + 285212672 + false + + + DEBUG;TRACE + ..\..\..\Output\Debug\FwCoreDlgControls.xml + true + 4096 + false + 168,169,219,414,649,1635,1702,1701 + false + false + false + true + 4 + full + prompt + AllRules.ruleset + x86 - ..\..\..\Output\Release\ - false - 285212672 - false - - - TRACE - - - true - 4096 - false - 168,169,219,414,649,1635,1702,1701 - true - false - false - false - 4 - full - prompt - AllRules.ruleset - x86 + ..\..\..\Output\Release\ + false + 285212672 + false + + + TRACE + + + true + 4096 + false + 168,169,219,414,649,1635,1702,1701 + true + false + false + false + 4 + full + prompt + AllRules.ruleset + x86 - - False - ..\..\..\Output\Debug\BasicUtils.dll - - - COMInterfaces - False - ..\..\..\Output\Debug\COMInterfaces.dll - - - False - ..\..\..\Output\Debug\CoreImpl.dll - - - FDO - False - ..\..\..\Output\Debug\FDO.dll - - - FwControls - False - ..\..\..\Output\Debug\FwControls.dll - - - FwResources - False - ..\..\..\Output\Debug\FwResources.dll - - - FwUtils - False - ..\..\..\Output\Debug\FwUtils.dll - - - False - ..\..\..\DistFiles\Microsoft.Practices.ServiceLocation.dll - - - False - ..\..\..\Downloads\Palaso.dll - - - False - ..\..\..\Output\Debug\RootSite.dll - - - False - ..\..\..\Output\Debug\SilUtils.dll - False - - - False - ..\..\..\Output\Debug\SimpleRootSite.dll - - - System - - - - System.Data - - - System.Drawing - - - System.Web - - - System.Windows.Forms - - - System.XML - - - False - ..\..\..\Output\Debug\xCoreInterfaces.dll - - - False - ..\..\..\Output\Debug\Keyboarding.dll - + + False + ..\..\..\Output\Debug\BasicUtils.dll + + + COMInterfaces + False + ..\..\..\Output\Debug\COMInterfaces.dll + + + False + ..\..\..\Output\Debug\CoreImpl.dll + + + FDO + False + ..\..\..\Output\Debug\FDO.dll + + + FwControls + False + ..\..\..\Output\Debug\FwControls.dll + + + FwResources + False + ..\..\..\Output\Debug\FwResources.dll + + + FwUtils + False + ..\..\..\Output\Debug\FwUtils.dll + + + False + ..\..\..\DistFiles\Microsoft.Practices.ServiceLocation.dll + + + False + ..\..\..\Downloads\Palaso.dll + + + False + ..\..\..\Output\Debug\RootSite.dll + + + False + ..\..\..\Output\Debug\SilUtils.dll + False + + + False + ..\..\..\Output\Debug\SimpleRootSite.dll + + + System + + + + System.Data + + + System.Drawing + + + System.Web + + + System.Windows.Forms + + + System.XML + + + False + ..\..\..\Output\Debug\xCoreInterfaces.dll + - - - CommonAssemblyInfo.cs - - - Component - - - BlueCircleButton.cs - - - UserControl - - - ConfigParentNode.cs - - - UserControl - - - ConfigSenseLayout.cs - - - UserControl - - - UserControl - - - FwFontAttributes.cs - - - UserControl - - - FwFontTab.cs - - - UserControl - - - FwGeneralTab.cs - - - Component - - - - - - - UserControl - - - Component - - - UserControl - - - FwBorderTab.cs - - - UserControl - - - FwBulletsTab.cs - - - True - True - FwCoreDlgControls.resx - - - UserControl - - - FwParagraphTab.cs - - - UserControl - - - Component - - - UserControl - - - - - - - Component - - - ConfigParentNode.cs - Designer - - - ConfigSenseLayout.cs - Designer - - - DefaultFontsControl.cs - Designer - - - FontFeaturesButton.cs - Designer - - - Designer - FwBorderTab.cs - - - Designer - FwBulletsTab.cs - - - ResXFileCodeGenerator - FwCoreDlgControls.Designer.cs - Designer - - - FwFontAttributes.cs - Designer - - - Designer - FwFontTab.cs - - - Designer - FwGeneralTab.cs - - - Designer - FwParagraphTab.cs - - - KeyboardControl.cs - Designer - - - LocaleMenuButton.cs - Designer - - - RegionVariantControl.cs - Designer - - - UpDownMeasureControl.cs - Designer - + + + CommonAssemblyInfo.cs + + + Component + + + BlueCircleButton.cs + + + UserControl + + + ConfigParentNode.cs + + + UserControl + + + ConfigSenseLayout.cs + + + + UserControl + + + FwFontAttributes.cs + + + UserControl + + + FwFontTab.cs + + + UserControl + + + FwGeneralTab.cs + + + + + + + + UserControl + + + Component + + + UserControl + + + FwBorderTab.cs + + + UserControl + + + FwBulletsTab.cs + + + True + True + FwCoreDlgControls.resx + + + UserControl + + + FwParagraphTab.cs + + + Component + + + UserControl + + + + + + + Component + + + ConfigParentNode.cs + Designer + + + ConfigSenseLayout.cs + Designer + + + DefaultFontsControl.cs + Designer + + + FontFeaturesButton.cs + Designer + + + Designer + FwBorderTab.cs + + + Designer + FwBulletsTab.cs + + + ResXFileCodeGenerator + FwCoreDlgControls.Designer.cs + Designer + + + FwFontAttributes.cs + Designer + + + Designer + FwFontTab.cs + + + Designer + FwGeneralTab.cs + + + Designer + FwParagraphTab.cs + + + LocaleMenuButton.cs + Designer + + + RegionVariantControl.cs + Designer + + + UpDownMeasureControl.cs + Designer + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + - ../../../DistFiles - + \ No newline at end of file diff --git a/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControlsTests/FwCoreDlgControlsTests.csproj b/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControlsTests/FwCoreDlgControlsTests.csproj index 8599995da4..f58736ae39 100644 --- a/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControlsTests/FwCoreDlgControlsTests.csproj +++ b/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControlsTests/FwCoreDlgControlsTests.csproj @@ -1,4 +1,4 @@ - + Local @@ -27,11 +27,14 @@ - - + + + + - + + 3.5 v4.0 @@ -187,10 +190,6 @@ ..\..\..\..\Output\Debug\TestUtils.dll - - False - ..\..\..\..\Output\Debug\Keyboarding.dll - False ..\..\..\..\Downloads\Palaso.dll @@ -212,7 +211,6 @@ - @@ -233,8 +231,7 @@ - ../../../../DistFiles - + \ No newline at end of file diff --git a/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControlsTests/KeyboardControlTests.cs b/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControlsTests/KeyboardControlTests.cs deleted file mode 100644 index 37ed733d25..0000000000 --- a/Src/FwCoreDlgs/FwCoreDlgControls/FwCoreDlgControlsTests/KeyboardControlTests.cs +++ /dev/null @@ -1,505 +0,0 @@ -// Copyright (c) 2010, SIL International. All Rights Reserved. -// -// Distributable under the terms of either the Common Public License or the -// GNU Lesser General Public License, as specified in the LICENSING.txt file. -// -// Original author: MarkS 2010-11-22 KeyboardControlTests.cs -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using NUnit.Framework; -using SIL.FieldWorks.Common.COMInterfaces; -using SIL.FieldWorks.Common.Keyboarding; -using SIL.FieldWorks.FwCoreDlgControls; -using SIL.FieldWorks.Test.TestUtils; -using SIL.Utils; -using SIL.CoreImpl; - -namespace SIL.FieldWorks.FwCoreDlgControlsTests -{ - /// - [TestFixture] - [SetUICulture("en-US")] - public class KeyboardControlTests: BaseTest - { - /// - /// A message box stub that rembers the values that are passed in so that they can be - /// verified in tests. - /// - private class RememberingMessageBox: IMessageBox - { - /// Gets the text that was passed in last - public string Text { get; private set; } - /// Gets the caption that was passed in last - public string Caption { get; private set; } - /// Gets the buttons that were passed in last - public MessageBoxButtons Buttons { get; private set; } - /// Gets the icon that was passed in last - public MessageBoxIcon Icon { get; private set; } - /// Gets the number of times MessageBox.Show has been called - public int Count { get; private set; } - - - /// ------------------------------------------------------------------------------------ - /// - /// This implementation displays the message in the Console and returns the first - /// button as dialog result. - /// - /// ------------------------------------------------------------------------------------ - public DialogResult Show(IWin32Window owner, string text, string caption, - MessageBoxButtons buttons, MessageBoxIcon icon) - { - // When running tests, displaying a message box is usually not what we want so we - // just write to the Console. - // If we later change our mind we have to check Environment.UserInteractive. If it - // is false we have to use MessageBoxOptions.ServiceNotification or - // DefaultDesktopOnly so that it works when running from a service (build machine). - Console.WriteLine("**** {0}: {1}{3}{2}", caption, text, buttons, Environment.NewLine); - - Text = text; - Caption = caption; - Buttons = buttons; - Icon = icon; - Count++; - return TranslateButtons(buttons); - } - - /// ------------------------------------------------------------------------------------ - /// - /// This implementation displays the message in the Console and returns the first - /// button as dialog result. - /// - /// ------------------------------------------------------------------------------------ - public DialogResult Show(IWin32Window owner, string text, string caption, - MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, - MessageBoxOptions options, string helpFilePath, HelpNavigator navigator, object param) - { - return Show(owner, text, caption, buttons, icon); - } - - private static DialogResult TranslateButtons(MessageBoxButtons buttons) - { - switch (buttons) - { - case MessageBoxButtons.OK: - case MessageBoxButtons.OKCancel: - return DialogResult.OK; - case MessageBoxButtons.YesNo: - case MessageBoxButtons.YesNoCancel: - return DialogResult.Yes; - case MessageBoxButtons.RetryCancel: - return DialogResult.Retry; - case MessageBoxButtons.AbortRetryIgnore: - return DialogResult.Abort; - default: - return DialogResult.OK; - } - } - } - - #region DummyWritingSystem class - /// - /// Dummy writing system used for testing - /// - private class DummyWritingSystem : IWritingSystem - { - /// - public DummyWritingSystem(string identifier, int lcid) - { - Id = identifier; - LCID = CurrentLCID = lcid; - } - - #region IWritingSystem Members - - /// - public string Abbreviation - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public Palaso.WritingSystems.Collation.ICollator Collator - { - get { throw new NotImplementedException(); } - } - - /// - public void Copy(IWritingSystem source) - { - throw new NotImplementedException(); - } - - /// - public string DisplayLabel - { - get { throw new NotImplementedException(); } - } - - /// - public string IcuLocale - { - get { throw new NotImplementedException(); } - } - - /// - public bool IsGraphiteEnabled - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public LanguageSubtag LanguageSubtag - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public string LegacyMapping - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public bool MarkedForDeletion - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public string MatchedPairs - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public bool Modified - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public string PunctuationPatterns - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public string QuotationMarks - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public RegionSubtag RegionSubtag - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public ScriptSubtag ScriptSubtag - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public string SortRules - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public Palaso.WritingSystems.WritingSystemDefinition.SortRulesType SortUsing - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public string ValidChars - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public bool ValidateCollationRules(out string message) - { - throw new NotImplementedException(); - } - - /// - public VariantSubtag VariantSubtag - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public void WriteLdml(System.Xml.XmlWriter writer) - { - throw new NotImplementedException(); - } - - /// - public IWritingSystemManager WritingSystemManager - { - get { throw new NotImplementedException(); } - } - - #endregion - - #region ILgWritingSystem Members - - /// - public SIL.FieldWorks.Common.COMInterfaces.ILgCharacterPropertyEngine CharPropEngine - { - get { throw new NotImplementedException(); } - } - - /// - public int CurrentLCID { get; set; } - - /// - public string DefaultFontFeatures { get; set; } - - /// - public string DefaultFontName - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public int Handle - { - get { throw new NotImplementedException(); } - } - - /// - public string ISO3 - { - get { throw new NotImplementedException(); } - } - - /// - public string Id { get; private set; } - - /// - public void InterpretChrp(ref SIL.FieldWorks.Common.COMInterfaces.LgCharRenderProps _chrp) - { - throw new NotImplementedException(); - } - - /// - public string Keyboard { get; set; } - - /// - public int LCID { get; set; } - - /// - public string LanguageName { get; set; } - - /// - public bool RightToLeftScript - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public string SpellCheckingId - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// - public IRenderEngine get_Renderer(IVwGraphics vg) - { - throw new NotImplementedException(); - } - #endregion - } - #endregion - - #region DummyKeyboardAdaptor class - private class DummyKeyboardAdaptor: IKeyboardAdaptor - { - public DummyKeyboardAdaptor() - { - if (DummyInstalledKeyboards == null) - DummyInstalledKeyboards = new List(); - if (DummyErrorKeyboards == null) - DummyErrorKeyboards = new List(); - } - - public static void Reset() - { - DummyInstalledKeyboards = null; - DummyErrorKeyboards = null; - } - - public static List DummyInstalledKeyboards { get; set; } - public static List DummyErrorKeyboards { get; set; } - - public List ErrorKeyboards - { - get { return DummyErrorKeyboards; } - } - - public void ActivateKeyboard(IKeyboardDescription keyboard, - IKeyboardDescription systemKeyboard) - { - // do nothing - } - - public void DeactivateKeyboard(IKeyboardDescription keyboard) - { - } - - public void Initialize() - { - foreach (var keyboard in DummyInstalledKeyboards) - KeyboardController.Manager.RegisterKeyboard(keyboard.Id, keyboard); - } - - public void Close() - { - } - } - #endregion - - private RememberingMessageBox m_MsgBox; - - [SetUp] - public void Setup() - { - m_MsgBox = new RememberingMessageBox(); - MessageBoxUtils.Manager.SetMessageBoxAdapter(m_MsgBox); - KeyboardController.Manager.Reset(); - KeyboardControl.ResetErrorMessages(); - DummyKeyboardAdaptor.Reset(); - } - - /// - /// Get available ibus keyboards. Don't run automatically since automated test - /// environment may not have the right keyboards set. - /// - [Test] - [Category("ByHand")] - [Platform(Include = "Linux", Reason = "Linux specific test")] - public void GetAvailableKeyboards_GetsKeyboards() - { - var expectedKeyboards = new List(); - expectedKeyboards.Add("ispell (m17n)"); - - List actualKeyboards = ReflectionHelper.CallStaticMethod("FwCoreDlgControls.dll", - "SIL.FieldWorks.FwCoreDlgControls.KeyboardControl", "GetAvailableKeyboards", - new object[] {null}) as List; - - Assert.That(actualKeyboards, Is.EquivalentTo(expectedKeyboards), - "Available keyboards do not match expected."); - } - - /// - /// Get available keyboards/languages. Don't run automatically since the installed - /// keyboards/languages vary on different systems. - /// - [Test] - [Category("ByHand")] - [Platform(Exclude = "Linux", Reason = "Windows specific test")] - public void InitLanguageCombo() - { - using (var sut = new KeyboardControl()) - { - var ws = new DummyWritingSystem("en-US", 1033); - // this fills the combo boxes - sut.WritingSystem = ws; - - var combo = (ComboBox)sut.Controls["m_langIdComboBox"]; - bool found = false; - foreach (IKeyboardDescription item in combo.Items) - { - Console.WriteLine("{0}: {1}", item.Id, item.Name); - if (item.Id == 1033) - found = true; - } - - Assert.IsTrue(found, - "keyboard layout combobox did not contain the 'English (United States)' keyboard"); - } - } - - /// - /// Get available keyboards/languages. - /// - [Test] - public void InitLanguageCombo_AllOk() - { - DummyKeyboardAdaptor.DummyInstalledKeyboards = new List(new [] - { - new KeyboardDescription(1033, "English (United States)", null), - new KeyboardDescription(1031, "German (Germany)", null) - }); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new DummyKeyboardAdaptor() }); - - using (var sut = new KeyboardControl()) - { - var ws = new DummyWritingSystem("en-US", 1033); - // this fills the combo boxes - sut.WritingSystem = ws; - - var combo = (ComboBox)sut.Controls["m_langIdComboBox"]; - CollectionAssert.AreEqual(DummyKeyboardAdaptor.DummyInstalledKeyboards, combo.Items); - Assert.AreEqual(2, combo.Items.Count); - Assert.AreEqual(0, m_MsgBox.Count); - } - } - - /// - /// Get available keyboards/languages when we get some errors. - /// - [Test] - public void InitLanguageCombo_Errors() - { - DummyKeyboardAdaptor.DummyInstalledKeyboards = new List(new [] - { - new KeyboardDescription(1033, "English (United States)", null), - new KeyboardDescription(1031, "German (Germany)", null) - }); - DummyKeyboardAdaptor.DummyErrorKeyboards = new List(new [] - { - new KeyboardErrorDescription(1111) - }); - KeyboardController.Manager.SetKeyboardAdaptors(new [] { new DummyKeyboardAdaptor() }); - using (var sut = new KeyboardControl()) - { - var ws = new DummyWritingSystem("en-US", 1033); - // this fills the combo boxes - sut.WritingSystem = ws; - - var combo = (ComboBox)sut.Controls["m_langIdComboBox"]; - CollectionAssert.AreEqual(DummyKeyboardAdaptor.DummyInstalledKeyboards, combo.Items); - Assert.AreEqual(2, combo.Items.Count); - - Assert.AreEqual(1, m_MsgBox.Count); - Assert.AreEqual("The following system locales are invalid, so will be omitted from " + - "the list of System Languages for keyboard input: 1111", m_MsgBox.Text); - Assert.AreEqual("Error", m_MsgBox.Caption); - } - } - } -} diff --git a/Src/FwCoreDlgs/FwCoreDlgControls/KeyboardControl.cs b/Src/FwCoreDlgs/FwCoreDlgControls/KeyboardControl.cs deleted file mode 100644 index fc3c6973c4..0000000000 --- a/Src/FwCoreDlgs/FwCoreDlgControls/KeyboardControl.cs +++ /dev/null @@ -1,357 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Runtime.InteropServices; -using System.Windows.Forms; - -using SIL.CoreImpl; -using SIL.FieldWorks.Common.COMInterfaces; -using SIL.FieldWorks.Common.Controls; -using SIL.FieldWorks.Common.Keyboarding; -using SIL.Utils; - -namespace SIL.FieldWorks.FwCoreDlgControls -{ - /// - public class KeyboardControl : UserControl, IFWDisposable - { - private FwOverrideComboBox m_keyboardComboBox; - private FwOverrideComboBox m_langIdComboBox; - private bool m_fKeymanInitErrorReported; - private IWritingSystem m_ws; - private HelpProvider m_helpProvider; - - /// ------------------------------------------------------------------------------------ - /// - /// Initializes a new instance of the class. - /// - /// ------------------------------------------------------------------------------------ - public KeyboardControl() - { - // This call is required by the Windows.Forms Form Designer. - InitializeComponent(); - m_keyboardComboBox.DropDown += new EventHandler(m_keyboardComboBox_DropDown); - m_langIdComboBox.DropDown += new EventHandler(m_langIdComboBox_DropDown); - } - - void m_langIdComboBox_DropDown(object sender, EventArgs e) - { - InitLanguageCombo(); - } - - void m_keyboardComboBox_DropDown(object sender, EventArgs e) - { - InitKeymanCombo(); - } - - /// - /// Check to see if the object has been disposed. - /// All public Properties and Methods should call this - /// before doing anything else. - /// - public void CheckDisposed() - { - if (IsDisposed) - throw new ObjectDisposedException(String.Format("'{0}' in use after being disposed.", GetType().Name)); - } - - /// - /// The larger component using this control must supply a writing system - /// which this control will help to edit. - /// - public IWritingSystem WritingSystem - { - get - { - CheckDisposed(); - return m_ws; - } - set - { - CheckDisposed(); - m_ws = value; - Reset(); - } - } - - /// ----------------------------------------------------------------------------------- - /// - /// Clean up any resources being used. - /// - /// true to release both managed and unmanaged - /// resources; false to release only unmanaged resources. - /// - /// ----------------------------------------------------------------------------------- - protected override void Dispose( bool disposing ) - { - System.Diagnostics.Debug.WriteLineIf(!disposing, "****** Missing Dispose() call for " + GetType().Name + ". ****** "); - // Must not be run more than once. - if (IsDisposed) - return; - - if( disposing ) - { - } - base.Dispose( disposing ); - } - - #region Component Designer generated code - /// ----------------------------------------------------------------------------------- - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - /// ----------------------------------------------------------------------------------- - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(KeyboardControl)); - System.Windows.Forms.Label m_langIdLabel; - System.Windows.Forms.Label m_keyboardLabel; - this.m_keyboardComboBox = new SIL.FieldWorks.Common.Controls.FwOverrideComboBox(); - this.m_langIdComboBox = new SIL.FieldWorks.Common.Controls.FwOverrideComboBox(); - this.m_helpProvider = new System.Windows.Forms.HelpProvider(); - m_langIdLabel = new System.Windows.Forms.Label(); - m_keyboardLabel = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // m_keyboardComboBox - // - this.m_keyboardComboBox.AllowSpaceInEditBox = false; - this.m_keyboardComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.m_helpProvider.SetHelpString(this.m_keyboardComboBox, resources.GetString("m_keyboardComboBox.HelpString")); - resources.ApplyResources(this.m_keyboardComboBox, "m_keyboardComboBox"); - this.m_keyboardComboBox.Name = "m_keyboardComboBox"; - this.m_helpProvider.SetShowHelp(this.m_keyboardComboBox, ((bool)(resources.GetObject("m_keyboardComboBox.ShowHelp")))); - this.m_keyboardComboBox.Sorted = true; - this.m_keyboardComboBox.SelectedIndexChanged += new System.EventHandler(this.m_cboKeyboard_SelectedIndexChanged); - // - // m_langIdComboBox - // - this.m_langIdComboBox.AllowSpaceInEditBox = false; - this.m_langIdComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.m_helpProvider.SetHelpString(this.m_langIdComboBox, resources.GetString("m_langIdComboBox.HelpString")); - resources.ApplyResources(this.m_langIdComboBox, "m_langIdComboBox"); - this.m_langIdComboBox.Name = "m_langIdComboBox"; - this.m_helpProvider.SetShowHelp(this.m_langIdComboBox, ((bool)(resources.GetObject("m_langIdComboBox.ShowHelp")))); - this.m_langIdComboBox.Sorted = true; - this.m_langIdComboBox.SelectedIndexChanged += new System.EventHandler(this.m_cbLangId_SelectedIndexChanged); - // - // m_langIdLabel - // - resources.ApplyResources(m_langIdLabel, "m_langIdLabel"); - m_langIdLabel.BackColor = System.Drawing.Color.Transparent; - m_langIdLabel.Name = "m_langIdLabel"; - // - // m_keyboardLabel - // - resources.ApplyResources(m_keyboardLabel, "m_keyboardLabel"); - m_keyboardLabel.BackColor = System.Drawing.Color.Transparent; - m_keyboardLabel.Name = "m_keyboardLabel"; - // - // KeyboardControl - // - this.Controls.Add(this.m_keyboardComboBox); - this.Controls.Add(this.m_langIdComboBox); - this.Controls.Add(m_keyboardLabel); - this.Controls.Add(m_langIdLabel); - this.Name = "KeyboardControl"; - resources.ApplyResources(this, "$this"); - this.ResumeLayout(false); - this.PerformLayout(); - - } - #endregion - - /// - /// Resets this instance. - /// - public void Reset() - { - if (m_ws == null) - return; - - InitKeymanCombo(); - InitLanguageCombo(); - } - - /// ------------------------------------------------------------------------------------ - /// - /// Inits the keyman combo. - /// - /// ------------------------------------------------------------------------------------ - private void InitKeymanCombo() - { - CheckDisposed(); - - m_keyboardComboBox.Items.Clear(); // Clear out any old items from combobox list - string strKbdName = m_ws.Keyboard ?? FwCoreDlgControls.kstid_None; - m_keyboardComboBox.Items.Add(FwCoreDlgControls.kstid_None); - - var keyboards = GetAvailableKeyboards(exception => { - if (!m_fKeymanInitErrorReported) - { - m_fKeymanInitErrorReported = true; - string caption = FwCoreDlgControls.kstidKeymanInitFailed; - string message = exception.Message; - if (string.IsNullOrEmpty(message)) - message = caption; - MessageBoxUtils.Show(ParentForm, message, caption, - MessageBoxButtons.OK, MessageBoxIcon.Information); - } - }); - - foreach (var keyboard in keyboards) - m_keyboardComboBox.Items.Add(keyboard); - - m_keyboardComboBox.SelectedItem = strKbdName; - } - - /// - /// Get available Keyman (Windows) keyboards. - /// - /// - /// Delegate to run if KeymanHandler.Init throws an exception. Takes the exception - /// as an argument. - /// - private static IEnumerable GetAvailableKeyboards(Action doIfError) - { - ILgKeymanHandler keymanHandler = LgKeymanHandlerClass.Create(); - try - { - var keyboards = new List(); - - try - { - // Update handler with any new/removed keyman keyboards - keymanHandler.Init(true); - } - catch (Exception e) - { - if (doIfError != null) - doIfError(e); - return keyboards; - } - int clayout = keymanHandler.NLayout; - - for (int i = 0; i < clayout; ++i) - { - var item = keymanHandler.get_Name(i); - // JohnT: haven't been able to reproduce FWR-1935, but apparently there's some bizarre - // circumstance where one of the names comes back null. If so, leave it out. - if (item != null) - keyboards.Add(item); - } - return keyboards; - } - finally - { - keymanHandler.Close(); - Marshal.ReleaseComObject(keymanHandler); - } - } - - // Since InitLanguageCombo gets called from an OnGetFocus, and the message box causes a - // change in focus, we need to avoid an endless loop of error messages. - private static bool errorMessage1Out; - private static bool errorMessage2Out; - - /// - /// Resets the error messages. This is needed for unit tests. - /// - public static void ResetErrorMessages() - { - errorMessage1Out = false; - errorMessage2Out = false; - } - - /// ------------------------------------------------------------------------------------ - /// - /// Inits the language combo. - /// - /// ------------------------------------------------------------------------------------ - private void InitLanguageCombo() - { - CheckDisposed(); - - m_langIdComboBox.Items.Clear(); // Clear out any old items. - string selectedName = null; - int selectedId = m_ws.LCID; - foreach (var item in KeyboardController.InstalledKeyboards.Where( - keyboard => keyboard.Type == KeyboardType.System)) - { - try - { - m_langIdComboBox.Items.Add(item); - // The 'if' below should make a 'fr-CAN' language choose a french keyboard, if installed. - if (item.Id == selectedId) - selectedName = item.Name; - } - catch - { - // Problem adding a language to the combo box. Notify user and continue. - if (errorMessage1Out == false) - { - errorMessage1Out = true; - MessageBoxUtils.Show(ParentForm, FwCoreDlgControls.kstidBadLanguageName, - FwCoreDlgControls.kstidError, MessageBoxButtons.OK, MessageBoxIcon.Information); - } - break; - } - } - - var badLocales = KeyboardController.ErrorKeyboards.Where( - keyboard => keyboard.Type == KeyboardType.System).ToList(); - if (badLocales.Count > 0 && errorMessage2Out == false) - { - errorMessage2Out = true; - string strBadLocales = badLocales.Aggregate("", (current, loc) => current + (loc.Details + ", ")); - strBadLocales = strBadLocales.Substring(0, strBadLocales.Length - 2); - string caption = FwCoreDlgControls.kstidError; - MessageBoxUtils.Show(ParentForm, String.Format(FwCoreDlgControls.kstidBadLocales, - strBadLocales), caption, MessageBoxButtons.OK, MessageBoxIcon.Information); - } - - if (selectedName == null) - { - try - { - // Try selecting the default language - selectedName = InputLanguage.DefaultInputLanguage.Culture.DisplayName; - } - catch - { - selectedName = FwCoreDlgControls.kstidInvalidKeyboard; - } - finally - { - // The DefaultInputLanguage should already be in the control - if (selectedName == FwCoreDlgControls.kstidInvalidKeyboard) - { - m_langIdComboBox.Items.Add(new KeyboardDescription(selectedId, selectedName, null)); - } - } - } - int idx = m_langIdComboBox.FindStringExact(selectedName, -1); - m_langIdComboBox.SelectedIndex = idx; - } - - private void m_cbLangId_SelectedIndexChanged(object sender, EventArgs e) - { - if (m_langIdComboBox.SelectedItem == null) - return; - m_ws.LCID = ((IKeyboardDescription)m_langIdComboBox.SelectedItem).Id; - } - - private void m_cboKeyboard_SelectedIndexChanged(object sender, EventArgs e) - { - if (m_keyboardComboBox.SelectedIndex >= 0) - { - string str = m_keyboardComboBox.Text; - if (str == FwCoreDlgControls.kstid_None) - str = null; - m_ws.Keyboard = str; - } - } - } -} diff --git a/Src/FwCoreDlgs/FwCoreDlgControls/KeyboardControl.resx b/Src/FwCoreDlgs/FwCoreDlgControls/KeyboardControl.resx deleted file mode 100644 index 9d9180575a..0000000000 --- a/Src/FwCoreDlgs/FwCoreDlgControls/KeyboardControl.resx +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - Specifies the Keyman keyboard for typing this writing system. This lists currently installed Keyman keyboards. - - - - 0, 65 - - - - True - - - 280, 21 - - - 7 - - - m_keyboardComboBox - - - SIL.FieldWorks.Common.Controls.FwOverrideComboBox, FwControls, Version=7.0.6.21968, Culture=neutral, PublicKeyToken=null - - - $this - - - 0 - - - Specifies the system language which will provide a keyboard. You may need to install one. - - - 0, 16 - - - True - - - 280, 21 - - - 6 - - - m_langIdComboBox - - - SIL.FieldWorks.Common.Controls.FwOverrideComboBox, FwControls, Version=7.0.6.21968, Culture=neutral, PublicKeyToken=null - - - $this - - - 1 - - - False - - - True - - - 3, 0 - - - 183, 13 - - - 8 - - - System Language for keyboard input: - - - m_langIdLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - False - - - True - - - 3, 49 - - - 95, 13 - - - 9 - - - Keyman keyboard: - - - m_keyboardLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - True - - - 288, 88 - - - m_helpProvider - - - System.Windows.Forms.HelpProvider, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - KeyboardControl - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Src/FwCoreDlgs/FwCoreDlgs.csproj b/Src/FwCoreDlgs/FwCoreDlgs.csproj index 9f15e4d14f..854398a800 100644 --- a/Src/FwCoreDlgs/FwCoreDlgs.csproj +++ b/Src/FwCoreDlgs/FwCoreDlgs.csproj @@ -155,16 +155,16 @@ False ..\..\Lib\debug\ICSharpCode.SharpZipLib.dll - - False - False ..\..\DistFiles\Microsoft.Practices.ServiceLocation.dll False - ..\..\Output\Debug\Palaso.dll + ..\..\Downloads\Palaso.dll + + + False False @@ -670,7 +670,6 @@ - ../../DistFiles diff --git a/Src/FwCoreDlgs/FwCoreDlgsTests/FwCoreDlgsTests.csproj b/Src/FwCoreDlgs/FwCoreDlgsTests/FwCoreDlgsTests.csproj index 2c901bb5b8..c029d0d817 100644 --- a/Src/FwCoreDlgs/FwCoreDlgsTests/FwCoreDlgsTests.csproj +++ b/Src/FwCoreDlgs/FwCoreDlgsTests/FwCoreDlgsTests.csproj @@ -1,4 +1,4 @@ - + Local @@ -188,6 +188,9 @@ False ..\..\..\Downloads\Palaso.dll + + False + False ..\..\..\Bin\Rhino\Rhino.Mocks.dll @@ -255,17 +258,29 @@ FwSetupFixtureClass.cs - + + Form + - + + Form + - - - + + Form + + + Form + + + Form + - + + Form + @@ -294,8 +309,7 @@ - ../../../DistFiles - + \ No newline at end of file diff --git a/Src/FwCoreDlgs/FwCoreDlgsTests/WritingSystemPropertiesDialogTests.cs b/Src/FwCoreDlgs/FwCoreDlgsTests/WritingSystemPropertiesDialogTests.cs index ea4c4e272b..5081c5befa 100644 --- a/Src/FwCoreDlgs/FwCoreDlgsTests/WritingSystemPropertiesDialogTests.cs +++ b/Src/FwCoreDlgs/FwCoreDlgsTests/WritingSystemPropertiesDialogTests.cs @@ -18,7 +18,7 @@ using System.Windows.Forms; using NUnit.Framework; - +using Palaso.WritingSystems; using SIL.FieldWorks.FDO; using SIL.FieldWorks.FDO.FDOTests; using SIL.CoreImpl; @@ -222,7 +222,7 @@ internal void ValidateFontsTab() internal void ValidateKeyboardTab() { - Assert.AreEqual(CurrentWritingSystem, m_KeyboardControl.WritingSystem); + Assert.AreEqual(((IWritingSystemDefinition)CurrentWritingSystem).Bcp47Tag, m_modelForKeyboard.CurrentRFC4646); } internal void ValidateConvertersTab() diff --git a/Src/FwCoreDlgs/ValidCharactersDlg.cs b/Src/FwCoreDlgs/ValidCharactersDlg.cs index 90260f74e8..857e9d1003 100644 --- a/Src/FwCoreDlgs/ValidCharactersDlg.cs +++ b/Src/FwCoreDlgs/ValidCharactersDlg.cs @@ -25,7 +25,7 @@ using System.Text; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; - +using Palaso.WritingSystems; using SIL.CoreImpl; using SIL.FieldWorks.Common.COMInterfaces; using SIL.FieldWorks.Common.Controls; @@ -1395,9 +1395,9 @@ private void tabControlAddFrom_SelectedIndexChanged(object sender, EventArgs e) break; } if (fUseWsKeyboard) - KeyboardHelper.ActivateKeyboard(m_ws.LCID); + ((IWritingSystemDefinition)m_ws).LocalKeyboard.Activate(); else - KeyboardHelper.ActivateDefaultKeyboard(); + Keyboard.Controller.ActivateDefaultKeyboard(); } /// ------------------------------------------------------------------------------------ @@ -1734,7 +1734,7 @@ private void btnHelp_Click(object sender, EventArgs e) protected override void OnClosed(EventArgs e) { base.OnClosed(e); - KeyboardHelper.ActivateDefaultKeyboard(); + Keyboard.Controller.ActivateDefaultKeyboard(); } #endregion diff --git a/Src/FwCoreDlgs/WritingSystemPropertiesDialog.cs b/Src/FwCoreDlgs/WritingSystemPropertiesDialog.cs index 9c8fb92d1e..88b6fe7bd0 100644 --- a/Src/FwCoreDlgs/WritingSystemPropertiesDialog.cs +++ b/Src/FwCoreDlgs/WritingSystemPropertiesDialog.cs @@ -29,10 +29,9 @@ using Microsoft.Win32; using System.Text; using System.Linq; - +using Palaso.UI.WindowsForms.WritingSystems; using Palaso.WritingSystems; using SIL.FieldWorks.Common.COMInterfaces; -using SIL.FieldWorks.Common.Keyboarding; using SIL.FieldWorks.Common.Widgets; using SIL.FieldWorks.FDO.DomainServices; using SIL.FieldWorks.FDO.Infrastructure; @@ -66,10 +65,14 @@ public class WritingSystemPropertiesDialog : Form, IFWDisposable public const int kWsConverters = 3; /// Index(4) of the tab for writing system sorting public const int kWsSorting = 4; + #endregion + + internal Palaso.UI.WindowsForms.WritingSystems.WSKeyboardControl m_keyboardControl; /// Index(5) of the tab for writing systems PUA characters public const int kWsPUACharacters = 5; - #endregion + internal WritingSystemSetupModel m_modelForKeyboard; + /// /// Shows the new writing system properties dialog. @@ -269,13 +272,6 @@ public static bool ShowModifyDialog(Form owner, IWritingSystem selectedWs, bool #region Keyboard Tab - private Label m_lblKeyboardInstruction; - /// - protected KeyboardControl m_KeyboardControl; - private LinkLabel m_linkWindowsKeyboard; - private Label m_lblKeyboardSetupInst; - private LinkLabel m_linkKeymanConfiguration; - private Label m_lblKeyboardTestInstr; #endregion Keyboard Tab @@ -317,7 +313,6 @@ public static bool ShowModifyDialog(Form owner, IWritingSystem selectedWs, bool private Label m_lblPunctuation; private Button btnPunctuation; - private FwTextBox m_fwTextBoxTestWs; private Label lblFullCode; private Label m_FullCode; private Label lblScriptRegionVariant; @@ -360,19 +355,10 @@ private WritingSystemPropertiesDialog() m_lblValidCharacters.Tag = m_lblValidCharacters.Text; m_lblPunctuation.Tag = m_lblPunctuation.Text; m_lblEncodingConverter.Tag = m_lblEncodingConverter.Text; - m_lblKeyboardInstruction.Tag = m_lblKeyboardInstruction.Text; - m_lblKeyboardTestInstr.Tag = m_lblKeyboardTestInstr.Text; m_tsf = TsStrFactoryClass.Create(); LoadSortUsingComboBox(); LoadSortLanguageComboBox(); - - // FWNX-498 Different UI for IBus in Linux - if (MiscUtils.IsUnix) - { - m_linkWindowsKeyboard.Text = FwCoreDlgs.kstidSetUpKeyboards; - m_linkKeymanConfiguration.Visible = false; - } } /// @@ -400,12 +386,6 @@ protected override void Dispose(bool disposing) if (disposable != null) disposable.Dispose(); } - if (m_fwTextBoxTestWs != null && m_fwTextBoxTestWs.WritingSystemFactory != null) - { - var disposable = m_fwTextBoxTestWs.WritingSystemFactory as IDisposable; - if (disposable != null) - disposable.Dispose(); - } } base.Dispose(disposing); } @@ -518,8 +498,6 @@ private void SetupDialogFromCurrentWritingSystem() m_defaultFontsControl.WritingSystem = ws; - m_KeyboardControl.WritingSystem = ws; - //Switch Encoding Converters to the one for the user selected writing system Select_cbEncodingConverter(); @@ -533,6 +511,8 @@ private void SetupDialogFromCurrentWritingSystem() { SetupSortTab(ws); } + m_modelForKeyboard = new WritingSystemSetupModel((WritingSystemDefinition) ws); + m_keyboardControl.BindToModel(m_modelForKeyboard); } private void SetupSortTab(IWritingSystem ws) @@ -844,13 +824,7 @@ private void InitializeComponent() this.tpFonts = new System.Windows.Forms.TabPage(); this.m_defaultFontsControl = new SIL.FieldWorks.FwCoreDlgControls.DefaultFontsControl(); this.tpKeyboard = new System.Windows.Forms.TabPage(); - this.m_fwTextBoxTestWs = new SIL.FieldWorks.Common.Widgets.FwTextBox(); - this.m_lblKeyboardTestInstr = new System.Windows.Forms.Label(); - this.m_linkKeymanConfiguration = new System.Windows.Forms.LinkLabel(); - this.m_linkWindowsKeyboard = new System.Windows.Forms.LinkLabel(); - this.m_lblKeyboardSetupInst = new System.Windows.Forms.Label(); - this.m_lblKeyboardInstruction = new System.Windows.Forms.Label(); - this.m_KeyboardControl = new SIL.FieldWorks.FwCoreDlgControls.KeyboardControl(); + this.m_keyboardControl = new Palaso.UI.WindowsForms.WritingSystems.WSKeyboardControl(); this.tpConverters = new System.Windows.Forms.TabPage(); this.btnEncodingConverter = new System.Windows.Forms.Button(); this.m_lblEncodingConverter = new System.Windows.Forms.Label(); @@ -897,7 +871,6 @@ private void InitializeComponent() this.gbDirection.SuspendLayout(); this.tpFonts.SuspendLayout(); this.tpKeyboard.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.m_fwTextBoxTestWs)).BeginInit(); this.tpConverters.SuspendLayout(); this.tpSorting.SuspendLayout(); this.m_sortRulesPanel.SuspendLayout(); @@ -922,8 +895,8 @@ private void InitializeComponent() this.tabControl.Name = "tabControl"; this.tabControl.SelectedIndex = 0; this.helpProvider.SetShowHelp(this.tabControl, ((bool)(resources.GetObject("tabControl.ShowHelp")))); - this.tabControl.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabControl_Deselecting); this.tabControl.SelectedIndexChanged += new System.EventHandler(this.tabControl_SelectedIndexChanged); + this.tabControl.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabControl_Deselecting); // // tpGeneral // @@ -980,7 +953,13 @@ private void InitializeComponent() resources.ApplyResources(this.m_regionVariantControl, "m_regionVariantControl"); this.m_regionVariantControl.BackColor = System.Drawing.Color.Transparent; this.m_regionVariantControl.Name = "m_regionVariantControl"; + this.m_regionVariantControl.RegionName = global::SIL.FieldWorks.FwCoreDlgs.FwCoreDlgs.kstidOpen; + this.m_regionVariantControl.RegionSubtag = null; + this.m_regionVariantControl.ScriptName = global::SIL.FieldWorks.FwCoreDlgs.FwCoreDlgs.kstidOpen; + this.m_regionVariantControl.ScriptSubtag = null; this.helpProvider.SetShowHelp(this.m_regionVariantControl, ((bool)(resources.GetObject("m_regionVariantControl.ShowHelp")))); + this.m_regionVariantControl.VariantName = global::SIL.FieldWorks.FwCoreDlgs.FwCoreDlgs.kstidOpen; + this.m_regionVariantControl.VariantSubtag = null; this.m_regionVariantControl.WritingSystem = null; this.m_regionVariantControl.ScriptRegionVariantChanged += new System.EventHandler(this.m_regionVariantControl_ScriptRegionVariantChanged); // @@ -1043,72 +1022,16 @@ private void InitializeComponent() // // tpKeyboard // - this.tpKeyboard.Controls.Add(this.m_fwTextBoxTestWs); - this.tpKeyboard.Controls.Add(this.m_lblKeyboardTestInstr); - this.tpKeyboard.Controls.Add(this.m_linkKeymanConfiguration); - this.tpKeyboard.Controls.Add(this.m_linkWindowsKeyboard); - this.tpKeyboard.Controls.Add(this.m_lblKeyboardSetupInst); - this.tpKeyboard.Controls.Add(this.m_lblKeyboardInstruction); - this.tpKeyboard.Controls.Add(this.m_KeyboardControl); + this.tpKeyboard.Controls.Add(this.m_keyboardControl); resources.ApplyResources(this.tpKeyboard, "tpKeyboard"); this.tpKeyboard.Name = "tpKeyboard"; this.helpProvider.SetShowHelp(this.tpKeyboard, ((bool)(resources.GetObject("tpKeyboard.ShowHelp")))); this.tpKeyboard.UseVisualStyleBackColor = true; // - // m_fwTextBoxTestWs - // - this.m_fwTextBoxTestWs.AcceptsReturn = false; - this.m_fwTextBoxTestWs.AdjustStringHeight = true; - this.m_fwTextBoxTestWs.BackColor = System.Drawing.SystemColors.Window; - this.m_fwTextBoxTestWs.controlID = null; - resources.ApplyResources(this.m_fwTextBoxTestWs, "m_fwTextBoxTestWs"); - this.m_fwTextBoxTestWs.HasBorder = true; - this.m_fwTextBoxTestWs.Name = "m_fwTextBoxTestWs"; - this.helpProvider.SetShowHelp(this.m_fwTextBoxTestWs, ((bool)(resources.GetObject("m_fwTextBoxTestWs.ShowHelp")))); - this.m_fwTextBoxTestWs.SuppressEnter = false; - this.m_fwTextBoxTestWs.WordWrap = true; - this.m_fwTextBoxTestWs.Enter += new System.EventHandler(this.m_fwTextBoxTestWs_Enter); + // m_keyboardControl // - // m_lblKeyboardTestInstr - // - resources.ApplyResources(this.m_lblKeyboardTestInstr, "m_lblKeyboardTestInstr"); - this.m_lblKeyboardTestInstr.Name = "m_lblKeyboardTestInstr"; - this.helpProvider.SetShowHelp(this.m_lblKeyboardTestInstr, ((bool)(resources.GetObject("m_lblKeyboardTestInstr.ShowHelp")))); - // - // m_linkKeymanConfiguration - // - resources.ApplyResources(this.m_linkKeymanConfiguration, "m_linkKeymanConfiguration"); - this.m_linkKeymanConfiguration.Name = "m_linkKeymanConfiguration"; - this.helpProvider.SetShowHelp(this.m_linkKeymanConfiguration, ((bool)(resources.GetObject("m_linkKeymanConfiguration.ShowHelp")))); - this.m_linkKeymanConfiguration.TabStop = true; - this.m_linkKeymanConfiguration.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.m_linkKeymanConfiguration_LinkClicked); - // - // m_linkWindowsKeyboard - // - resources.ApplyResources(this.m_linkWindowsKeyboard, "m_linkWindowsKeyboard"); - this.m_linkWindowsKeyboard.Name = "m_linkWindowsKeyboard"; - this.helpProvider.SetShowHelp(this.m_linkWindowsKeyboard, ((bool)(resources.GetObject("m_linkWindowsKeyboard.ShowHelp")))); - this.m_linkWindowsKeyboard.TabStop = true; - this.m_linkWindowsKeyboard.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.m_linkWindowsKeyboard_LinkClicked); - // - // m_lblKeyboardSetupInst - // - resources.ApplyResources(this.m_lblKeyboardSetupInst, "m_lblKeyboardSetupInst"); - this.m_lblKeyboardSetupInst.Name = "m_lblKeyboardSetupInst"; - this.helpProvider.SetShowHelp(this.m_lblKeyboardSetupInst, ((bool)(resources.GetObject("m_lblKeyboardSetupInst.ShowHelp")))); - // - // m_lblKeyboardInstruction - // - resources.ApplyResources(this.m_lblKeyboardInstruction, "m_lblKeyboardInstruction"); - this.m_lblKeyboardInstruction.Name = "m_lblKeyboardInstruction"; - this.helpProvider.SetShowHelp(this.m_lblKeyboardInstruction, ((bool)(resources.GetObject("m_lblKeyboardInstruction.ShowHelp")))); - // - // m_KeyboardControl - // - resources.ApplyResources(this.m_KeyboardControl, "m_KeyboardControl"); - this.m_KeyboardControl.Name = "m_KeyboardControl"; - this.helpProvider.SetShowHelp(this.m_KeyboardControl, ((bool)(resources.GetObject("m_KeyboardControl.ShowHelp")))); - this.m_KeyboardControl.WritingSystem = null; + resources.ApplyResources(this.m_keyboardControl, "m_keyboardControl"); + this.m_keyboardControl.Name = "m_keyboardControl"; // // tpConverters // @@ -1459,15 +1382,12 @@ private void InitializeComponent() this.helpProvider.SetShowHelp(this, ((bool)(resources.GetObject("$this.ShowHelp")))); this.ShowIcon = false; this.ShowInTaskbar = false; - this.Activated += new System.EventHandler(this.WritingSystemPropertiesDialog_Activated); this.tabControl.ResumeLayout(false); this.tpGeneral.ResumeLayout(false); this.tpGeneral.PerformLayout(); this.gbDirection.ResumeLayout(false); this.tpFonts.ResumeLayout(false); this.tpKeyboard.ResumeLayout(false); - this.tpKeyboard.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.m_fwTextBoxTestWs)).EndInit(); this.tpConverters.ResumeLayout(false); this.tpConverters.PerformLayout(); this.tpSorting.ResumeLayout(false); @@ -1625,8 +1545,6 @@ private void SetFullNameLabels(string fullName) SetLabelParams(m_lblValidCharacters, fullName); SetLabelParams(m_lblPunctuation, fullName); SetLabelParams(m_lblEncodingConverter, fullName); - SetLabelParams(m_lblKeyboardInstruction, fullName); - SetLabelParams(m_lblKeyboardTestInstr, fullName); } private static void SetLabelParams(Label lbl, params string[] parms) @@ -2051,7 +1969,6 @@ protected void tabControl_SelectedIndexChanged(object sender, EventArgs e) break; case kWsKeyboard: - m_fwTextBoxTestWs.Text = ""; break; } } @@ -2081,109 +1998,6 @@ private void linkToEthnologue_LinkClicked(object sender, LinkLabelLinkClickedEve } } - private void m_linkWindowsKeyboard_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string program; - string arguments = null; - - if (MiscUtils.IsUnix) - program = "ibus-setup"; - else - { - program = Path.Combine( - Environment.GetFolderPath(Environment.SpecialFolder.System), "control.exe"); - arguments ="input.dll"; - } - var processInfo = new ProcessStartInfo(program, arguments); - using (Process.Start(processInfo)) - { - } - } - - private void m_linkKeymanConfiguration_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - int version = 0; - string keymanPath = GetKeymanRegistryValue("root path", ref version); - if (keymanPath != null) - { - string keyman = Path.Combine(keymanPath, "kmshell.exe"); - if (File.Exists(keyman)) - { - // From Marc Durdin (7/16/09): - // Re LT-9902, in Keyman 6, you could launch the configuration dialog reliably by running kmshell.exe. - // However, Keyman 7 works slightly differently. The recommended approach is to use the COM API: - // http://www.tavultesoft.com/keymandev/documentation/70/comapi_interface_IKeymanProduct_OpenConfiguration.html - // Sample code: - // dim kmcom, product - // Set kmcom = CreateObject("kmcomapi.TavultesoftKeyman") - // rem Pro = ProductID 1; Light = ProductID 8 - // rem Following line will raise exception if product is not installed, so try/catch it - // Set product = kmcom.Products.ItemsByProductID(1) - // Product.OpenConfiguration - // But if that is not going to be workable for you, then use the parameter "-c" to start configuration. - // Without a parameter, the action is to start Keyman Desktop itself; v7.0 would fire configuration if restarted, - // v7.1 just flags to the user that Keyman is running and where to find it. This change was due to feedback that - // users would repeatedly try to start Keyman when it was already running, and get confused when they got the - // Configuration dialog. Sorry for the unannounced change... 9 - // The -c parameter will not work with Keyman 6, so you would need to test for the specific version. For what it's worth, the - // COM API is static and should not change, while the command line parameters are not guaranteed to change from version to version. - string param = ""; - if (version > 6) - param = "-c"; - using (Process.Start(keyman, param)) - { - return; - } - } - } - MessageBox.Show("Keyman 5.0 or later is not Installed."); - } - - /// - /// This method returns the path to Keyman Configuration if it is installed. Otherwise it returns null. - /// It also sets the version of Keyman that it found. - /// - /// The key. - /// The version. - /// - private static string GetKeymanRegistryValue(string key, ref int version) - { - using (RegistryKey rkTavultesoft = Registry.LocalMachine.OpenSubKey("Software", false).OpenSubKey("Tavultesoft", false)) - { - if (rkTavultesoft == null) - return null; - - using (var rkKeyman = rkTavultesoft.OpenSubKey("Keyman", false)) - { - if (rkKeyman == null) - return null; - - //May 2008 version 7.0 is the lastest version. The others are here for - //future versions. - int[] versions = { 10, 9, 8, 7, 6, 5 }; - foreach (int vers in versions) - { - using (var rkApplication = rkKeyman.OpenSubKey(vers + ".0", false)) - { - if (rkApplication != null) - { - foreach (string sKey in rkApplication.GetValueNames()) - { - if (sKey == key) - { - version = vers; - return (string)rkApplication.GetValue(sKey); - } - } - } - } - } - } - - return null; - } - } - private void m_tbLanguageName_TextChanged(object sender, EventArgs e) { if (m_userChangedLanguageName) @@ -2342,21 +2156,6 @@ private void m_regionVariantControl_ScriptRegionVariantChanged(object sender, Ev PopulateRelatedWSsListBox(CurrentWritingSystem); } - private void m_fwTextBoxTestWs_Enter(object sender, EventArgs e) - { - IWritingSystem tempWs = CurrentWritingSystem; - IWritingSystem origWs = m_tempWritingSystems[tempWs]; - int height = m_stylesheet == null ? 10000 : FontHeightAdjuster.GetFontHeightForStyle("Normal", m_stylesheet, - origWs == null ? 0 : origWs.Handle, m_wsManager); - IWritingSystemManager wsManager = FwUtils.CreateWritingSystemManager(); - wsManager.Set(tempWs); - m_fwTextBoxTestWs.WritingSystemFactory = wsManager; - m_fwTextBoxTestWs.WritingSystemCode = tempWs.Handle; - var bldr = TsStringUtils.MakeTss(string.Empty, tempWs.Handle).GetBldr(); - bldr.SetIntPropValues(0, 0, (int)FwTextPropType.ktptFontSize, (int)FwTextPropVar.ktpvMilliPoint, height); - m_fwTextBoxTestWs.Tss = bldr.GetString(); - } - private void m_sortUsingComboBox_SelectedIndexChanged(object sender, EventArgs e) { IWritingSystem ws = CurrentWritingSystem; @@ -2377,12 +2176,6 @@ private void m_sortLanguageComboBox_SelectedIndexChanged(object sender, EventArg ws.SortRules = (string) m_sortLanguageComboBox.SelectedValue; } - private void WritingSystemPropertiesDialog_Activated(object sender, EventArgs e) - { - KeyboardController.Manager.Reset(); // we want to see any keyboards added while we were not active. - m_KeyboardControl.Reset(); - } - #endregion } } diff --git a/Src/FwCoreDlgs/WritingSystemPropertiesDialog.resx b/Src/FwCoreDlgs/WritingSystemPropertiesDialog.resx index 66d3556179..7476d646d4 100644 --- a/Src/FwCoreDlgs/WritingSystemPropertiesDialog.resx +++ b/Src/FwCoreDlgs/WritingSystemPropertiesDialog.resx @@ -1,5024 +1,4373 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - lblScriptRegionVariant - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpGeneral - - - 0 - - - m_FullCode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpGeneral - - - 1 - - - lblFullCode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpGeneral - - - 2 - - - lblSpellingDictionary - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpGeneral - - - 3 - - - cbDictionaries - - - SIL.FieldWorks.Common.Controls.FwOverrideComboBox, FwControls, Version=7.0.6.21968, Culture=neutral, PublicKeyToken=null - - - tpGeneral - - - 4 - - - m_regionVariantControl - - - SIL.FieldWorks.FwCoreDlgControls.RegionVariantControl, FwCoreDlgControls, Version=7.0.6.22066, Culture=neutral, PublicKeyToken=null - - - tpGeneral - - - 5 - - - gbDirection - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpGeneral - - - 6 - - - m_ShortWsName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpGeneral - - - 7 - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpGeneral - - - 8 - - - - 4, 22 - - - - True - - - 435, 282 - - - 4 - - - General - - - tpGeneral - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 0 - - - m_defaultFontsControl - - - SIL.FieldWorks.FwCoreDlgControls.DefaultFontsControl, FwCoreDlgControls, Version=7.0.6.22066, Culture=neutral, PublicKeyToken=null - - - tpFonts - - - 0 - - - 4, 22 - - - - 3, 3, 3, 3 - - - True - - - 435, 282 - - - 5 - - - Font - - - tpFonts - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 1 - - - Microsoft Sans Serif, 100pt - - - 7, 223 - - - 17, 17 - - - True - - - 414, 52 - - - 12 - - - m_fwTextBoxTestWs - - - SIL.FieldWorks.Common.Widgets.FwTextBox, Widgets, Version=7.0.6.22051, Culture=neutral, PublicKeyToken=null - - - tpKeyboard - - - 0 - - - True - - - NoControl - - - 7, 207 - - - True - - - 134, 13 - - - 11 - - - Test the {0} writing system: - - - m_lblKeyboardTestInstr - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpKeyboard - - - 1 - - - True - - - NoControl - - - 244, 158 - - - True - - - 110, 13 - - - 9 - - - Keyman Configuration - - - m_linkKeymanConfiguration - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpKeyboard - - - 2 - - - True - - - NoControl - - - 36, 158 - - - True - - - 137, 13 - - - 8 - - - Windows keyboard settings - - - m_linkWindowsKeyboard - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpKeyboard - - - 3 - - - True - - - NoControl - - - 4, 134 - - - True - - - 398, 13 - - - 7 - - - If the keyboard you need is not listed, click the appropriate link(s) below to set it up. - - - m_lblKeyboardSetupInst - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpKeyboard - - - 4 - - - True - - - NoControl - - - 3, 9 - - - True - - - 290, 13 - - - 6 - - - Select the keyboard combination with which to type {0} text. - - - m_lblKeyboardInstruction - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpKeyboard - - - 5 - - - 6, 30 - - - False - - - 419, 96 - - - 0 - - - m_KeyboardControl - - - SIL.FieldWorks.FwCoreDlgControls.KeyboardControl, FwCoreDlgControls, Version=7.0.6.22066, Culture=neutral, PublicKeyToken=null - - - tpKeyboard - - - 6 - - - 4, 22 - - - True - - - 435, 282 - - - 6 - - - Keyboard - - - tpKeyboard - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 2 - - - btnEncodingConverter - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpConverters - - - 0 - - - m_lblEncodingConverter - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpConverters - - - 1 - - - cbEncodingConverter - - - SIL.FieldWorks.Common.Controls.FwOverrideComboBox, FwControls, Version=7.0.6.21968, Culture=neutral, PublicKeyToken=null - - - tpConverters - - - 2 - - - 4, 22 - - - True - - - 435, 282 - - - 7 - - - Converters - - - tpConverters - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 3 - - - m_sortUsingLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpSorting - - - 0 - - - m_sortUsingComboBox - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpSorting - - - 1 - - - m_sortRulesPanel - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpSorting - - - 2 - - - m_sortLanguagePanel - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpSorting - - - 3 - - - 4, 22 - - - False - - - 435, 282 - - - 3 - - - Sorting - - - tpSorting - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 4 - - - m_lblPunctuation - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpPUACharacters - - - 0 - - - btnPunctuation - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpPUACharacters - - - 1 - - - m_lblValidCharacters - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpPUACharacters - - - 2 - - - btnValidChars - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpPUACharacters - - - 3 - - - 4, 22 - - - False - - - 435, 282 - - - 2 - - - Characters - - - tpPUACharacters - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl - - - 5 - - - 42, 18 - - - 208, 100 - - - True - - - 443, 308 - - - 0 - - - tabControl - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 10 - + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + - NoControl + NoControl + - 15, 35 + 15, 35 + + 17, 17 + + - False + False - 414, 33 + 414, 33 - 12 + 12 - Usually, you only need to use the following fields in order to distinguish writing systems for the same language. + Usually, you only need to use the following fields in order to distinguish writing systems for the same language. - lblScriptRegionVariant + lblScriptRegionVariant - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpGeneral + tpGeneral - 0 + 0 - True + True - NoControl + NoControl - 265, 258 + 265, 258 - True + True - 89, 13 + 89, 13 - 11 + 11 - CurrentFullLocale + CurrentFullLocale - m_FullCode + m_FullCode - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpGeneral + tpGeneral - 1 + 1 - True + True - NoControl + NoControl - 180, 258 + 180, 258 - True + True - 79, 13 + 79, 13 - 10 + 10 - Internal Code: + Internal Code: - lblFullCode + lblFullCode - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpGeneral + tpGeneral - 2 + 2 - True + True - NoControl + NoControl - 180, 209 + 180, 209 - True + True - 95, 13 + 95, 13 - 9 + 9 - Spelling dictionary: + Spelling dictionary: - lblSpellingDictionary + lblSpellingDictionary - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpGeneral + tpGeneral - 3 + 3 - 182, 230 + 182, 230 - True + True - 183, 21 + 183, 21 - 14 + 14 - cbDictionaries + cbDictionaries - SIL.FieldWorks.Common.Controls.FwOverrideComboBox, FwControls, Version=7.0.6.21968, Culture=neutral, PublicKeyToken=null + SIL.FieldWorks.Common.Controls.FwOverrideComboBox, FwControls, Version=8.0.4.24266, Culture=neutral, PublicKeyToken=null - tpGeneral + tpGeneral - 4 + 4 - Top, Left, Right + Top, Left, Right - 8, 72 + 8, 72 - False + False - 420, 136 + 420, 136 - 12 + 12 - m_regionVariantControl + m_regionVariantControl - SIL.FieldWorks.FwCoreDlgControls.RegionVariantControl, FwCoreDlgControls, Version=7.0.6.22066, Culture=neutral, PublicKeyToken=null + SIL.FieldWorks.FwCoreDlgControls.RegionVariantControl, FwCoreDlgControls, Version=8.0.4.24268, Culture=neutral, PublicKeyToken=null - tpGeneral + tpGeneral - 5 - - - rbLeftToRight - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbDirection - - - 0 - - - rbRightToLeft - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbDirection - - - 1 - - - 19, 210 - - - False - - - 146, 64 - - - 13 - - - Direction: - - - gbDirection - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpGeneral - - - 6 + 5 - Specifies the direction in which the writing system is written. + Specifies the direction in which the writing system is written. - NoControl + NoControl - 10, 14 + 10, 14 - True + True - 104, 19 + 104, 19 - 0 + 0 - Left-to-right + Left-to-right - rbLeftToRight + rbLeftToRight - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - gbDirection + gbDirection - 0 + 0 - Specifies the direction in which the writing system is written. + Specifies the direction in which the writing system is written. - NoControl + NoControl - 10, 34 + 10, 34 - True + True - 104, 24 + 104, 24 - 1 + 1 - Right-to-left + Right-to-left - rbRightToLeft + rbRightToLeft - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - gbDirection + gbDirection - 1 + 1 + + + 19, 210 + + + False + + + 146, 64 + + + 13 + + + Direction: + + + gbDirection + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpGeneral + + + 6 - Specifies an abbreviation to identify the writing system. + Specifies an abbreviation to identify the writing system. - 93, 6 + 93, 6 - 25 + 25 - True + True - 100, 20 + 100, 20 - 11 + 11 - m_ShortWsName + m_ShortWsName - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpGeneral + tpGeneral - 7 + 7 - True + True - NoControl + NoControl - 14, 10 + 14, 10 - False + False - 69, 13 + 69, 13 - 4 + 4 - &Abbreviation: + &Abbreviation: - label5 + label5 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpGeneral + tpGeneral - 8 + 8 + + + 4, 22 + + + True + + + 435, 282 + + + 4 + + + General + + + tpGeneral + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 0 - Top, Left, Right + Top, Left, Right - Specifies a similar writing system in order to inherit sort order and keyboard properties. + Specifies a similar writing system in order to inherit sort order and keyboard properties. - 4, 18 + 4, 18 - True + True - 424, 159 + 424, 159 - 2 + 2 - m_defaultFontsControl + m_defaultFontsControl - SIL.FieldWorks.FwCoreDlgControls.DefaultFontsControl, FwCoreDlgControls, Version=7.0.6.22066, Culture=neutral, PublicKeyToken=null + SIL.FieldWorks.FwCoreDlgControls.DefaultFontsControl, FwCoreDlgControls, Version=8.0.4.24268, Culture=neutral, PublicKeyToken=null - tpFonts + tpFonts - 0 + 0 + + + 4, 22 + + + 3, 3, 3, 3 + + + True + + + 435, 282 + + + 5 + + + Font + + + tpFonts + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 1 + + + 2, 2 + + + 434, 277 + + + 0 + + + m_keyboardControl + + + Palaso.UI.WindowsForms.WritingSystems.WSKeyboardControl, PalasoUIWindowsForms, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + + + tpKeyboard + + + 0 + + + 4, 22 + + + True + + + 435, 282 + + + 6 + + + Keyboard + + + tpKeyboard + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 2 - Opens a dialog box for adding and testing encoding converters. + Opens a dialog box for adding and testing encoding converters. - NoControl + NoControl - 224, 66 + 224, 66 - True + True - 75, 23 + 75, 23 - 10 + 10 - &More... + &More... - btnEncodingConverter + btnEncodingConverter - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpConverters + tpConverters - 0 + 0 - True + True - NoControl + NoControl - 45, 33 + 45, 33 - False + False - 180, 13 + 180, 13 - 8 + 8 - &Encoding converter for importing {0}: + &Encoding converter for importing {0}: - m_lblEncodingConverter + m_lblEncodingConverter - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpConverters + tpConverters - 1 + 1 - Specifies the encoding converter for importing data which uses this writing system. + Specifies the encoding converter for importing data which uses this writing system. - 48, 67 + 48, 67 - True + True - 168, 21 + 168, 21 - 9 + 9 - cbEncodingConverter + cbEncodingConverter - SIL.FieldWorks.Common.Controls.FwOverrideComboBox, FwControls, Version=7.0.6.21968, Culture=neutral, PublicKeyToken=null + SIL.FieldWorks.Common.Controls.FwOverrideComboBox, FwControls, Version=8.0.4.24266, Culture=neutral, PublicKeyToken=null - tpConverters + tpConverters - 2 - - - True - - - 12, 12 - - - 67, 13 - - - 2 + 2 - - Sort method: - - - m_sortUsingLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpSorting - - - 0 - - - 85, 9 - - - 195, 21 - - - 1 - - - m_sortUsingComboBox - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tpSorting - - - 1 - - - m_sortRulesLoadPanel - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - m_sortRulesPanel - - - 0 - - - m_sortRulesButtonPanel - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - m_sortRulesPanel - - - 1 - - - m_sortRulesTextBox - - - SIL.FieldWorks.Common.Widgets.FwTextBox, Widgets, Version=7.0.6.22051, Culture=neutral, PublicKeyToken=null - - - m_sortRulesPanel - - - 2 - - - m_sortingHelpLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - m_sortRulesPanel + + 4, 22 - - 3 + + True - - 3, 36 + + 435, 282 - - True + + 7 - - 429, 244 + + Converters - - 0 + + tpConverters - - m_sortRulesPanel + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabControl - - tpSorting + + 3 - - 2 + + True - - m_sortRulesLoadLabel + + 12, 12 - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 67, 13 - - m_sortRulesLoadPanel + + 2 - - 0 + + Sort method: - - m_similarWsButton + + m_sortUsingLabel - - SIL.FieldWorks.FwCoreDlgControls.LocaleMenuButton, FwCoreDlgControls, Version=7.0.6.22066, Culture=neutral, PublicKeyToken=null + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - m_sortRulesLoadPanel + + tpSorting - - 1 + + 0 - - 4, 174 + + 85, 9 - - 203, 70 + + 195, 21 - - 16 + + 1 - - m_sortRulesLoadPanel + + m_sortUsingComboBox - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - m_sortRulesPanel + + tpSorting - - 0 + + 1 - NoControl + NoControl - 2, 2 + 2, 2 - True + True - 198, 41 + 198, 41 - 15 + 15 - Alternatively, you can load the sort specification of a similar writing system: + Alternatively, you can load the sort specification of a similar writing system: - m_sortRulesLoadLabel + m_sortRulesLoadLabel - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_sortRulesLoadPanel + m_sortRulesLoadPanel - 0 + 0 - - iVBORw0KGgoAAAANSUhEUgAAAAsAAAAHCAYAAADebrddAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAADVJREFUKFNj+M9A - PIQrZWAAMnFgmHEo5mJTjGwvhiOQNaA7EKuLQRqw+YQE7wG9RHxY/GcAAJYYiXc60TkqAAAAAElFTkSu - QmCC + + iVBORw0KGgoAAAANSUhEUgAAAAsAAAAHCAYAAADebrddAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAADVJREFUKFNj+M9A + PIQrZWAAMnFgmHEo5mJTjGwvhiOQNaA7EKuLQRqw+YQE7wG9RHxY/GcAAJYYiXc60TkqAAAAAElFTkSu + QmCC - MiddleRight + MiddleRight - NoControl + NoControl - 5, 46 + 5, 46 - True + True - 195, 22 + 195, 22 - 16 + 16 - &Load from + &Load from - TextBeforeImage + TextBeforeImage - m_similarWsButton + m_similarWsButton - SIL.FieldWorks.FwCoreDlgControls.LocaleMenuButton, FwCoreDlgControls, Version=7.0.6.22066, Culture=neutral, PublicKeyToken=null + SIL.FieldWorks.FwCoreDlgControls.LocaleMenuButton, FwCoreDlgControls, Version=8.0.4.24268, Culture=neutral, PublicKeyToken=null - m_sortRulesLoadPanel + m_sortRulesLoadPanel - 1 - - - m_angleBracketButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - m_sortRulesButtonPanel - - - 0 - - - m_ampersandButton + 1 - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - m_sortRulesButtonPanel - - - 1 - - - 213, 213 + + 4, 174 - - 206, 28 + + 203, 70 - - 15 + + 16 - - m_sortRulesButtonPanel + + m_sortRulesLoadPanel - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - m_sortRulesPanel + + m_sortRulesPanel - - 1 + + 0 - NoControl + NoControl - 104, 3 + 104, 3 - True + True - 42, 22 + 42, 22 - 15 + 15 - < + < - m_angleBracketButton + m_angleBracketButton - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_sortRulesButtonPanel + m_sortRulesButtonPanel - 0 + 0 - NoControl + NoControl - 56, 3 + 56, 3 - True + True - 42, 22 + 42, 22 - 14 + 14 - & + & - m_ampersandButton + m_ampersandButton - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_sortRulesButtonPanel + m_sortRulesButtonPanel - 1 + 1 + + + 213, 213 + + + 206, 28 + + + 15 + + + m_sortRulesButtonPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + m_sortRulesPanel + + + 1 - Top, Bottom, Left, Right + Top, Bottom, Left, Right - True + True - Microsoft Sans Serif, 100pt + Microsoft Sans Serif, 100pt - 213, 1 + 213, 1 - False + False - 206, 210 + 206, 210 - 10 + 10 - m_sortRulesTextBox + m_sortRulesTextBox - SIL.FieldWorks.Common.Widgets.FwTextBox, Widgets, Version=7.0.6.22051, Culture=neutral, PublicKeyToken=null + SIL.FieldWorks.Common.Widgets.FwTextBox, Widgets, Version=8.0.4.24269, Culture=neutral, PublicKeyToken=null - m_sortRulesPanel + m_sortRulesPanel - 2 + 2 - NoControl + NoControl - 9, 1 + 9, 1 - False + False - 188, 169 + 188, 169 - 9 + 9 - Sorting help goes here + Sorting help goes here - m_sortingHelpLabel + m_sortingHelpLabel - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_sortRulesPanel + m_sortRulesPanel - 3 - - - m_sortLanguageComboBox - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - m_sortLanguagePanel - - - 0 - - - m_sortLanguageLabel - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - m_sortLanguagePanel + 3 - - 1 + + 3, 36 - - 2, 36 + + True - - 435, 45 + + 429, 244 - - 18 + + 0 - - m_sortLanguagePanel + + m_sortRulesPanel - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tpSorting + + tpSorting - - 3 + + 2 - 83, 10 + 83, 10 - 195, 21 + 195, 21 - 3 + 3 - m_sortLanguageComboBox + m_sortLanguageComboBox - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_sortLanguagePanel + m_sortLanguagePanel - 0 + 0 - True + True - 10, 13 + 10, 13 - 58, 13 + 58, 13 - 17 + 17 - Language: + Language: - m_sortLanguageLabel + m_sortLanguageLabel - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_sortLanguagePanel + m_sortLanguagePanel - 1 + 1 + + + 2, 36 + + + 435, 45 + + + 18 + + + m_sortLanguagePanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpSorting + + + 3 + + + 4, 22 + + + False + + + 435, 282 + + + 3 + + + Sorting + + + tpSorting + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 4 - True + True - NoControl + NoControl - 140, 62 + 140, 62 - True + True - 168, 13 + 168, 13 - 15 + 15 - Specify punctuation usage for {0}. + Specify punctuation usage for {0}. - m_lblPunctuation + m_lblPunctuation - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpPUACharacters + tpPUACharacters - 0 + 0 - Opens a dialog box for adding and testing encoding converters. + Opens a dialog box for adding and testing encoding converters. - NoControl + NoControl - 22, 56 + 22, 56 - True + True - 116, 22 + 116, 22 - 12 + 12 - &Punctuation Usage... + &Punctuation Usage... - btnPunctuation + btnPunctuation - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpPUACharacters + tpPUACharacters - 1 + 1 - True + True - NoControl + NoControl - 140, 34 + 140, 34 - True + True - 202, 13 + 202, 13 - 11 + 11 - Specify the set of valid characters for {0}. + Specify the set of valid characters for {0}. - m_lblValidCharacters + m_lblValidCharacters - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpPUACharacters + tpPUACharacters - 2 + 2 - Opens a dialog box for adding and testing encoding converters. + Opens a dialog box for adding and testing encoding converters. - NoControl + NoControl - 22, 28 + 22, 28 - True + True - 116, 22 + 116, 22 - 11 + 11 - &Valid Characters... + &Valid Characters... - btnValidChars + btnValidChars - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tpPUACharacters + tpPUACharacters - 3 + 3 + + + 4, 22 + + + False + + + 435, 282 + + + 2 + + + Characters + + + tpPUACharacters + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl + + + 5 + + + 42, 18 + + + 208, 100 + + + True + + + 443, 308 + + + 0 + + + tabControl + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 - Modify the name of the language and/or find the Ethnologue code for the language. + Modify the name of the language and/or find the Ethnologue code for the language. - NoControl + NoControl - 446, 16 + 446, 16 - True + True - 89, 25 + 89, 25 - 9 + 9 - Change... + Change... - btnModifyEthnologueInfo + btnModifyEthnologueInfo - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox2 + groupBox2 - 0 + 0 - Bottom, Right + Bottom, Right - Displays more information to help you use this dialog box. + Displays more information to help you use this dialog box. - NoControl + NoControl - 555, 414 + 555, 414 - True + True - 75, 23 + 75, 23 - 3 + 3 - Help + Help - btnHelp + btnHelp - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 9 + 9 - Bottom, Right + Bottom, Right - Closes this dialog box without saving any changes you have made. + Closes this dialog box without saving any changes you have made. - NoControl + NoControl - 471, 414 + 471, 414 - True + True - 75, 23 + 75, 23 - 2 + 2 - Cancel + Cancel - btnCancel + btnCancel - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 8 + 8 - Bottom, Right + Bottom, Right - Applies and saves changes you have made and closes this dialog box. + Applies and saves changes you have made and closes this dialog box. - NoControl + NoControl - 387, 414 + 387, 414 - True + True - 75, 23 + 75, 23 - 1 + 1 - OK + OK - btnOk + btnOk - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 7 + 7 - 8, 134 + 8, 134 - True + True - 189, 238 + 189, 238 - 4 + 4 - m_listBoxRelatedWSs + m_listBoxRelatedWSs - System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 6 + 6 - - iVBORw0KGgoAAAANSUhEUgAAAAsAAAAHCAYAAADebrddAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAADVJREFUKFNj+M9A - PIQrZWAAMnFgmHEo5mJTjGwvhiOQNaA7EKuLQRqw+YQE7wG9RHxY/GcAAJYYiXc60TkqAAAAAElFTkSu - QmCC + + iVBORw0KGgoAAAANSUhEUgAAAAsAAAAHCAYAAADebrddAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAADVJREFUKFNj+M9A + PIQrZWAAMnFgmHEo5mJTjGwvhiOQNaA7EKuLQRqw+YQE7wG9RHxY/GcAAJYYiXc60TkqAAAAAElFTkSu + QmCC - MiddleRight + MiddleRight - NoControl + NoControl - 8, 380 + 8, 380 - True + True - 61, 22 + 61, 22 - 5 + 5 - &Add + &Add - TextBeforeImage + TextBeforeImage - btnAdd + btnAdd - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 5 + 5 - NoControl + NoControl - 75, 380 + 75, 380 - True + True - 59, 22 + 59, 22 - 6 + 6 - &Copy + &Copy - btnCopy + btnCopy - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 4 + 4 - NoControl + NoControl - 140, 379 + 140, 379 - True + True - 57, 23 + 57, 23 - 7 + 7 - &Delete + &Delete - m_deleteButton + m_deleteButton - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 3 - - - m_linkToEthnologue - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - m_LanguageCode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - m_tbLanguageName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 5 - - - 4, 10 - - - True - - - 645, 76 - - - 10 - - - Language: - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 + 3 - True + True - NoControl + NoControl - 446, 50 + 446, 50 - True + True - 148, 13 + 148, 13 - 10 + 10 - View Ethnologue entry for byk + View Ethnologue entry for byk - m_linkToEthnologue + m_linkToEthnologue - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox2 + groupBox2 - 1 + 1 - Microsoft Sans Serif, 8.25pt, style=Bold + Microsoft Sans Serif, 8.25pt, style=Bold - NoControl + NoControl - 357, 20 + 357, 20 - True + True - 83, 20 + 83, 20 - 5 + 5 - ### + ### - m_LanguageCode + m_LanguageCode - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox2 + groupBox2 - 2 + 2 - True + True - NoControl + NoControl - 260, 20 + 260, 20 - True + True - 91, 13 + 91, 13 - 4 + 4 - Ethnologue code: + Ethnologue code: - label3 + label3 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox2 + groupBox2 - 3 + 3 - 7, 44 + 7, 44 - True + True - 244, 20 + 244, 20 - 8 + 8 - m_tbLanguageName + m_tbLanguageName - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox2 + groupBox2 - 4 + 4 - True + True - NoControl + NoControl - 4, 20 + 4, 20 - True + True - 38, 13 + 38, 13 - 0 + 0 - Name: + Name: - label1 + label1 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupBox2 + groupBox2 - 5 + 5 + + + 4, 10 + + + True + + + 645, 76 + + + 10 + + + Language: + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 - NoControl + NoControl - 8, 97 + 8, 97 - True + True - 192, 17 + 192, 17 - 11 + 11 - Writing Systems: + Writing Systems: - m_writingSystemsFor + m_writingSystemsFor - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 1 + 1 - True + True - Microsoft Sans Serif, 8.25pt, style=Italic + Microsoft Sans Serif, 8.25pt, style=Italic - NoControl + NoControl - 8, 114 + 8, 114 - True + True - 175, 13 + 175, 13 - 12 + 12 - Hidden writing systems are italicized + Hidden writing systems are italicized - lblHiddenWss + lblHiddenWss - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - $this + $this - 0 + 0 - - True + + True - - 50 + + 50 - 6, 13 + 6, 13 - 652, 446 + 652, 446 - - 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 - AAAfAAAAAAAAAAAAFwADAAAAAAAABgMAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAGQAAAAAAAAAA - AAAAAAAAHwAAAAAAAAAAAAEAHgAAAAAAAB8AGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAA - AAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA - AAAAAAAAAAAAAAAAAAAfAAAAAAAAAAARAAcAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - FgAGAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAABwASAAAAAAAAAAAFABwAAAAAAAAAAAAAAAAAAAAAAAAL - AQAAAAAOAAAAAAAEBAAAAAAAAAAAAB8AAAAAAAAAAAEAGAAAAAAAAAAACAARAAAAAAAAAAAAAAAAAAAA - ABIAAAQZAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAABABsAAAAAAAAAAAcACgAAAAAAAAAAAAAA - AAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAABQAZAAAAAAAAAAAEAAcAAAAAAAAA - AAAAAAAAAAAPAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAABAAEgAAAAAAAAAAAAAJAAAA - AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAUAAAAAAAAAAAAA - DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAEAAAAAAAAA - AAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAbABEA - AAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAA - AAoAAAAAAAAAAQADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAA - AAAAAAAACAEAAAAAGAAAHwAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAATABMAAAAADgAAAAAAAQAACRMOAQAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAFAAAADwAAAAAACwABAAAAAAAdAQAAAAIAAAAAAAAAAAAAAAAAAAAAHwAA - AAAAHAAAAAAAAAAAAAAAAAAAAAAHAAAEAAAAAAAAAAAAHQAAAAAAAAAHAAAOABkAAAAAAAAAAAQAAAAA - AAcAAAAAAAcABAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAS - GAAQAAABCgAAABEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAUAAAAPAAMAAAAAAB0AAAAAAAAAAAAAAAAIBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAJ - AAAAAAAAAAAAGhMfAAAAHhMTHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAIAAcAAAAAAAAAAAAA - AAAPAAsAAAAIGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAUAAAAAAQAAgUGAAAA - AAAAAAAAABUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAHAAAAAAAAAAAAAwAA - AgAAAAAAAAAAAAANBQAcEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAXAAAFAAAAFwAAAAAA - DgAHAAAAHwAFAAAAAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAGAAAA - AAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAA - AAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAQAAEWABsFAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAABsAAAAAHgAAGgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbHwAAAAAAABMAAA8AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAMAAAAAAAAAAAAAAAA - AAAZAQAAAAETAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAFgAADwAAAAAAAAAA - AAAAAAACBB0AAAALAAYAAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAWAAAAAAAAAAAAAAAAAAAAABYAAAAA - AAAAAAAAAAAADQAAAAAAAAcAFwAAAAAAAAAAAAAAAAAABgAAFgAAAgAAAQAAFgAAAAAAAAAAAAAAAAAf - AAAAAAAAAAAAAAAAAAAAAAAAAAAeAAMAAAAAAAAAAAAAAAAAHAAAHwAAAAACAAAPABQAAAAAAAAAAAAA - AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQACQAAAAAABAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA - AAAAAAAAAAAAAAAAAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAADAAAAAAAAAAAAAAAAAAATAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAoAHgAAAAAAAAAAAAAAAAAAAwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAdBQAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAEbAAAAAAAAAAAAAAAAAAAAAAACDwAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAA0WAAAUAQAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAA - AAAAAAAAAAAGAAAAAAAAABMAAAYAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAFxIABwIAAAAA - AAAAAAAAAAAAAAAAHQAAAAAAAAADBQAAAAAAAAAAAAAAAAAQAQAAAAAKAAAAAAAAAAAAAAAAAAAAAAAA - AgAAAAAAAAAAAAAAAAAAAAAEDwAAAAAAAB0JAAAAAAAAAAAAAAAAABEAAAAAAAALAAAAAAAAAAAAAAAA - AAAAAwAfAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAFwAaAAAAAAAfAAAACQAAAAAAAAAAAAAAAAAAAAAJ - ABQAAAAAAAkAFwAAAAAAAAAAAAAAAAAAAAAAAhQaBAYAAAAADAAAAAAAAQAAFgAFAAAAAAAADQAMAAAA - AAAAAAABAAAAAAAFABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCwAAAAAAAAAAAB8A - AAAAAAAAAAANAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAACgAAAAAA - AAAAAAAcAAAAAAAAABIAAQ0LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABgAA - AAAAAAAAAAEBEAAAAAAAAAAAABsSExwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// - ///////////////////////////////////////H/4P//////8f/Cf///g//x/48///95//H/H5///vz - /8f8fj////P/x/z/P///5//H+P8////H/8f4/x//+A+fx/j/H//g/5/H+P8f/+P/n8f4/x//x/+fx/j/ - H//P/5/H/P8f/8//n8f8/x//z/+fx/x+P//P/5/H/n4//8//n8f/PD4Hz/+fz/+MfAHP/5/P/+D4+c// - j4//w/j+x/uPj/+P+f/n+Qcf/z/5/+f8EB/+f/n/4/44f/7+eP/xz////vw8H/gP///+eH4f+R////4w - fHH7/////wH88f//n///7/zx//+f/////Pn//5/////8+f//n/////wj5/+f/////gPD/5//////z8P/ - n///////w/+QH//9///D/4OP//Bx/+P/j8f/4bD/4/+fx//D0v/n/5/n/8fH//f/n+f/z8f/9/+f5//P - 5//z/5/H/8/n/+v/n8f/z+f/6f+fz//P5//s/5+f/8/j/8z/mD//z8P/3n+ZP//Pw/+ef5+f/+fD/58/ - n4//95H3Pz+Pj//4OfY/H8+P////8H8fx5/////wf4/gP/////j/j/h///////////////////////// - /////////////////////////////ygAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAABQUFAAkJCQANDQ0AERERABUVFQAZGRkAHR0dACEhIQAlJSUAKSkpAC0tLQAyMjIANjY2ADk5 - OQA9PT0AQkJCAEZGRgBISEgATU1NAFFRUQBWVlYAWVlZAF1dXQBgYGAAZWVlAGlpaQBubm4AcXFxAHV1 - dQB5eXkAfHx8AAAAAAAALC8AAEtQAABocAAAhpAAAKWwAADDzwAA4fAAEe//ADHx/wBR8/8AcfX/AJH3 - /wCx+f8A0fv/AP///wAAAAAAAC8hAABQNwAAcEwAAJBjAACweQAAz48AAPCmABH/tAAx/74AUf/IAHH/ - 0wCR/9wAsf/lANH/8AD///8AAAAAAAAvDgAAUBgAAHAiAACQLAAAsDYAAM9AAADwSgAR/1sAMf9xAFH/ - hwBx/50Akf+yALH/yQDR/98A////AAAAAAACLwAABFAAAAZwAAAIkAAACrAAAAvPAAAO8AAAIP8SAD3/ - MQBb/1EAef9xAJj/kQC1/7EA1P/RAP///wAAAAAAFC8AACJQAAAwcAAAPZAAAEywAABZzwAAZ/AAAHj/ - EQCK/zEAnP9RAK7/cQDA/5EA0v+xAOT/0QD///8AAAAAACYvAABAUAAAWnAAAHSQAACOsAAAqc8AAMLw - AADR/xEA2P8xAN7/UQDj/3EA6f+RAO//sQD2/9EA////AAAAAAAvJgAAUEEAAHBbAACQdAAAsI4AAM+p - AADwwwAA/9IRAP/YMQD/3VEA/+RxAP/qkQD/8LEA//bRAP///wAAAAAALxQAAFAiAABwMAAAkD4AALBN - AADPWwAA8GkAAP95EQD/ijEA/51RAP+vcQD/wZEA/9KxAP/l0QD///8AAAAAAC8DAABQBAAAcAYAAJAJ - AACwCgAAzwwAAPAOAAD/IBIA/z4xAP9cUQD/enEA/5eRAP+2sQD/1NEA////AAAAAAAvAA4AUAAXAHAA - IQCQACsAsAA2AM8AQADwAEkA/xFaAP8xcAD/UYYA/3GcAP+RsgD/scgA/9HfAP///wAAAAAALwAgAFAA - NgBwAEwAkABiALAAeADPAI4A8ACkAP8RswD/Mb4A/1HHAP9x0QD/kdwA/7HlAP/R8AD///8AAAAAACwA - LwBLAFAAaQBwAIcAkAClALAAxADPAOEA8ADwEf8A8jH/APRR/wD2cf8A95H/APmx/wD70f8A////AAAA - AAAbAC8ALQBQAD8AcABSAJAAYwCwAHYAzwCIAPAAmRH/AKYx/wC0Uf8AwnH/AM+R/wDcsf8A69H/AP// - /wAAAAAACAAvAA4AUAAVAHAAGwCQACEAsAAmAM8ALADwAD4R/wBYMf8AcVH/AIxx/wCmkf8Av7H/ANrR - /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAHAIECAoAAAAAAAAAAAAAAAAAAAAAAAAfCwoYAAAAAAAAAAAA - ABIAAAAAAAAAAAAXABwAAAADAAAAAAAAAAAAAAAAAAAAABcTAAALCgAAAAAAAAAAABIAAAAAAAAAAAAA - EgAAAAAWCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAABEAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAIEAAAAAAAAABMAAAAAAAAAAAAAAAAAAAAA - AAAGDgAAAAAAAAAAABIAAAAAAAAAAAAOAAAAAAAABAUAAAAAAAAAAAAAAAAAFwMAAQQXAAAAAAMZAAAA - ABIAAAAAAAAAAAATAAAAAAAABgAAAAAAAAAAAAAAAAANABMAAAAAAAAAAAAYAAAAABIAAAAAAAAAAAAT - AAAAAAAAAwAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAYAAAAABIAAAAAAAAAAAIMAAAAAAAAAAAAAAAA - AAAAAAAAAB0AAAAAAAAAAAAAAAAYAAAAABIAAAAAAAAAABIBAAAAAAAAAAEAAAAAAAAAAAAAABQAAAAA - AAAAAAAAAAAYAAAAABIAAAAAAAAAAAABAAAAAAAAAAwAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAYAAAA - ABIAAAAAAAAAAAAcAgAAAAAJAAAAAAAAAB8AAAAAABEAAAAAAAAAAAAAAAAYAAAAABEAAAAAAAAAAAAA - GwUAAAAACgAAAAADAAEBAR4AABYAAAAAAAAAAAAAAAAYAAAAAA8AAAAAAAAAAAAAAAAJBwAJAAAAAAMB - AAAAAAkAAB8AAAAAAAAAAAAAAAAXAAAAAAcAAAAAAAAAAAAAABIAAhwAAAAAAAAZAAAAAAAXAAAAAAAA - AAAAABkAHAAEAAAAAAAGAAAAAAAAAAAACAQfAAAAAAAAHwAAAAAAAAAAAAAEDAAAAAAAAA4YAwASAxcY - AwIAAAAAAAAAAAAZCwAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAYDwAAABIOGQAAAAAAAAAAAAAG - AAAAAAAFAQAAAAMEAAAAAAAAAAAAEwEAABAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAoAAAAAAAAG - AAAAAAAAAAAAAAYJBQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAaBwAACwAAGgAAAAACCwAAHgUAAAAAABAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgMAAQsAAAAAAA8AAAAACQAAAAAAAAAAAAAAAAAAAAAdAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAADwAAAAAAAAAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC - AxYVAxQAAAAIBQAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwcHGgAAAAAAAAAA - AAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbHwgD - BRQAAAAAAAAAAAAAAAAAABgZAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAABEgAAAAgDAAAAAAAAAAAA - AAAAAAENBwAABgAZAAAAAAAAAAAEAAAAAAAAAAAAAAAVAAAAAAAAGQAAAAAAAAAAAAACAQAAAAsAAAAZ - AAAAAAAAAAAWAgAAAAAAAAAAAAAdAAAAAAABCwAAAAAAAAAAAB8AGQAAAAABAgAAAAAAAAAAAAAABgAA - AAAAAAAAAAAdAAAAAAACCQAAAAAAAAAAAA8AAAAAAAAADAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAdAAAA - AAABEAAAAAAAAAAAAAgAAAAAAAAFEgAAAAAAAAAAAAAAGRAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAA - AAkCAAAAAAAGBQAAAAAAAAAAAAAMAAoAAAAAAAAAAAAdAAAAAAsPAAAAAAAAAAAAABEBAAAAAAACAAAA - AAAAAAAAAAAKAAAJAAAAAAAAAAAdAAkVDxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgbAAAE - AAAAAAAAAAAdAAwZBR0AAAAAAAAAAAAAAAACAAAAAB0HARgAAAAAAAAAAAEAAAAaBAAAAAAAAAAcAAAA - AAAAAAAAAAAAAAAAAAAeDwAAAAQADAkAAAAAAAAAFAcAAAAAABwAAAAAAAAVAAAAAAATAAAAAAAAAAAA - AAAAFhIAChMAGgEAAAAADQAAAB8AAAAACAMAAAAAAAgDAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAkBBAAAAAAAGQAAAAAAAAACDgAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAA - AAAPAAAAAAAAEAMBCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////////n - ///8H//4f+f///jv//M/5///+ef//7/n///z9///v+f///Pz//8/5///8/P/4Hnn///z8//H+ef///Pz - /8/55///8/P/n/nn///z8/+f+ef///vz/5/55///+efvn/nn///854Gf+ef///8PPZ/55////h8+39Hn - ///8fn/PwA////n/P+/nH///++c/5n/////7x4/wf/////mHmff//////B85//n//////zn/+f////// - Pf/5//////+Bz/n//////8PP+f///////8/4D////89/z/jn////hj/P+fP///86v8/58////jz/7/nz - ///+fP/v+fP///58/+f59////nz/1/nn///+fP/b+Q////98/5v5D////3h/ufnv////On88+ef///+S - ezz55//////4fPzP//////j+fh///////f//////////////////////////////////////KAAAACAA - AABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQUACgoKAA0NDQAQEBAAFRUVABkZ - GQAdHR0AISEhACUlJQAoKCgALi4uADExMQA1NTUAOTk5AD09PQBAQEAARUVFAEpKSgBNTU0AUVFRAFZW - VgBYWFgAXV1dAGFhYQBmZmYAampqAGxsbABycnIAdnZ2AHp6egB+fn4AAAAAAAAsLwAAS1AAAGhwAACG - kAAApbAAAMPPAADh8AAR7/8AMfH/AFHz/wBx9f8Akff/ALH5/wDR+/8A////AAAAAAAALyEAAFA3AABw - TAAAkGMAALB5AADPjwAA8KYAEf+0ADH/vgBR/8gAcf/TAJH/3ACx/+UA0f/wAP///wAAAAAAAC8OAABQ - GAAAcCIAAJAsAACwNgAAz0AAAPBKABH/WwAx/3EAUf+HAHH/nQCR/7IAsf/JANH/3wD///8AAAAAAAIv - AAAEUAAABnAAAAiQAAAKsAAAC88AAA7wAAAg/xIAPf8xAFv/UQB5/3EAmP+RALX/sQDU/9EA////AAAA - AAAULwAAIlAAADBwAAA9kAAATLAAAFnPAABn8AAAeP8RAIr/MQCc/1EArv9xAMD/kQDS/7EA5P/RAP// - /wAAAAAAJi8AAEBQAABacAAAdJAAAI6wAACpzwAAwvAAANH/EQDY/zEA3v9RAOP/cQDp/5EA7/+xAPb/ - 0QD///8AAAAAAC8mAABQQQAAcFsAAJB0AACwjgAAz6kAAPDDAAD/0hEA/9gxAP/dUQD/5HEA/+qRAP/w - sQD/9tEA////AAAAAAAvFAAAUCIAAHAwAACQPgAAsE0AAM9bAADwaQAA/3kRAP+KMQD/nVEA/69xAP/B - kQD/0rEA/+XRAP///wAAAAAALwMAAFAEAABwBgAAkAkAALAKAADPDAAA8A4AAP8gEgD/PjEA/1xRAP96 - cQD/l5EA/7axAP/U0QD///8AAAAAAC8ADgBQABcAcAAhAJAAKwCwADYAzwBAAPAASQD/EVoA/zFwAP9R - hgD/cZwA/5GyAP+xyAD/0d8A////AAAAAAAvACAAUAA2AHAATACQAGIAsAB4AM8AjgDwAKQA/xGzAP8x - vgD/UccA/3HRAP+R3AD/seUA/9HwAP///wAAAAAALAAvAEsAUABpAHAAhwCQAKUAsADEAM8A4QDwAPAR - /wDyMf8A9FH/APZx/wD3kf8A+bH/APvR/wD///8AAAAAABsALwAtAFAAPwBwAFIAkABjALAAdgDPAIgA - 8ACZEf8ApjH/ALRR/wDCcf8Az5H/ANyx/wDr0f8A////AAAAAAAIAC8ADgBQABUAcAAbAJAAIQCwACYA - zwAsAPAAPhH/AFgx/wBxUf8AjHH/AKaR/wC/sf8A2tH/AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAABQAADgAAAAAAAAAAAAAAEQAPAAAAAAAAAAAAAAAAAAYAAAAAFgAAAAAA - AAAAAAAAAAAMAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAGRkAAAAAAAAAAAAAAAAKAAAAAAMA - AAAAAAAAAAALBxMAAAAXEQAAAAAAAAAAAA0AAAAAAwAAAAAAAAAADhgAAAAAABYQAAAAAAAAAAAABgAA - AAAAAAAAAAAAAAAAAAAAAAAAFhAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAAAAA - AAAMAAAUCAAAABgVAAAAAAAAAAAAABYQAAAAAAAAAAAAAAARFQQAAAABHAAWAAAAAAAAAAAAFhAAAAAA - AAAAAAAAAAMXAAAAGBQAAAAAAAwAAAAAAAAOAgAAFQoAAAAAAAAQAAAAAAAXFgAAAAAAAA0AAAAAFgwA - FgoUAAAAAAAAGAAAAAwNAAADHwAAAAAAGA8ZCQAAAAAAAAAAAAAAAAAAGwARAB4AABEMAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAERQAAAAAAAAABhcAAAAAAAAAABwTAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAA - AAAAAAAAHBMAAAAAAAAAAAAAAAAAAAAAABcFDwgAABUTAAAAAAAcEwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAACQcAAAAAABwSABcbAAAAAAAAAAAAGhAAAB0AAAAAAAAOCQAAAAAAHAQAAAADAAAAAAAAABcIAAAA - BBkAAAAAAAASAAAAAAAcEwAAABEeAAAAAAAAAQAAAAYXAAAAAAAAABYAAAAAABwTAAAAFBwAAAAAAAAA - AAAAFgAAAAAAAAAADQAAAAAAHBMAAAAKAAAAAAAAAAEAAAAYFQAAAAAAABsAFwAAAAAcEwAAABUAAAAA - AAAAAQAAAA0GAAAAAAAAEgARAAAAABwTAA4KAAAAAAAAAAAXAAAACQIAAAAAAB8AAAAOAAAAHRIAABwW - AAAAAAAAAAATABEADwAAAAAABAAAAAQAAAAABQAAAA0AAAAAAAAAAAAAAAAAAAAAAwMaAAAAExMAAAAX - EAAKAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AHFxcRsbGwAAAAgICEdHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAABsbGwAAABUVFXFxcQAAADs7OwICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwYGBhsbGwICAgUFBQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAABkZGQAAADMzMwAAAAAAAAAAAAAAAF9fXwEBAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAAAAAA - AAAAAAAAABsbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+ - fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXAAAAA4ODgAAAAAAAAAAAAAAAAAAAAAAABgYGA0N - DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AHx8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRkZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAHp6egAAAAAAAAAAAAAA - AAAAAAAAAHx8fAAAAG1tbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlZWQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEdHRwAAABwcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhYWAAAABsb - GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAB0dHQAAAElJSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWFgAAAHJycgAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwsLAQEBAAAAAAA - AAAAAAAAADs7OwAAAAAAAAAAAAAAAAAAABAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+ - fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHBwAAAGNjYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEh - IQAAAEVFRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwAA - AAAAABISEmZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAG5ubgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAB4eHgAAACoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAFlZWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWFgAAAGdnZwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAB8fHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAD09PQAAACoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEJCQgAAAEtLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAAACUlJQAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAABYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo6OgAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+ - fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAGJiYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG9vbwAAAEVFRQAAAAAAAAAAAAAA - AAAAAAAAAFBQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpKQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAA0NDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAACIiIgQEBAAAAAAAAAAAAAAAAGJiYgAAAAAAAH19fQAAAAAAAAAAAAAAAAAAADExMQAA - AAAAAAAAAAAAAA8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5OTgAAAE9PTwAAAAAAAAEBAQAAADo6OgAAAAAAAAAAAAAA - AAAAAAcHBwAAAAAAACYmJk9PTzo6OgYGBgAAAGlpaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUVFQAAAAAAAAAAAD8/PwAA - AAAAAAAAAAAAAAAAAC4uLgAAAAQEBAAAAAAAAAAAAAAAAAAAAHZ2dgQEBAAAAAAAAAAAAAgICAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH19fQAAAAAAAAAAAAAAAAAA - AHFxcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHgAAAAAA - AA8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZ2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHwAA - AAAAADo6OgAAAGdnZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAAAAAAB8fHwAA - AAAAAAAAAAAAAAAAAB4eHgAAABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEBAQAAABcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElJSWNjYwAAAEFB - QQAAAAAAAAcHBysrKwAAAAAAAAAAAEdHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAEBARAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAABQUFAAAAAAAAAAAAD09PQAAAA0NDQAAAAAAAAAAAAAAAAICAnR0dAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAACEhIRcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHV1dQAAACQkJAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAGtra0xMTH5+fgAAAAAAAAAAAHt7e09PT09PT3h4eAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAA - AAAAAAAAAAAAAAAAACEhIQAAAB8fHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/ - PwAAAC0tLQAAAAAAAAAAACMjI2pqagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAwMDAAAAAAAAFJSUgAAAAAAAAAAAAAAABAQEAAAAAgICBcXFxgYGAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAFdXVwAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAVRU - VAAAAAAAAAAAAAAAAB0dHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAAAAAAAAAgICAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2NhYWFgAAAHFxcUpKSkBAQAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAE9PTwAAAF1dXQAAAAAAABYWFgAAAAAAAAAAAFxcXAAAAAAAAAAAAAAAAAAAADg4OAAAAB0d - HQAAAAAAAAAAAH5+fgAAABQUFAAAAAAAAAAAAAAAAAAAAAAAAE1NTQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQUAEBAQAAAAAAAAAAAAAAABsbGwAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHt7ewAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAUFBSwsLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAMD - A1hYWAAAAG5ubhcXFwAAAAAAAAAAAAAAAAAAAAAAAAYGBgEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEpKSgAAAAAAAAAAAAAAAAEBAWxsbAAAAAAAAAAAAAAAAHt7ewAAAAAAAGtrawAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ubn9/fwAAAAAAAAAAAAAAAAAAAAAAAE5OTgAAAAAA - AD8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAERERAAAAAAAADAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRk - ZAYGBgAAAAAAAAAAAAMDA0xMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHZ2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAFtbWwAAAAAAAD09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAsLCw8PD3V1dQAAAAAAAAAAAC8vLwAAABgYGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0dHQAAAAAAAAAAAAQEBAAAAAAAAAAAAFhYWAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAAAAAAAAAAAAAAAAAAAAAABwcHAAAAF5eXgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsbGwAAAAAAAFlZWQAAAAAAAAkJCQAAAAAAAAMD - AwAAAAEBAVtbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHh4eAAAAA0N - DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcAAAAAAAAH5+fgAAAAAAAAAA - AAAAAAkJCQAAAAAAAD4+PgAAAFFRUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PDwAAACUl - JQAAAAAAAAAAAAAAAAAAABAQEAUFBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWFiEhIQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHR0dAAAABwcHAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4O - DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5OTgAAABMTEwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKgAAAHp6 - egAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgAA - AHV1dRMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAC0tLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAABUVFQAAAAAAAAQEBG9vbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAoKCj4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNTUwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAADU1NVhYWAAAAAAAAFNTUwUFBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAnJycgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABgYGAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1NTQAAAAAAABkZGQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEdHRwAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5eXkpKSgAAAB8fHwsLCwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDBUVFQEB - AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENDQwQEBAAAAAAAAAAAAAAAACkpKQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCgAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQED8/PwAAAAAAAAAAAAAA - AAAAAAAAAHZ2diQkJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZGRgAAAAAA - AAAAAAAAAAAAAAAAAC8vLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAwMDAAAAH9/fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB - AQAAAAAAAAAAAAAAABQUFA8PDwAAAF1dXQAAAGpqagAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAACUl - JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcnJwAAAFJSUgAA - AAAAAAAAAAAAAAAAACUlJQAAAFxcXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAkJCVJSUmhoaBAQEBoaGgAAAAAAAAAAAAAAADAwMAAAAAAAAAAAAAAAAAAAAAQE - BAAAAAAAAFlZWQAAABcXFwAAAAAAAAAAAAAAAAAAAAAAADc3NwAAADMzMwAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAcHBwAAAAAAAAAAAAAAAAAAABYWFgAAAHFxcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABYWFi8vLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/fwAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAADc3NwAAACoqKgAAAAAAAAAAAAAAAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHgAAAAAAAAAAACoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAHFxcQAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwAAAAQEBDQ0NC4uLgEBAQICAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAABsbGwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAQEBAQEBEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxsbEhISE1NTXNz - cwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////// - /8f/g///////x/8J///+D//H/jz///3n/8f8fn//+/P/x/x+P///8//H/P8////n/8f4/z///8f/x/j/ - H//4D5/H+P8f/+D/n8f4/x//4/+fx/j/H//H/5/H+P8f/8//n8f8/x//z/+fx/z/H//P/5/H/H4//8// - n8f+fj//z/+fx/88PgfP/5/P/4x8Ac//n8//4Pj5z/+Pj//D+P7H+4+P/4/5/+f5Bx//P/n/5/wQH/5/ - +f/j/jh//v54//HP///+/Dwf+A////54fh/5H////jB8cfv/////Afzx//+f///v/PH//5/////8+f// - n/////z5//+f/////CPn/5/////+A8P/n//////Pw/+f///////D/5Af//3//8P/g4//8HH/4/+Px//h - sP/j/5/H/8PS/+f/n+f/x8f/9/+f5//Px//3/5/n/8/n//P/n8f/z+f/6/+fx//P5//p/5/P/8/n/+z/ - n5//z+P/zP+YP//Pw//ef5k//8/D/55/n5//58P/nz+fj//3kfc/P4+P//g59j8fz4/////wfx/Hn/// - //B/j+A/////+P+P+H//////////////////////////////////////////////////////KAAAADAA - AABgAAAAAQAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAEB - AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcAgICBMTEyIiIikpKQAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHt7ey0tLSgoKGJiYgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1dXQEBAXNzcwAA - AAAAAAAAAAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5e - Xk1NTQAAAAAAAC8vLyoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEBAUlJSQAAAAAAAAAAAAAAAFlZWSoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEZGRgEBAQAAAAAAAAAAAAAAAAAAAAAAAAEB - AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAoK - ChAQEAAAAAAAAAAAAAAAAAAAAAAAAAICAk9PTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGDg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAEB - AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBATs7OwAAAAAAAAAAAAAAAAAAAAAAABISEhYWFgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXA8PDwEBAQYGBhISEl5eXgAAAAAAAAAAAAAA - AAwMDGdnZwAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAU9PTwAAAAAAAAAA - AAAAAAAAAAAAABkZGQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc3NwEBAUxM - TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAWBgYAAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAA - AAAAAAAAAAAAAAEBAU9PTwAAAAAAAAAAAAAAAAAAAAAAAA4ODgEBAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAEBAUhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAWBgYAAAAAAA - AAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCTIyMgAAAAAAAAAAAAAAAAAAAAAAAAEB - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAEBAT8/PwAAAAAAAAAAAAAAAAAAAAAAAENDQwwMDAYGBiQkJAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHl5eQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// - ////////////////////5////B//+H/n///47//zP+f///nn//+/5///8/f//7/n///z8///P+f///Pz - /+B55///8/P/x/nn///z8//P+ef///Pz/5/55///8/P/n/nn///78/+f+ef///nn75/55////OeBn/nn - ////Dz2f+ef///4fPt/R5////H5/z8AP///5/z/v5x////vnP+Z/////+8eP8H/////5h5n3//////wf - Of/5//////85//n//////z3/+f//////gc/5///////Dz/n////////P+A/////Pf8/45////4Y/z/nz - ////Or/P+fP///48/+/58////nz/7/nz///+fP/n+ff///58/9f55////nz/2/kP////fP+b+Q////94 - f7n57////zp/PPnn////kns8+ef/////+Hz8z//////4/n4f//////3///////////////////////// - /////////////ygAAAAgAAAAQAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAAAAAAAA7 - OzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREQAAAA+Pj4AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAABYWFgAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH - BwcAAAAAAAAAAAAAAAAFBQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmZmZmYA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysAAAAAAAAAAAAAAAAODg4AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAuLi4fHx9OTk4AAAAAAAAAAABeXl5GRkYAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAA1NTUAAAAAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODhgYGAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAowAAAKMAAACjAAAAowAA - AKMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABWAAAArAAA - AOYAAAD/AAAA/wAAAP4AAADgAAAAoQAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABPAAAA3QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - ALwAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHAAAAC5AAAA6wAAAP0AAAD6AAAA5QAAALIAAABoAAAACwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAlgAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPgAAADiAAAA+AAAAP8AAAD/AAAA/wAAAPgAAABhAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAGwAAADzAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAAVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABAAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAK8AAAA/AAAABQAAAAAAAAADAAAARAAA - AM4AAAD/AAAA/wAAAP8AAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACLAAAA/wAAAP8AAAD/AAAA/wAAAOoAAADGAAAAzwAAAPoAAAD/AAAA/wAA - AP8AAAD/AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAAA/wAAAP8AAAD/AAAA/wAA - APUAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAALAAAAD/AAAA/wAAAP4AAABlAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAP8AAAD/AAAA/gAA - AKYAAAA4AAAAAQAAAAAAAAAAAAAAEgAAAJcAAAD/AAAA/wAAAP8AAAD/AAAASQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAYAAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABAAAAMwAAAD/AAAA/wAAAPkAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAMAAADWAAAA/wAAAO4AAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AJMAAAD/AAAA/wAAAP8AAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAADtAAAA/wAAAP8AAAD/AAAA/wAA - AHEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAPoAAAD/AAAA/wAA - AMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAP8AAADzAAAAMAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAO4AAAD/AAAA/wAAAP8AAAAlAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAjwAAAP8AAAD/AAAA/wAAAP8AAADKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAApQAAAP8AAAD/AAAA/wAAAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAGAAAA2gAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAArAAAAP8AAAD/AAAA/wAAAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAD2AAAA/wAAAP8AAAD/AAAA/wAA - AEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAA/wAA - AP8AAAD/AAAA4QAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAA/wAAAP8AAAD/AAAAVwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAcgAAAP8AAAD/AAAA/wAAAP8AAADTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADaAAAA/wAAAP8AAAD/AAAAYQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAANIAAAD/AAAA/wAAAP8AAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJAAAA/wAAAP8AAAD/AAAA/wAA - AHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AJAAAAD/AAAA/wAAAP8AAADHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAA/wAAAP8AAAD/AAAA/AAA - ABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAFwAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAP8AAAD/AAAA/wAAAP8AAAApAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABAAAAMsAAAD/AAAA/wAAAP8AAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAA/wAAAP8AAAD/AAAA/wAA - AOIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAjAAAA/wAAAP8AAAD/AAAA/wAAAHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACvAAAA/wAAAP8AAAD/AAAA/gAA - AEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAIwAAAD/AAAA/wAAAP8AAAD/AAAArQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAD2AAAA/wAAAP8AAAD/AAAAxAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAA - ACwAAAB2AAAA4QAAAP8AAAD/AAAA/wAAAP8AAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtgAAAP8AAAD/AAAA/wAA - AP8AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAANoAAAD/AAAA/wAAAP8AAAD4AAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAA - AIUAAADJAAAA8QAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAlwAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiwAAAN8AAADfAAAA3wAAAN8AAADfAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAADUAAAA/wAAAP8AAAD/AAAA/wAAAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzQAAAP8AAAD/AAAA/wAA - AP8AAAA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAKcAAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAAyQAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAD/AAAA/wAA - AP8AAAD/AAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAADAAAAA/wAAAP8AAAD/AAAA/wAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAADiAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADiAAAAzgAAAMAAAACnAAAAdgAAACwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA9wAAAP8AAAD/AAAA/wAAAP8AAAAxAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALoAAAD/AAAA/wAA - AP8AAAD/AAAAhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAGAAAA0wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAALgAAABYAAAAEQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAngAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9AAAA/wAA - AP8AAAD/AAAA/wAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAP8AAAD/AAAA/wAAAP8AAACkAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAANEAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAD/AAAA/wAAAP8AAAD/AAAAIQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAA/wAA - AP8AAAD/AAAA/wAAALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAKAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAC+AAAACwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4gAA - AP8AAAD/AAAA/wAAAP8AAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANcAAAD/AAAA/wAAAP8AAAD/AAAAwAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAAD/AAAA/wAA - AP8AAAD/AAAA6AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAA/wAAAP8AAAD/AAAA/wAAADkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5wAA - AP8AAAD/AAAA/wAAAP8AAADDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAArQAAAP8AAAD/AAAA/wAAAP8AAABuAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AJgAAAD/AAAA/wAAAP8AAAD/AAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAD6AAAA/wAAAP8AAAD/AAAA/wAAALwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADxAAAA/wAA - AP8AAAD/AAAA+AAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAP8AAAD/AAAA/wAAAP8AAACBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAAAP8AAAD/AAAA/wAAAP8AAAC7AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAbAAAA/gAAAP8AAAD/AAAA/wAAALIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACZAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAA/wAA - AP8AAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFAAAA/wAAAP8AAAD/AAAA8wAA - AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AG4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIAAAD/AAAA/wAAAP8AAAD/AAAAVAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAGQAAAD/AAAA/wAAAP8AAAD/AAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAVQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjQAA - AP8AAAD/AAAA/wAAAP8AAAA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAOgAAAD/AAAA/wAA - AP8AAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAADhAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbAAAA/wAAAP8AAAD/AAAA/wAAACEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAbQAAAP8AAAD/AAAA/wAAAP4AAAAzAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA4gAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AKMAAAD/AAAA/wAAAP8AAAD/AAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA0QAA - AP8AAAD/AAAA/wAAALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACLAAAA/wAAAP8AAAD/AAAA/wAAAP8AAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAP8AAAD/AAAA/wAAAP8AAAAWAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAA+AAAAP8AAAD/AAAA/wAAAGcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAOgAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACiAAAA/wAAAP8AAAD/AAAA/wAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABkAAAA/wAAAP8AAAD/AAAA+AAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABpAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAGcAAACSAAAArQAAALoAAAC5AAAApQAAAHcAAAAtAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAAAD/AAAA/wAAAP8AAAD/AAAAIAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkAAAD/AAAA/wAA - AP8AAAD/AAAA/gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA/wAAAP8AAAD/AAAA7wAA - ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAZQAAANUAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADEAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAjAAAAP8AAAD/AAAA/wAAAP8AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAngAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAnwAAAP8AAAD/AAAA/wAAAP8AAAD4AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAB6AAAA/gAAAP8AAAD/AAAA9QAAAFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACNAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAHwAAAMsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD8AAAAggAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAA/wAAAP8AAAD/AAAA/wAA - AEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrAAAA/wAA - AP8AAAD/AAAA/wAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAA8QAA - AP8AAAD/AAAA/wAAAKwAAAAfAAAAAAAAAAAAAAAAAAAAZQAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA5QAA - ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAADkAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArAAAAAUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAF4AAAD/AAAA/wAAAP8AAAD/AAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAD/AAAA/wAAAP8AAAD/AAAA2wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAtgAAAP8AAAD/AAAA/wAAAPkAAACbAAAANQAA - AIAAAAD9AAAA/wAAAP8AAAD/AAAA/wAAAPgAAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAFAAAAxgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANoAAACMAAAAZwAAAF0AAABzAAAAowAA - AOcAAAD/AAAA/wAAAP8AAAD/AAAAqAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAOgAAAP8AAAD/AAAA/wAA - AP8AAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1wAA - AP8AAAD/AAAA/wAAAP8AAADCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAARgAAAMMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADyAAAARAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - APIAAABgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAEoAAADFAAAA/wAAAP8AAAD/AAAAdAAA - AAAAAAAAAAAAAAAAAAAAAAAUAAAA/wAAAP8AAAD/AAAA/wAAAK0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAJwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAKwAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA3QAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAADAAAA3wAAAP8AAAD/AAAA/wAAAP8AAADwAAAALgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABhAAAA8AAAAP8AAAD3AAAAKQAAAAAAAAAAAAAAAAAAAAAAAADhAAAA/wAA - AP8AAAD/AAAA3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAAZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAADgAAAJAAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAJsAAAANAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAA2QAA - AP8AAADIAAAAAwAAAAAAAAAAAAAAAAAAAK0AAAD/AAAA/wAAAP8AAAD+AAAAEgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeAAAA8QAA - AAcAAAAAAAAAAAAAAAAAAAAAAAAApgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAiAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAA/wAAAP8AAAD/AAAA/wAAAP4AAAAhAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAADlAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAMUAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAegAAAP8AAAD/AAAA/wAAAP8AAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAxwAAAPMAAAAgAAAAAAAAAAAAAAAAAAAAawAA - AP8AAAD/AAAA/wAAAP8AAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAD/AAAATAAAAAAAAAAAAAAAAAAAAAAAAADMAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD6AAAARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAA - APUAAAD/AAAA/wAAAP8AAAD/AAAAwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABxAAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMUAAABJAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfAAAA/wAAAP8AAAD/AAAA/wAA - AIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAMAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAA/wAAAP8AAAD/AAAA/wAAAJUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAA - AP8AAADDAAAAAgAAAAAAAAAAAAAAKQAAAP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADzAAAAYAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8AAABBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAA - AKkAAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAALEAAAD/AAAA/wAAAP8AAAD/AAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAADKAAAA/wAAAP8AAAD/AAAA6QAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA/QAAAP8AAACrAAAAMQAAAEAAAADTAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAADlAAAA/wAAAP8AAAD/AAAAzwAAAHEAAAA7AAAAJgAAADwAAAB/AAAA8gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AE8AAAD+AAAA/wAAAP8AAAD/AAAA+gAAAJUAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAP8AAAD/AAAA/wAA - AP8AAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAAD/AAAA/wAAAP8AAAD/AAAAUgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACQAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2wAAABgAAADfAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKwAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAA6gAAAP8AAAD/AAAA/wAAAMIAAAAnAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACwAAAA/wAAAP8AAAD/AAAA/wAAAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAACQAAAOcAAAD/AAAA/wAAAP8AAADQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAACyAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPMAAAA8AAAAAAAAAB4AAADOAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPoAAAB/AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AIkAAAD/AAAA/wAAAP8AAACPAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4AAAD/AAAA/wAA - AP8AAAD/AAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAP8AAAD/AAAA/wAA - AP8AAAB1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAMAAAB6AAAA8QAAAP8AAAD/AAAA/wAAAP8AAADVAAAAOAAAAAAAAAAAAAAAAAAA - AAcAAAByAAAA4gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOsAAACWAAAAIgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAA8gAAAP8AAAD/AAAApQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAACnAAAAzAAAAIUAAAAHAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAP8AAAD/AAAA/wAAAP8AAAD2AAAADwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAvwAAAP8AAAD/AAAA/wAAAPoAAABPAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAUAAA - AG4AAABhAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAALgAAAFgAAABtAAAAawAA - AFkAAAAvAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEkAAAD/AAAA/wAAAPgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAA2AAAA7QAAAP8AAAD/AAAA/wAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAA9AAA - AP8AAAD/AAAA/wAAAP8AAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAA5QAA - AP8AAAD/AAAA/wAAAPkAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAApgAAAM4AAACbAAAAEAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAP8AAAD/AAAAzgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAOwAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - ADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAA/wAAAP8AAAD/AAAA/wAAAP0AAAB5AAAABAAA - AAAAAAARAAAATgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAA7QAAAP8AAAD/AAAA/wAAAP4AAACZAAAAOAAA - ABAAAAAYAAAAZQAAAPEAAAD/AAAA/wAAAP8AAACqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACTAAAA/wAAAP8AAACyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAsAAADSAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAgAAADNAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADhAAAArQAAAPUAAAD/AAAAqAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAsAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - APwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAA/wAAAMYAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAArgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAABWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAADBAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD5AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAvAAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+QAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAbAAAAP8AAAD/AAAA+gAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AI0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+AAAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAABmAAAA4QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAbAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAE0AAAD+AAAA/wAAAP8AAADRAAAAzgAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAACXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAA/gAAAP8AAAD/AAAAngAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAACNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkAAADuAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA4gAAAAIAAAAAAAAAAAAAAA8AAACFAAAAsQAAAH8AAAAKAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAA3AAAAP8AAAD/AAAAqgAA - AAUAAAAAAAAACQAAADgAAABdAAAAewAAAH8AAAB+AAAAVwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACzAAAA/wAAAP8AAAD/AAAAkgAAAAsAAAAAAAAAAAAAAAAAAAAVAAAApwAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABBAAAA+QAAAP8AAAD/AAAA/wAAAP8AAAC7AAAAhwAAAKcAAAA0AAAAAAAA - AAAAAAAAAAAAvwAAAP8AAAD/AAAA/wAAAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABgAAADpAAAA/wAAAN8AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADvAAAA/wAA - AP8AAAD/AAAA7AAAAKcAAACSAAAAsgAAAPcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - ALwAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAOMAAAD/AAAA/wAA - AP8AAAD/AAAAjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADFAAAAagAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAH8AAAB/AAAAfwAAAH8AAABkAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAAB/AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABtAAAA/wAAAP8AAAD/AAAA/wAAANgAAAADAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAjQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAA - AP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AB0AAAC0AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPUAAACeAAAAIQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEAAAD/AAAA/wAA - AP8AAAD/AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnAAAA/wAAAP8AAAD/AAAA/wAA - AP8AAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAiAAAAMUAAADxAAAA/gAA - AP8AAAD4AAAA3QAAAKMAAABiAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA8wAAAP8AAAD/AAAA/wAAAP8AAAAtAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAKQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAA - AP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAP4AAAD/AAAA/wAAAP8AAAD+AAAABAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABBAAAA/wAAAP8AAAD/AAAA/wAAAP8AAABiAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7QAA - AP8AAAD/AAAA/wAAAP8AAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5AAAA/wAA - AP8AAAD/AAAA/wAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2AAAA/wAAAP8AAAD/AAAA/wAAAIkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADrAAAA/wAAAP8AAADYAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AGIAAAD/AAAA/wAAAP8AAAD/AAAA+QAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAA - AP8AAAD/AAAA/wAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAADCAAAA4AAA - AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAANYAAAD/AAAA/wAAAP8AAAD/AAAA9gAA - AH0AAAAiAAAAAAAAAAAAAAAIAAAAQAAAAKYAAAD/AAAA/wAAAP8AAADrAAAADwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAATAAAA6AAAAP8AAAD/AAAA/AAAADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAANQAAAPQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAA8gAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAD/AAAA/wAA - AP8AAAD/AAAAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAA - AMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAPIAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACvAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAA6AAAAP8AAAD/AAAA/wAAAP8AAAD5AAAADwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAMIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAAmwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAA - AP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AD4AAACfAAAA4QAAAP8AAAD/AAAA/wAAAP8AAADsAAAApQAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAB8AAAAmAAAAFAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAAkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAA - AP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAMAAAA6AAAAbgAAAI4AAACbAAAAmQAAAIwAAAByAAAAQgAA - AAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACgAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAA0AAACDAAAA6gAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9QAAAKMAAAAtAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAA - AP8AAAD/AAAA/wAAAMgAAAAyAAAA4AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPwAAACIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABMAAAAUAAAABAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAkQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAA5QAAAO8AAAD/AAAA/wAA - AP8AAADiAAAAngAAAHIAAABgAAAAZwAAAIUAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAACgAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAMgAAAKYAAADvAAAA/wAAAP8AAAD7AAAA0AAAAIAAAAAYAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAADgAAADVAAAA/gAAAPIAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ADMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADEAAAARwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABSAAAA8AAAAP8AAAD/AAAA/wAAAP8AAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAI4AAAD9AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAPAAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA7gAAAP8AAAD/AAAA/wAA - AP8AAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAPcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAbwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAA+wAAAP8AAAD/AAAA/wAA - APMAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAUAAACwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACGAAAAAAAA - AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAM0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAvgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ADIAAAD/AAAA/wAAAP8AAAD/AAAA9AAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACTAAAA/wAAAP8AAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - APQAAAC8AAAApQAAAMYAAAD9AAAA/wAAAP8AAABvAAAAAAAAAAAAAAALAAAA9QAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAD/AAAA/wAA - AP8AAAD/AAAAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEkAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACTAAAAFAAAAAAAAAAAAAAAAAAAACsAAADbAAAA/wAA - APsAAAA3AAAAAAAAAE4AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAAD/AAAAbQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAACYAAAD/AAAA/wAAAP8AAAD/AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8AAAD/AAAA/wAAAP8AAAD9AAAAEQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAagAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAD0AAAA/wAAANwAAAAJAAAAjQAAAP8AAAD/AAAA/wAA - AMkAAAAPAAAAKwAAAOEAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM4AAAD/AAAA/wAA - AP8AAADGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAA - AP8AAAD/AAAA/wAAAP8AAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AF4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AIIAAAD/AAAA/wAAAIQAAAC+AAAA/wAAAP8AAAD/AAAAPQAAAAAAAAAAAAAAagAAAMwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAAAP8AAAD/AAAA/wAAAJoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyAAAA/wAAAP8AAAD/AAAA/wAAAEUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAP8AAAD/AAAA/wAAAP8AAADuAAAADgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAPsAAAD/AAAA+AAAAPMAAAD/AAAA/wAA - AN8AAAAAAAAAAAAAAAAAAAApAAAA7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAA9wAA - AP8AAAD/AAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAA - AMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AKgAAAD/AAAA/wAAAP8AAAD/AAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ABwAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAwgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAoQAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAA/wAAAP8AAABOAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAP8AAAD/AAAA/wAAAP8AAABHAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAGgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAABtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AHAAAAD/AAAA/wAAAJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAA - AP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAC6AAAA/wAAAP8AAAD/AAAA/wAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACdAAAA/wAAAP8AAAD/AAAA/wAAAMcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAADcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkgAAAP8AAAD/AAAA9QAAABUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANcAAAD/AAAA/wAAAP8AAAD/AAAAGAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAD/AAAA/wAAAP8AAAD/AAAAfAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAPUAAAD/AAAA/wAA - AP8AAAD/AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAADBAAAA/wAAAP8AAAD/AAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAA - AP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAADAAAA9wAAAP8AAAD/AAAA/wAAAOsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA5gAAAP8AAAD/AAAA/wAAAP8AAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAvgAAAP8AAAD/AAAA/wAAAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAPUAAAD/AAAAqgAAAP8AAADzAAAAFgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAD/AAAA/wAAAP8AAAD/AAAApQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7AAAA/wAAAP8AAAD/AAAA/wAA - AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAA/wAA - AP8AAAD/AAAAzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAA8AAAA/wAAAO0AAAAfAAAA/AAAAP8AAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAA - AP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAegAAAP8AAAD/AAAA/wAAAP8AAABNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABAAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkAAAD/AAAA/wAAAP8AAAD5AAAACwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAAtAAAAAAAAAC3AAAA/wAA - APoAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADdAAAA/wAAAP8AAAD/AAAAygAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA/QAAAP8AAAD/AAAA/wAA - AO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAA - AP8AAAD/AAAA/wAAAP8AAABLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA2QAAAP8AAAB4AAAAAAAAAE0AAAD/AAAA/wAAALMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAA - AP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAaQAAAP8AAAD/AAAA/wAAAPYAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAADwAAAA/wAAAP8AAAD/AAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAA/wAAAP8AAAD/AAAA/wAAAI8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAAD/AAAA/wAAADgAAAAAAAAAAgAA - ANwAAAD/AAAA/wAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAADwAAAA/wAAAP8AAAD8AAAAVwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANcAAAD/AAAA/wAA - AP8AAADiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AIoAAAD/AAAA/wAAAP8AAAD/AAAAygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAkgAAAP8AAADzAAAABAAAAAAAAAAAAAAAcAAAAP8AAAD/AAAA1AAAAAQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQAAAAAAAAAAAAAAAAAA - AAAAAAAZAAAA2AAAAP8AAAD/AAAA+AAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAswAAAP8AAAD/AAAA/wAAAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArwAAAP8AAAD/AAAA/wAAAP8AAAD6AAAACQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAADtAAAA/wAAALcAAAAAAAAAAAAA - AAAAAAAOAAAA8gAAAP8AAAD/AAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAA - AAAAAAAEAAAAmwAAAPcAAAD+AAAA2QAAAI8AAAAdAAAAMAAAANwAAAD/AAAA/wAAANsAAAAzAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAA/wAA - AP8AAAD/AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAADdAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAYQAAAP8AAAD/AAAAcwAAAAAAAAAAAAAAAAAAAAAAAACSAAAA/wAAAP8AAADtAAAAEgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAFEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - APkAAAD4AAAA/wAAAPoAAACNAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAD/AAAA/wAAAP8AAAD/AAAACQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAA/wAAAP8AAAAuAAAAAAAA - AAAAAAAAAAAAAAAAACUAAAD9AAAA/wAAAP8AAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAA - AAAAAAAAAAAATgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAApQAAAAcAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA - APQAAAD/AAAA/wAAAP8AAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABDAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAQgAAAP8AAAD/AAAA5AAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALUAAAD/AAAA/wAA - APsAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAPAAAA6AAAAP8AAAD/AAAA/wAA - AO4AAAC6AAAA/wAAAP8AAAD/AAAA0wAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqgAAAP8AAAD/AAAA/wAAAFwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAADqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAA/wAAAP8AAACYAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAP8AAAD/AAAA/wAAALsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAA - AMgAAAAAAAAAAAAAAAAAAAAeAAAAgQAAAIcAAABRAAAABwAAAAAAAACEAAAA/wAAAP8AAAD/AAAA6QAA - ACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABKAAAA/wAAAP8AAAD/AAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA0AAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAAmAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAOAAAAP4AAAD/AAAA/wAAAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAA4AAA - AP8AAAD/AAAA/wAAAEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAADHAAAA/wAAAP8AAAD/AAAA2gAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADYAAAA/wAAAP8AAADmAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAAD/AAAA/wAAAP8AAACuAAAA/QAA - AP8AAAD/AAAA/wAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAA/wAAAP8AAADwAAAABgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAA/wAAAP8AAAD/AAAA1AAAAAMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAP8AAAD/AAAA/wAA - AP8AAADNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA/wAA - AP8AAAD/AAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAFYAAAD/AAAA/wAAAP8AAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAkgAAAP8AAAD/AAAA/wAAAEcAAADUAAAA/wAAAP8AAAD/AAAAmQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAARQAAAP8AAAD/AAAA/wAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AB0AAAD9AAAA/wAAAP8AAAD/AAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAkAAAA/wAAAP8AAAD/AAAA/wAAAN0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAPsAAAD/AAAA/wAAAP8AAADhAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMIAAAD/AAAA/wAA - AL4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAD1AAAA/wAAAP8AAADfAAAAAgAA - AJsAAAD/AAAA/wAAAP8AAADTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADUAAAA/wAAAP8AAAD/AAAARwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL0AAAD/AAAA/wAAAP8AAADgAAAABgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAD9AAAA/wAA - AP8AAAD/AAAA9gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0wAA - AP8AAAD/AAAA/wAAAP8AAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAPMAAAD/AAAA/wAAAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAsgAAAP8AAAD/AAAA/wAAAGYAAAAAAAAAYgAAAP8AAAD/AAAA/wAAAP0AAAAQAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWgAAAIsAAAAEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAdAAAAP8AAAD/AAAA/wAAAOUAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAXwAAAP8AAAD/AAAA/wAAAP8AAABqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANUAAAD/AAAA/wAAAP8AAAD/AAAAMwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAA/wAAAP8AAAD/AAAA/wAAAEMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA - APwAAAD/AAAA8wAAAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4AAAD/AAAA/wAAAP8AAADDAAAAAwAA - AAAAAAAoAAAA/wAAAP8AAAD/AAAA/wAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAADqAAAA/wAAAHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAD3AAAA/wAAAP8AAAD/AAAAhQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA+gAAAP8AAAD/AAAA/wAA - AOIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjgAA - AP8AAAD/AAAA/wAAAP8AAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AK4AAAD/AAAA/wAAAP8AAAD/AAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAPoAAAD/AAAA+QAAAIsAAAAtAAAAGQAA - AEYAAADAAAAA/wAAAP8AAAD/AAAA0wAAABcAAAAAAAAAAAAAAAEAAADtAAAA/wAAAP8AAAD/AAAAggAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAP0AAAD/AAAA7wAAABgAAAAAAAAAAAAA - AAAAAAANAAAA0wAAAP8AAAD/AAAA/wAAAPsAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAC5AAAA/wAAAP8AAAD/AAAA/wAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAAAA/gAAAP8AAAD/AAAA/wAAAOYAAAAKAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAP8AAAD/AAAA/wAAAP8AAAA4AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAARAAAAOIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAJwAAAANAAAAAAAA - AAAAAAAAAAAAAAAAALUAAAD/AAAA/wAAAP8AAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAADAAAA+AAAAP8AAAD/AAAAsAAAAAAAAAAAAAAACwAAALkAAAD/AAAA/wAAAP8AAAD/AAAApwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAAD/AAAA/wAA - AP8AAAD/AAAA0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACtAAAA/wAAAP8AAAD/AAAA/wAAAIsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAMAAADrAAAA/wAAAP8AAAD/AAAA9wAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHEAAADFAAAA6wAA - AOwAAADZAAAAugAAAHcAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAwAAAAMAAAADAAA - AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAA/wAAAP8AAAD/AAAApwAA - AHEAAADTAAAA/wAAAP8AAAD/AAAA/wAAAP0AAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAPQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAADsAAAA/wAAAP8AAAD/AAAA/QAA - AF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAP8AAAD/AAAA/wAAAP8AAACpAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAHYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAApQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAA - AP8AAAD/AAAA/wAAAP8AAACiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAEEAAAD3AAAA/wAAAP8AAAD/AAAA/AAAAIYAAAAJAAAAAAAAAAAAAAAAAAAAAAAA - ADQAAADpAAAA/wAAAP8AAAD/AAAA+QAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAPUAAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPIAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAA/wAAAP8AAAD/AAAA/wAAAPIAAAAGAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAADvAAAA/wAA - AP8AAAD/AAAA/wAAAPAAAACnAAAAhwAAAIwAAAC8AAAA/QAAAP8AAAD/AAAA/wAAAP8AAABmAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAZgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AIoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAADAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD6AAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAA5QAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAeQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABOAAAAuwAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD1AAAAoAAAACsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA8gAAAP8AAAD/AAAA/wAAAP8AAACTAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABiAAAA9wAAAPcAAAD3AAAA9wAAAPcAAACPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAEUAAABoAAAAdwAA - AG4AAABdAAAANwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAzAAAAvAAAANoAAACuAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////4D///////////////////+A///////// - ///////////gP///wA//////////////4D///4AD///////8AP///+A///4AAf//////8AB////gP//8 - AID///////AAP///4D///Afgf//////gMB///+A///gP8D//////wfwf///gP//wH/gf/////8P8D/// - 4D//8B/8H//////H/g///+A//+A//A////////4P///gP//gf/4P///////+D///4D//4H/+D/////// - /A///+A//8B//gf///////gf///gP//A//4H///////wH///4D//wP/+B///////gD///+A//8D//wP/ - ////gAA/gf/gP//A//8D/////gAA/4H/4D//wP//A/////wAA/+B/+A//8D//wP////4AP//gf/gP//A - //8D////+Af//4H/4D//wP//A/////AP//+B/+A//8D//wP////wH///gf/gP//A//8D////8D///4H/ - 4D//wP/+A////+A///+B/+A//8D//gP////gf///gf/gP//A//4D////4H///4H/4D//4H/+A////+B/ - //+B/+A//+B//gP////gf///gf/gP//gf/4D////4H///4H/4D//8D/8B////+B///+B/+A///A//Af/ - ///gf///gf/gP//4H/gH////4H///4H/4D///A/4D/8Af+B///+B/+A///4H8A/4AB/gf///gf/gf/// - A/Af8AAH4H///4H/4H///4DgH+AAA+B///+B/+B////AAD/AAAHgf///gf/gf///8AB/wB8B4H///4H/ - wH////gA/4B/4PB//8+A/8B////gAf+A//BwP//HgP/Af///wAf/gf/4cD//x4B/gP///4Af/4H//PA/ - /8MAPwD///8Af/+B///4H//AAAAB///+Af//gf//+B//4AAAAf///Af//4H///gP/+ACAAP///wP//+B - ///8D//wBwAP///4P/wfgP///Af//B/AP///+D/4H4D///4D4P////////h/8A/AI///AAD////////4 - f+APwAP//4AAf///////+H/AD+AB///AAH////////g/wA/wAf//wAD////////4P4Af+AGD/4EA//// - /////A4AH/ADg/+D//////////wAAD/gPwH/x///gf/////+AAB/4D8B/+f//4H//////wAB/+B/Af// - //+B///////AB//gfwH/////gf///////P//wH8B/////4H//////////8B/Af////+B///////////g - f4H/////gf//////////4H+D/////4H//////////+A/g/w///+B///////////gDAP4H///gf////// - ////8AAH+B///4H///////////gAB/AP//+B///////////8AA/wD///gf///////////wA/8A///4H/ - ///////////h//AP//+BwA/////////////wD///gQAD////////////8A///4AAAP/////h/+f///AP - //+AAAD/////gD+D///wD///gA/Af////gAfAf//8A///4A/4D////wADwH///gP//+A//A////8AAYA - ///4D///gf/wP///+AOCAP//+B///4H/+B////APwAD///wf//+B//gf///wH+AM///8H///gf/4H/// - 8B/gHP///B///4H/+B///+A/8B7///4f//+B//gf///gP/Af///+H///gf/4H///4H/wH////g///4H/ - +B///+B/8B////4P//+B//A////gf/g////8B///gf/wP///4H/4P////Af//4H/8D///8B/+B////xD - //+B/+A////A//gf///8Q///gf/gf///4P/4H///+EH//4H/wP///+D/+B////hg//+B54H////g//gP - ///w4P//gYAD////4P/4D///8PB//4GAB////+B/8A////Dwf/+BgA/////gf/AP///g+D//gYAH//// - 8H/wD///4fg//4HBA/////B/8Af//8H4H/+B/wH////wP+AH///B/A//gf+B////+D/gB///g/wP/4H/ - gf////w/wAf//wP+B/+A/8D////8H4ED/j8D/gf/wP/A/////g+BA/4+B/4D/8D/wP////8AAwP8HAf/ - A//Af8D/////gAeD/BgP/wP/4H+A/////8Afg/4AD/8B/+A/gf/////////+AB//gf/wDwH///////// - /gAf/4D/+AAD//////////8AP/+A//wAB///////////AH//gP//AA///////////4B//4D//8A///// - ///////B//////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////8oAAAAQAAAAIAAAAABACAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAA - AFEAAABRAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABMAAACOAAAA5AAAAP8AAAD3AAAAuAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAgAAAAaQAAAH0AAABmAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAA/wAAAP8AAACBAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAADkAAAA/wAAAOoAAACOAAAAdwAAAMQAAAD9AAAAdwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAA/AAAAPkAAADkAAAA/QAAAPoAAABzAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAP8AAAD/AAAAgQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAADmAAAA/wAAAMwAAAAVAAAAAAAA - AAAAAAABAAAAoAAAAP4AAABjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKAAAA+gAAAHoAAAAOAAAAAAAA - ACoAAADkAAAA/wAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAAAA/wAA - APEAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAsAAADnAAAA8gAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAA - AGAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAP8AAACbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABLAAAA/wAAAP8AAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAhAAAA/AAAAP8AAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAP8AAACSAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAD/AAAApgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAP8AAAD/AAAAgQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAP8AAAD/AAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ADcAAAD/AAAA8QAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAC/AAAA/wAA - AHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAA - AIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAD/AAAA4wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAJAAAA/AAAAP8AAABOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - ACgAAACnAAAA/wAAAOQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABLAAAA/wAAAP8AAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiAAAA/wAA - ALYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOkAAAD/AAAAjQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAcwAA - ANMAAAD7AAAA/wAAAP8AAAD/AAAA/wAAAMQAAAAmAAAAAAAAAAAAAAAAAAAASgAAAO8AAADvAAAAdwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAP8AAAD/AAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA+AAAAP8AAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeAAAA/wAA - ALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAtAAAAP8AAAD/AAAA7QAAAJkAAABsAAAAWQAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AE8AAAD/AAAA/wAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPsAAAD/AAAAkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA4QAAAP8AAADVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAP8AAAD/AAAApgAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABPAAAA/wAAAP8AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAA/wAA - AP8AAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpAAAA/wAAAJgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8AAAD/AAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMIAAAD/AAAA1QAAAAUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAP8AAAD/AAAAfwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAASwAAAP8AAAD/AAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvQAA - AP8AAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAD9AAAA/wAAANoAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAD7AAAA/wAA - AHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA/wAA - AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAHcAAAD/AAAA6QAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAA/wAA - AP8AAADFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAyAAAA/wAAAP8AAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABPAAAA/wAAAP8AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAA/wAAAP8AAACBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAA+QAAAP8AAABAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAYgAAAP8AAAD/AAAAnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAP8AAAD/AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAP8AAAD/AAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAA - AP8AAAD/AAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAD/AAAAugAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK8AAAD/AAAA/wAAAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD/AAAA/wAAAAwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA/wAAAH8AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAMAAAA1gAAAP8AAABnAAAAAAAAAAAAAAAAAAAAAAAAABwAAAD5AAAA/wAAAPIAAAAOAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAkAAAATwAAAFwAAABHAAAACwAAAAAAAAAAAAAAAAAAAAAAAABPAAAA/wAA - AP8AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPAAAA/wAA - AP8AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAA/wAAAP8AAACAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADdAAAA+wAAAGIAAAAAAAAAAAAAAAAAAACdAAAA/wAA - AP8AAACCAAAAAAAAAAAAAAAAAAAAAAAAADsAAADOAAAA/wAAAP8AAAD/AAAA/wAAAPAAAABtAAAAAAAA - AAAAAAAAAAAAQQAAAP8AAAD/AAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAATwAAAP8AAAD/AAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAP8AAAD/AAAAegAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAALEAAAD/AAAAsAAA - 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 - AAAAAAAZAAAA/wAAAP8AAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAAG0AAACEAAAAdQAA - AEEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAP8AAAD/AAAADgAAAAAAAAAAAAAAAAAA - AMsAAAD/AAAA/wAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAD/AAAA/gAA - AAsAAAAAAAAAAAAAAAAAAAB+AAAA/wAAAP8AAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/wAAAGQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABGAAAA/wAAAP8AAABvAAAAAAAAAAAAAAAAAAAAIAAAAPoAAADTAAAAAAAAAAAAAAAAAAAAAAAA - ADsAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAA - AP8AAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAL8AAAD/AAAA/AAAAKcAAAB6AAAAkQAAAOgAAAD/AAAAWQAA - AAAAAAAAAAAAAAAAACcAAAD5AAAA/gAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAtQAAAP8AAAD/AAAA/wAA - AP8AAAD+AAAAkwAAAAAAAAAAAAAAAAAAAAAAAACEAAAA/wAAAP8AAACUAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/wAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAA3AAAAewAAAJEAAACAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsQAAAP8AAAD/AAAAwAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAAAP8AAABkAAAAAAAA - AA8AAAA/AAAATQAAAD8AAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ALsAAAD/AAAA/wAAAM8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAA - AP8AAAD/AAAAcAAAAJsAAAD5AAAA/wAAAP8AAAD/AAAA/AAAALMAAAAiAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABlAAAAiQAA - AHQAAAAmAAAAAAAAAAAAAAAAAAAADgAAAHcAAABbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAACkAAAA/wAAAP8AAADCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABkAAAD/AAAA/wAAAPQAAADwAAAAigAAAEQAAAAxAAAAVQAAANAAAAD/AAAA5wAA - ABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AC4AAADiAAAA/wAAAP8AAAD/AAAA+wAAAHkAAAAAAAAAAAAAAKcAAAD/AAAA/wAAAEYAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAAAP8AAAD/AAAApAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAAAP8AAADLAAAAHAAAAAAAAAAAAAAAAAAA - AAAAAAAOAAAA4wAAAP8AAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAABIAAADkAAAA/wAAAP8AAACmAAAAWAAAAHsAAAD2AAAAaAAAABYAAAD8AAAA/wAA - AP4AAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAAD/AAAA/wAA - AIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIcAAAD/AAAA8gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPAAAA/wAAAP8AAACBAAAAAAAAAAAAAAAAAAAAZgAA - APYAAAB2AAAA/wAAAMEAAAAOAAAArgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAzgAAAP8AAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ABkAAAD/AAAA/wAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdAAAA/wAAAP8AAAAeAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAA8AAAAP8AAADaAAAAAwAA - AAAAAAAAAAAAAAAAAAcAAADvAAAA+gAAAP8AAABgAAAAAAAAAEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGsAAAD/AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAAAP8AAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVgAA - AP8AAAD/AAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA - AP8AAAD/AAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAAAP8AAAD/AAAAKgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/wAAAGkAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAGQAAAD/AAAA/wAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAGsAAAD/AAAA/wAAADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4AAAD/AAAA+QAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAA - AOkAAADeAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/wAA - AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLAAAA/wAAAOMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAA/wAAAP4AAAAIAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAzAAAA/wAAAPEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAALEAAABwAAAA7AAAAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAZAAAA/wAAAP8AAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1QAAAP8AAACFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAP8AAADzAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAP8AAAD/AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAD1AAAALAAAAIoAAADsAAAAEQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAA - AP8AAADSAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AGIAAAD/AAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4AAAD/AAAA/wAAAHMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAA6gAAAAEAAAAfAAAA+wAA - AJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/wAAAGQAAAABAAAAZQAA - AHgAAAArAAAASQAAAPUAAADBAAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAA/wAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAOEAAAD/AAAA/wAAAP8AAADVAAAABwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAE4AAAD/AAAA/wAAAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAtAAA - AP8AAAD7AAAAywAAANEAAAD+AAAA/QAAAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAA+wAAAP8AAADkAAAAKAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAA+wAAAPsAAAC/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABCAAAAkwAAALcAAACyAAAAjAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ADwAAABiAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////+H//////// - /4f/Af///g//h/4A///8B/+H/Bh///hD/4f8PD//+eP/h/h+P///4/+H+H4f///D/4f4/h///wP/h/j/ - H//gBw+H+P8f/8AfD4f4/x//wf8Ph/j/H//D/w+H+P4f/4f/D4f4fh//h/8Ph/h+H/+H/w+H/H4f/4f/ - D4f8PB8Hh/8Ph/4cPAOH/w+H/wA4AYf/D4f/wHhwh/sPh/+A8PxH+QcH/wPw/sP4AA/+D/D/w/gAD/w+ - MP/h/BA//HwwH+AP///8eDgP8Af///xwPAH4D////gA4EPH/D//+APhw+f8P//+B+HD//w/////4cP// - D/////hx5/8P////+AHD/w/////8A8P/D/////8Hw/8IP//////D/wAP//Bx/8P/AAf/4DD/w/8Hh//A - AP/D/w/D/8OA/+P/D8P/g4L/4/8Pw/+Hw//j/w/D/4fD/+H/D8f/h8P/4f8Px/+Pw//A/w+H/4/D/8D/ - AA//h8P/zH8AH/+Hw/+MfwAf/8eB/44/Dw//x4H/Hh8PD//jAeYeH4+P//AR4B8fh4//+DHgPw+DD/// - /+A/D8Af////8H8P8D/////4////////////////////////////////////////////////KAAAADAA - AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAPQAA - ABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAPgAAADMAAAAFAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAI8AAAD3AAAA7AAA - AN0AAADWAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAALAAAAhAAAANIAAADXAAAAnQAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAA - AP4AAACMAAAACgAAAAEAAABgAAAA8wAAADcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAAsgAAAD8AAAA8AAAA0AAAANUAAAAHAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABMAAAA/gAAALYAAAABAAAAAAAAAAAAAAAAAAAApgAAANUAAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAB6AAAAAgAAAAAAAAAAAAAASgAA - AP4AAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAC5AAAA/gAAAD4AAAAAAAAAAAAAAAAAAAAAAAAARAAAAP4AAABWAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAZAAAAP4AAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAA - AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAD1AAAA7wAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADAAA - AP0AAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAUAAABGAAAA5wAAAMcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAAD+AAAAxAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAO0AAADpAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAGAAAAKMAAADwAAAA/gAAAPkAAADtAAAAoQAAABUAAAAAAAAAAAAAAHUAAADzAAAAmAAA - AAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0AAAD+AAAAsAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYAAAD+AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAEAAAAyAAAAP4AAACzAAAAPgAAABQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA - AHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - ADIAAAD+AAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPEAAAD+AAAAJwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGAAAA/gAAALcAAAADAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAA8AAAD2AAAAzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAP4AAAD+AAAAIgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAA/gAAAEsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAA - AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2AAAA+gAAABMAAAAAAAAAAAAAAAAAAAAAAAAANAAA - AP4AAAD4AAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvAAAA/gAA - ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAA - AAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/AAAAHsAAAAAAAAAAAAA - AAAAAAAAAAAAeAAAAP4AAADNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAC8AAAA/gAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAA - AAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjgAA - APQAAAA1AAAAAAAAAAAAAAAGAAAA2gAAAP4AAABxAAAAAAAAAAAAAAAAAAAAFwAAAGEAAACCAAAAeAAA - ADAAAAAAAAAAAAAAAAAAAAC5AAAA/gAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAC5AAAA/gAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAwAAAJAAAADrAAAAWgAAAAMAAAB/AAAA/gAAANQAAAALAAAAAAAAAAAAAABTAAAA8QAA - AP4AAAD7AAAA+wAAAPsAAACGAAAAAgAAAAAAAACnAAAA/gAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAADDAAAA/gAAAFUAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA2gAAAOIAAAD9AAAA2wAAACMAAAAAAAAAAAAA - ABkAAADxAAAA/AAAAHMAAAATAAAAEwAAAFgAAADZAAAAcwAAAAAAAACDAAAA/gAAAEQAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAIAAAAOAAAAAAAAAHsAAAD+AAAAoQAAAAAAAAAAAAAAAAAAAAMAAADgAAAA/gAA - ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAC2AAAA/gAAAPQAAACOAAAADgAA - AAAAAAAAAAAAAAAAAGcAAAD+AAAAmQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAoQAAAAUAAABLAAAA/gAA - AHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAACaAAAAAAAAAI4AAAD+AAAA7QAAACUAAAAAAAAAAAAA - AEcAAAD+AAAA5gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAANwAAADuAAAAhAAA - ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAD+AAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAMAAAA7AAAAMsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADFAAAAnQAAAPAAAAD+AAAAtgAA - APAAAACiAAAAnQAAAPMAAAD3AAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAA - ANIAAAAdAAAAAAAAAAAAAAAAAAAAHAAAADAAAAAAAAAAAAAAAHAAAAD+AAAAhwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAP4AAABdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAoAAA - AMEAAABrAAAAAgAAAF4AAAC2AAAAxQAAAJsAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAA5wAAAFQAAAAAAAAAAAAAAAAAAAApAAAA6wAAAPoAAAAoAAAAAAAAACEAAADzAAAA7QAA - AEUAAABJAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAALAAAAD4AAAAegAAAE0AAAC9AAAAvgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAA6QAAAFsAAAAAAAAAAAAAABQAAADWAAAA/gAAAP0AAAAxAAAAAAAA - AAAAAABEAAAA5QAAAP4AAAD+AAAAQQAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAA4AAADlAAAA2AAA - AOoAAAD9AAAA4AAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlQAAAOAAAABRAAAATAAAANEAAAD+AAAA/gAA - AJcAAAAAAAAAAAAAAAAAAABDAAAA9gAAANIAAAB2AAAADgAAAIUAAADqAAAALQAAAAAAAAAAAAAAAAAA - ACcAAAC8AAAABwAAAAUAAAAPAAAACAAAAAAAAAAAAAAAAAAAAA8AAAAvAAAAGgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAJUAAADxAAAA/gAA - APoAAADRAAAAXgAAAAAAAAAAAAAAAAAAAAAAAADAAAAA/gAAADQAAAAAAAAAAAAAANoAAAD+AAAAdQAA - AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAALAAAAIQAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA/gAAAAUAAAAAAAAAAAAA - AMIAAAD/AAAAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9AAAA/wAA - AEMAAAAAAAAAAAAAAF4AAAD9AAAAKwAAAAAAAAAAAAAAIQAAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAA9AAAA9gAAAPMAAACmAAAAqAAAAPIAAACsAAAAAAAAAAAAAAAHAAAA3wAAAOsAAAANAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAALMAAADjAAAA4AAAAJcAAAAPAAAAAAAAAAAAAAA3AAAA/gAA - AP4AAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAABgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAABMAAAA/gAAAP4AAABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAkgAA - AIQAAADdAAAA8gAAAOgAAACsAAAALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAEYAAACeAAAAmgAAAEgAAAAAAAAAAAAAAEEAAACbAAAAHQAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA8AAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAKAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP///////////////////////////+P///4f////4///+A//8D/j///4B//wH+P///Dj - /+Mf4///8eP//x/j///h4//8H+P//+Px/8Ax4///4/H/gPHj///j8f+H8eP//+Ph/4/x4///8eH/j/Hj - ///x4/+P8eP///jDg4/x4///+AMAj/Hj///+BgCPkcP///wOPA+Qw///+D4/h4AH///45j/HwA////HC - B8B/////8YMF4D/////4BwDgcf////gPGPfx/////j8Y//H//////xjP8f//////AYfx//////+Bh/Gf - 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 - AAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAAAAAAAASAAAAfAAAAGMAAAAGAAAAAAAAAAAAAAAAAAAAAAAA - ADUAAABlAAAAGwAAAAAAAAAAAAAAkgAAACAAAAAAAAAAjQAAABsAAAAbAAAAbgAAAAAAAAAAAAAAAAAA - AAAAAAAOAAAANQAAAFoAAAAAAAAAAAAAAJIAAAAgAAAAAAAAAKMAAAAAAAAAAAAAAKkAAAAAAAAAAAAA - AAAAAAA9AAAAlQAAAEoAAAACAAAAsAAAAAAAAACSAAAAIAAAAAAAAACHAAAADwAAABQAAACpAAAAAAAA - AAAAAAAAAAAAjAAAAAwAAAAAAAAAAAAAALMAAAAAAAAAkgAAACAAAAAAAAAAEAAAAHQAAACRAAAARQAA - AGAAAACMAAAAXwAAAIoAAAAMAAAAAAAAAAEAAACzAAAAAAAAAJgAAAAaAAAAAAAAABMAAACQAAAAMgAA - AAUAAACmAAAAAAAAABMAAABOAAAASgAAAAAAAABTAAAAswAAAHcAAACUAAAAAAAAAAAAAABEAAAAPgAA - AKUAAABSAAAAfQAAAHYAAAAuAAAAAAAAAIoAAACFAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AEwAAABAAAAAAAAAAJgAAAANAAAAqgAAAAMAAAAFAAAAAAAAAAAAAACeAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAoAAAAhwAAAEAAAABgAAAAZQAAAAAAAAAAAAAAnwAAAEMAAAAyAAAAAAAA - AAAAAAAAAAAAKwAAAJwAAABVAAAAngAAAAAAAAAAAAAAUAAAAGMAAAAAAAAAAAAAAK4AAAAgAAAAfQAA - AC0AAAAAAAAAAAAAAJEAAAAZAAAAYwAAAEwAAAAAAAAAAAAAABwAAABiAAAAAAAAAAAAAACeAAAAAAAA - AGEAAAA6AAAAAAAAAAAAAACNAAAAAgAAAFoAAABjAAAAAAAAAAAAAABVAAAAZAAAAA4AAAAAAAAAngAA - AF8AAAB/AAAAAAAAAAAAAAAAAAAALgAAAFIAAACAAAAAjAAAAA0AAAAmAAAAfwAAABYAAAB/AAAAAAAA - AJ4AAAACAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAABQAAAAAAAAAFAAAAtwAAACcAAAAAAAAAhwAA - AAAAAAApAAAAbQAAAFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8nEGHjJxBh4ycQbcEnEGHNJxBgCScQYIhnEGAl5xByDecQfgx - nEHDMJxBwzScQcMRnEHAEZxB5FGcQf//nEE= + + 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 + AAAfAAAAAAAAAAAAFwADAAAAAAAABgMAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAGQAAAAAAAAAA + AAAAAAAAHwAAAAAAAAAAAAEAHgAAAAAAAB8AGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAA + AAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA + AAAAAAAAAAAAAAAAAAAfAAAAAAAAAAARAAcAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + FgAGAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAABwASAAAAAAAAAAAFABwAAAAAAAAAAAAAAAAAAAAAAAAL + AQAAAAAOAAAAAAAEBAAAAAAAAAAAAB8AAAAAAAAAAAEAGAAAAAAAAAAACAARAAAAAAAAAAAAAAAAAAAA + ABIAAAQZAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAABABsAAAAAAAAAAAcACgAAAAAAAAAAAAAA + AAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAABQAZAAAAAAAAAAAEAAcAAAAAAAAA + AAAAAAAAAAAPAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAABAAEgAAAAAAAAAAAAAJAAAA + AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAUAAAAAAAAAAAAA + DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAEAAAAAAAAA + AAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAbABEA + AAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAA + AAoAAAAAAAAAAQADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAA + AAAAAAAACAEAAAAAGAAAHwAAAAAADAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAATABMAAAAADgAAAAAAAQAACRMOAQAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAFAAAADwAAAAAACwABAAAAAAAdAQAAAAIAAAAAAAAAAAAAAAAAAAAAHwAA + AAAAHAAAAAAAAAAAAAAAAAAAAAAHAAAEAAAAAAAAAAAAHQAAAAAAAAAHAAAOABkAAAAAAAAAAAQAAAAA + AAcAAAAAAAcABAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAS + GAAQAAABCgAAABEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAUAAAAPAAMAAAAAAB0AAAAAAAAAAAAAAAAIBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAJ + AAAAAAAAAAAAGhMfAAAAHhMTHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAIAAcAAAAAAAAAAAAA + AAAPAAsAAAAIGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAUAAAAAAQAAgUGAAAA + AAAAAAAAABUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAHAAAAAAAAAAAAAwAA + AgAAAAAAAAAAAAANBQAcEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAXAAAFAAAAFwAAAAAA + DgAHAAAAHwAFAAAAAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAGAAAA + AAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAA + AAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAQAAEWABsFAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAABsAAAAAHgAAGgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbHwAAAAAAABMAAA8AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAMAAAAAAAAAAAAAAAA + AAAZAQAAAAETAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAFgAADwAAAAAAAAAA + AAAAAAACBB0AAAALAAYAAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAWAAAAAAAAAAAAAAAAAAAAABYAAAAA + AAAAAAAAAAAADQAAAAAAAAcAFwAAAAAAAAAAAAAAAAAABgAAFgAAAgAAAQAAFgAAAAAAAAAAAAAAAAAf + AAAAAAAAAAAAAAAAAAAAAAAAAAAeAAMAAAAAAAAAAAAAAAAAHAAAHwAAAAACAAAPABQAAAAAAAAAAAAA + AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQACQAAAAAABAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA + AAAAAAAAAAAAAAAAAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAAAAAAAAAAAAAAAAAAATAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAoAHgAAAAAAAAAAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAdBQAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAEbAAAAAAAAAAAAAAAAAAAAAAACDwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAA0WAAAUAQAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAA + AAAAAAAAAAAGAAAAAAAAABMAAAYAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAFxIABwIAAAAA + AAAAAAAAAAAAAAAAHQAAAAAAAAADBQAAAAAAAAAAAAAAAAAQAQAAAAAKAAAAAAAAAAAAAAAAAAAAAAAA + AgAAAAAAAAAAAAAAAAAAAAAEDwAAAAAAAB0JAAAAAAAAAAAAAAAAABEAAAAAAAALAAAAAAAAAAAAAAAA + AAAAAwAfAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAFwAaAAAAAAAfAAAACQAAAAAAAAAAAAAAAAAAAAAJ + ABQAAAAAAAkAFwAAAAAAAAAAAAAAAAAAAAAAAhQaBAYAAAAADAAAAAAAAQAAFgAFAAAAAAAADQAMAAAA + AAAAAAABAAAAAAAFABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCwAAAAAAAAAAAB8A + AAAAAAAAAAANAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAACgAAAAAA + AAAAAAAcAAAAAAAAABIAAQ0LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABgAA + AAAAAAAAAAEBEAAAAAAAAAAAABsSExwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// + ///////////////////////////////////////H/4P//////8f/Cf///g//x/48///95//H/H5///vz + /8f8fj////P/x/z/P///5//H+P8////H/8f4/x//+A+fx/j/H//g/5/H+P8f/+P/n8f4/x//x/+fx/j/ + H//P/5/H/P8f/8//n8f8/x//z/+fx/x+P//P/5/H/n4//8//n8f/PD4Hz/+fz/+MfAHP/5/P/+D4+c// + j4//w/j+x/uPj/+P+f/n+Qcf/z/5/+f8EB/+f/n/4/44f/7+eP/xz////vw8H/gP///+eH4f+R////4w + fHH7/////wH88f//n///7/zx//+f/////Pn//5/////8+f//n/////wj5/+f/////gPD/5//////z8P/ + n///////w/+QH//9///D/4OP//Bx/+P/j8f/4bD/4/+fx//D0v/n/5/n/8fH//f/n+f/z8f/9/+f5//P + 5//z/5/H/8/n/+v/n8f/z+f/6f+fz//P5//s/5+f/8/j/8z/mD//z8P/3n+ZP//Pw/+ef5+f/+fD/58/ + n4//95H3Pz+Pj//4OfY/H8+P////8H8fx5/////wf4/gP/////j/j/h///////////////////////// + /////////////////////////////ygAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAABQUFAAkJCQANDQ0AERERABUVFQAZGRkAHR0dACEhIQAlJSUAKSkpAC0tLQAyMjIANjY2ADk5 + OQA9PT0AQkJCAEZGRgBISEgATU1NAFFRUQBWVlYAWVlZAF1dXQBgYGAAZWVlAGlpaQBubm4AcXFxAHV1 + dQB5eXkAfHx8AAAAAAAALC8AAEtQAABocAAAhpAAAKWwAADDzwAA4fAAEe//ADHx/wBR8/8AcfX/AJH3 + /wCx+f8A0fv/AP///wAAAAAAAC8hAABQNwAAcEwAAJBjAACweQAAz48AAPCmABH/tAAx/74AUf/IAHH/ + 0wCR/9wAsf/lANH/8AD///8AAAAAAAAvDgAAUBgAAHAiAACQLAAAsDYAAM9AAADwSgAR/1sAMf9xAFH/ + hwBx/50Akf+yALH/yQDR/98A////AAAAAAACLwAABFAAAAZwAAAIkAAACrAAAAvPAAAO8AAAIP8SAD3/ + MQBb/1EAef9xAJj/kQC1/7EA1P/RAP///wAAAAAAFC8AACJQAAAwcAAAPZAAAEywAABZzwAAZ/AAAHj/ + EQCK/zEAnP9RAK7/cQDA/5EA0v+xAOT/0QD///8AAAAAACYvAABAUAAAWnAAAHSQAACOsAAAqc8AAMLw + AADR/xEA2P8xAN7/UQDj/3EA6f+RAO//sQD2/9EA////AAAAAAAvJgAAUEEAAHBbAACQdAAAsI4AAM+p + AADwwwAA/9IRAP/YMQD/3VEA/+RxAP/qkQD/8LEA//bRAP///wAAAAAALxQAAFAiAABwMAAAkD4AALBN + AADPWwAA8GkAAP95EQD/ijEA/51RAP+vcQD/wZEA/9KxAP/l0QD///8AAAAAAC8DAABQBAAAcAYAAJAJ + AACwCgAAzwwAAPAOAAD/IBIA/z4xAP9cUQD/enEA/5eRAP+2sQD/1NEA////AAAAAAAvAA4AUAAXAHAA + IQCQACsAsAA2AM8AQADwAEkA/xFaAP8xcAD/UYYA/3GcAP+RsgD/scgA/9HfAP///wAAAAAALwAgAFAA + NgBwAEwAkABiALAAeADPAI4A8ACkAP8RswD/Mb4A/1HHAP9x0QD/kdwA/7HlAP/R8AD///8AAAAAACwA + LwBLAFAAaQBwAIcAkAClALAAxADPAOEA8ADwEf8A8jH/APRR/wD2cf8A95H/APmx/wD70f8A////AAAA + AAAbAC8ALQBQAD8AcABSAJAAYwCwAHYAzwCIAPAAmRH/AKYx/wC0Uf8AwnH/AM+R/wDcsf8A69H/AP// + /wAAAAAACAAvAA4AUAAVAHAAGwCQACEAsAAmAM8ALADwAD4R/wBYMf8AcVH/AIxx/wCmkf8Av7H/ANrR + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAHAIECAoAAAAAAAAAAAAAAAAAAAAAAAAfCwoYAAAAAAAAAAAA + ABIAAAAAAAAAAAAXABwAAAADAAAAAAAAAAAAAAAAAAAAABcTAAALCgAAAAAAAAAAABIAAAAAAAAAAAAA + EgAAAAAWCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAABEAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAIEAAAAAAAAABMAAAAAAAAAAAAAAAAAAAAA + AAAGDgAAAAAAAAAAABIAAAAAAAAAAAAOAAAAAAAABAUAAAAAAAAAAAAAAAAAFwMAAQQXAAAAAAMZAAAA + ABIAAAAAAAAAAAATAAAAAAAABgAAAAAAAAAAAAAAAAANABMAAAAAAAAAAAAYAAAAABIAAAAAAAAAAAAT + AAAAAAAAAwAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAYAAAAABIAAAAAAAAAAAIMAAAAAAAAAAAAAAAA + AAAAAAAAAB0AAAAAAAAAAAAAAAAYAAAAABIAAAAAAAAAABIBAAAAAAAAAAEAAAAAAAAAAAAAABQAAAAA + AAAAAAAAAAAYAAAAABIAAAAAAAAAAAABAAAAAAAAAAwAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAYAAAA + ABIAAAAAAAAAAAAcAgAAAAAJAAAAAAAAAB8AAAAAABEAAAAAAAAAAAAAAAAYAAAAABEAAAAAAAAAAAAA + GwUAAAAACgAAAAADAAEBAR4AABYAAAAAAAAAAAAAAAAYAAAAAA8AAAAAAAAAAAAAAAAJBwAJAAAAAAMB + AAAAAAkAAB8AAAAAAAAAAAAAAAAXAAAAAAcAAAAAAAAAAAAAABIAAhwAAAAAAAAZAAAAAAAXAAAAAAAA + AAAAABkAHAAEAAAAAAAGAAAAAAAAAAAACAQfAAAAAAAAHwAAAAAAAAAAAAAEDAAAAAAAAA4YAwASAxcY + AwIAAAAAAAAAAAAZCwAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAYDwAAABIOGQAAAAAAAAAAAAAG + AAAAAAAFAQAAAAMEAAAAAAAAAAAAEwEAABAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAoAAAAAAAAG + AAAAAAAAAAAAAAYJBQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAaBwAACwAAGgAAAAACCwAAHgUAAAAAABAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgMAAQsAAAAAAA8AAAAACQAAAAAAAAAAAAAAAAAAAAAdAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAADwAAAAAAAAAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC + AxYVAxQAAAAIBQAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwcHGgAAAAAAAAAA + AAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbHwgD + BRQAAAAAAAAAAAAAAAAAABgZAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAABEgAAAAgDAAAAAAAAAAAA + AAAAAAENBwAABgAZAAAAAAAAAAAEAAAAAAAAAAAAAAAVAAAAAAAAGQAAAAAAAAAAAAACAQAAAAsAAAAZ + AAAAAAAAAAAWAgAAAAAAAAAAAAAdAAAAAAABCwAAAAAAAAAAAB8AGQAAAAABAgAAAAAAAAAAAAAABgAA + AAAAAAAAAAAdAAAAAAACCQAAAAAAAAAAAA8AAAAAAAAADAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAdAAAA + AAABEAAAAAAAAAAAAAgAAAAAAAAFEgAAAAAAAAAAAAAAGRAAAAAAAAAAAAAdAAAAAAAAAAAAAAAAAAAA + AAkCAAAAAAAGBQAAAAAAAAAAAAAMAAoAAAAAAAAAAAAdAAAAAAsPAAAAAAAAAAAAABEBAAAAAAACAAAA + AAAAAAAAAAAKAAAJAAAAAAAAAAAdAAkVDxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgbAAAE + AAAAAAAAAAAdAAwZBR0AAAAAAAAAAAAAAAACAAAAAB0HARgAAAAAAAAAAAEAAAAaBAAAAAAAAAAcAAAA + AAAAAAAAAAAAAAAAAAAeDwAAAAQADAkAAAAAAAAAFAcAAAAAABwAAAAAAAAVAAAAAAATAAAAAAAAAAAA + AAAAFhIAChMAGgEAAAAADQAAAB8AAAAACAMAAAAAAAgDAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAkBBAAAAAAAGQAAAAAAAAACDgAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAA + AAAPAAAAAAAAEAMBCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////////n + ///8H//4f+f///jv//M/5///+ef//7/n///z9///v+f///Pz//8/5///8/P/4Hnn///z8//H+ef///Pz + /8/55///8/P/n/nn///z8/+f+ef///vz/5/55///+efvn/nn///854Gf+ef///8PPZ/55////h8+39Hn + ///8fn/PwA////n/P+/nH///++c/5n/////7x4/wf/////mHmff//////B85//n//////zn/+f////// + Pf/5//////+Bz/n//////8PP+f///////8/4D////89/z/jn////hj/P+fP///86v8/58////jz/7/nz + ///+fP/v+fP///58/+f59////nz/1/nn///+fP/b+Q////98/5v5D////3h/ufnv////On88+ef///+S + ezz55//////4fPzP//////j+fh///////f//////////////////////////////////////KAAAACAA + AABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQUACgoKAA0NDQAQEBAAFRUVABkZ + GQAdHR0AISEhACUlJQAoKCgALi4uADExMQA1NTUAOTk5AD09PQBAQEAARUVFAEpKSgBNTU0AUVFRAFZW + VgBYWFgAXV1dAGFhYQBmZmYAampqAGxsbABycnIAdnZ2AHp6egB+fn4AAAAAAAAsLwAAS1AAAGhwAACG + kAAApbAAAMPPAADh8AAR7/8AMfH/AFHz/wBx9f8Akff/ALH5/wDR+/8A////AAAAAAAALyEAAFA3AABw + TAAAkGMAALB5AADPjwAA8KYAEf+0ADH/vgBR/8gAcf/TAJH/3ACx/+UA0f/wAP///wAAAAAAAC8OAABQ + GAAAcCIAAJAsAACwNgAAz0AAAPBKABH/WwAx/3EAUf+HAHH/nQCR/7IAsf/JANH/3wD///8AAAAAAAIv + AAAEUAAABnAAAAiQAAAKsAAAC88AAA7wAAAg/xIAPf8xAFv/UQB5/3EAmP+RALX/sQDU/9EA////AAAA + AAAULwAAIlAAADBwAAA9kAAATLAAAFnPAABn8AAAeP8RAIr/MQCc/1EArv9xAMD/kQDS/7EA5P/RAP// + /wAAAAAAJi8AAEBQAABacAAAdJAAAI6wAACpzwAAwvAAANH/EQDY/zEA3v9RAOP/cQDp/5EA7/+xAPb/ + 0QD///8AAAAAAC8mAABQQQAAcFsAAJB0AACwjgAAz6kAAPDDAAD/0hEA/9gxAP/dUQD/5HEA/+qRAP/w + sQD/9tEA////AAAAAAAvFAAAUCIAAHAwAACQPgAAsE0AAM9bAADwaQAA/3kRAP+KMQD/nVEA/69xAP/B + kQD/0rEA/+XRAP///wAAAAAALwMAAFAEAABwBgAAkAkAALAKAADPDAAA8A4AAP8gEgD/PjEA/1xRAP96 + cQD/l5EA/7axAP/U0QD///8AAAAAAC8ADgBQABcAcAAhAJAAKwCwADYAzwBAAPAASQD/EVoA/zFwAP9R + hgD/cZwA/5GyAP+xyAD/0d8A////AAAAAAAvACAAUAA2AHAATACQAGIAsAB4AM8AjgDwAKQA/xGzAP8x + vgD/UccA/3HRAP+R3AD/seUA/9HwAP///wAAAAAALAAvAEsAUABpAHAAhwCQAKUAsADEAM8A4QDwAPAR + /wDyMf8A9FH/APZx/wD3kf8A+bH/APvR/wD///8AAAAAABsALwAtAFAAPwBwAFIAkABjALAAdgDPAIgA + 8ACZEf8ApjH/ALRR/wDCcf8Az5H/ANyx/wDr0f8A////AAAAAAAIAC8ADgBQABUAcAAbAJAAIQCwACYA + zwAsAPAAPhH/AFgx/wBxUf8AjHH/AKaR/wC/sf8A2tH/AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAABQAADgAAAAAAAAAAAAAAEQAPAAAAAAAAAAAAAAAAAAYAAAAAFgAAAAAA + AAAAAAAAAAAMAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAGRkAAAAAAAAAAAAAAAAKAAAAAAMA + AAAAAAAAAAALBxMAAAAXEQAAAAAAAAAAAA0AAAAAAwAAAAAAAAAADhgAAAAAABYQAAAAAAAAAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAFhAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAWEAAAAAAAAAAA + AAAMAAAUCAAAABgVAAAAAAAAAAAAABYQAAAAAAAAAAAAAAARFQQAAAABHAAWAAAAAAAAAAAAFhAAAAAA + AAAAAAAAAAMXAAAAGBQAAAAAAAwAAAAAAAAOAgAAFQoAAAAAAAAQAAAAAAAXFgAAAAAAAA0AAAAAFgwA + FgoUAAAAAAAAGAAAAAwNAAADHwAAAAAAGA8ZCQAAAAAAAAAAAAAAAAAAGwARAB4AABEMAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAERQAAAAAAAAABhcAAAAAAAAAABwTAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAA + AAAAAAAAHBMAAAAAAAAAAAAAAAAAAAAAABcFDwgAABUTAAAAAAAcEwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAACQcAAAAAABwSABcbAAAAAAAAAAAAGhAAAB0AAAAAAAAOCQAAAAAAHAQAAAADAAAAAAAAABcIAAAA + BBkAAAAAAAASAAAAAAAcEwAAABEeAAAAAAAAAQAAAAYXAAAAAAAAABYAAAAAABwTAAAAFBwAAAAAAAAA + AAAAFgAAAAAAAAAADQAAAAAAHBMAAAAKAAAAAAAAAAEAAAAYFQAAAAAAABsAFwAAAAAcEwAAABUAAAAA + AAAAAQAAAA0GAAAAAAAAEgARAAAAABwTAA4KAAAAAAAAAAAXAAAACQIAAAAAAB8AAAAOAAAAHRIAABwW + AAAAAAAAAAATABEADwAAAAAABAAAAAQAAAAABQAAAA0AAAAAAAAAAAAAAAAAAAAAAwMaAAAAExMAAAAX + EAAKAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AHFxcRsbGwAAAAgICEdHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAABsbGwAAABUVFXFxcQAAADs7OwICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwYGBhsbGwICAgUFBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAABkZGQAAADMzMwAAAAAAAAAAAAAAAF9fXwEBAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAAAAAA + AAAAAAAAABsbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXAAAAA4ODgAAAAAAAAAAAAAAAAAAAAAAABgYGA0N + DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AHx8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRkZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAHp6egAAAAAAAAAAAAAA + AAAAAAAAAHx8fAAAAG1tbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlZWQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AEdHRwAAABwcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhYWAAAABsb + GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAB0dHQAAAElJSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWFgAAAHJycgAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwsLAQEBAAAAAAA + AAAAAAAAADs7OwAAAAAAAAAAAAAAAAAAABAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHBwAAAGNjYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEh + IQAAAEVFRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwAA + AAAAABISEmZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAG5ubgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAB4eHgAAACoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFlZWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWFgAAAGdnZwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAB8fHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAD09PQAAACoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AEJCQgAAAEtLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAAACUlJQAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAABYWFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo6OgAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+ + fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGJiYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG9vbwAAAEVFRQAAAAAAAAAAAAAA + AAAAAAAAAFBQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpKQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAA0NDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACIiIgQEBAAAAAAAAAAAAAAAAGJiYgAAAAAAAH19fQAAAAAAAAAAAAAAAAAAADExMQAA + AAAAAAAAAAAAAA8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5OTgAAAE9PTwAAAAAAAAEBAQAAADo6OgAAAAAAAAAAAAAA + AAAAAAcHBwAAAAAAACYmJk9PTzo6OgYGBgAAAGlpaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUVFQAAAAAAAAAAAD8/PwAA + AAAAAAAAAAAAAAAAAC4uLgAAAAQEBAAAAAAAAAAAAAAAAAAAAHZ2dgQEBAAAAAAAAAAAAAgICAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH19fQAAAAAAAAAAAAAAAAAA + AHFxcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHgAAAAAA + AA8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZ2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHwAA + AAAAADo6OgAAAGdnZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAAAAAAB8fHwAA + AAAAAAAAAAAAAAAAAB4eHgAAABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEBAQAAABcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElJSWNjYwAAAEFB + QQAAAAAAAAcHBysrKwAAAAAAAAAAAEdHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAEBARAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABQUFAAAAAAAAAAAAD09PQAAAA0NDQAAAAAAAAAAAAAAAAICAnR0dAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAACEhIRcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHV1dQAAACQkJAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAGtra0xMTH5+fgAAAAAAAAAAAHt7e09PT09PT3h4eAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAA + AAAAAAAAAAAAAAAAACEhIQAAAB8fHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/ + PwAAAC0tLQAAAAAAAAAAACMjI2pqagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAwMDAAAAAAAAFJSUgAAAAAAAAAAAAAAABAQEAAAAAgICBcXFxgYGAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFdXVwAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAVRU + VAAAAAAAAAAAAAAAAB0dHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAAAAAAAAAgICAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2NhYWFgAAAHFxcUpKSkBAQAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAE9PTwAAAF1dXQAAAAAAABYWFgAAAAAAAAAAAFxcXAAAAAAAAAAAAAAAAAAAADg4OAAAAB0d + HQAAAAAAAAAAAH5+fgAAABQUFAAAAAAAAAAAAAAAAAAAAAAAAE1NTQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQUAEBAQAAAAAAAAAAAAAAABsbGwAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHt7ewAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAUFBSwsLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAMD + A1hYWAAAAG5ubhcXFwAAAAAAAAAAAAAAAAAAAAAAAAYGBgEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAEpKSgAAAAAAAAAAAAAAAAEBAWxsbAAAAAAAAAAAAAAAAHt7ewAAAAAAAGtrawAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ubn9/fwAAAAAAAAAAAAAAAAAAAAAAAE5OTgAAAAAA + AD8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAERERAAAAAAAADAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRk + ZAYGBgAAAAAAAAAAAAMDA0xMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHZ2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAFtbWwAAAAAAAD09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAsLCw8PD3V1dQAAAAAAAAAAAC8vLwAAABgYGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0dHQAAAAAAAAAAAAQEBAAAAAAAAAAAAFhYWAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAAAAAAAAAAAAAAAAAAAAAABwcHAAAAF5eXgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsbGwAAAAAAAFlZWQAAAAAAAAkJCQAAAAAAAAMD + AwAAAAEBAVtbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+fgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHh4eAAAAA0N + DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcAAAAAAAAH5+fgAAAAAAAAAA + AAAAAAkJCQAAAAAAAD4+PgAAAFFRUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PDwAAACUl + JQAAAAAAAAAAAAAAAAAAABAQEAUFBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWFiEhIQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHR0dAAAABwcHAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4O + DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5OTgAAABMTEwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKgAAAHp6 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHgAAAAAAAAAAACoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAHFxcQAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwAAAAQEBDQ0NC4uLgEBAQICAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAABsbGwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQEBAQEBEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxsbEhISE1NTXNz + cwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////// + /8f/g///////x/8J///+D//H/jz///3n/8f8fn//+/P/x/x+P///8//H/P8////n/8f4/z///8f/x/j/ + H//4D5/H+P8f/+D/n8f4/x//4/+fx/j/H//H/5/H+P8f/8//n8f8/x//z/+fx/z/H//P/5/H/H4//8// + n8f+fj//z/+fx/88PgfP/5/P/4x8Ac//n8//4Pj5z/+Pj//D+P7H+4+P/4/5/+f5Bx//P/n/5/wQH/5/ + +f/j/jh//v54//HP///+/Dwf+A////54fh/5H////jB8cfv/////Afzx//+f///v/PH//5/////8+f// + n/////z5//+f/////CPn/5/////+A8P/n//////Pw/+f///////D/5Af//3//8P/g4//8HH/4/+Px//h + sP/j/5/H/8PS/+f/n+f/x8f/9/+f5//Px//3/5/n/8/n//P/n8f/z+f/6/+fx//P5//p/5/P/8/n/+z/ + n5//z+P/zP+YP//Pw//ef5k//8/D/55/n5//58P/nz+fj//3kfc/P4+P//g59j8fz4/////wfx/Hn/// + //B/j+A/////+P+P+H//////////////////////////////////////////////////////KAAAADAA + AABgAAAAAQAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAEB + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcAgICBMTEyIiIikpKQAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHt7ey0tLSgoKGJiYgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1dXQEBAXNzcwAA + AAAAAAAAAAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5e + Xk1NTQAAAAAAAC8vLyoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEBAUlJSQAAAAAAAAAAAAAAAFlZWSoqKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEZGRgEBAQAAAAAAAAAAAAAAAAAAAAAAAAEB + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAoK + ChAQEAAAAAAAAAAAAAAAAAAAAAAAAAICAk9PTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGDg4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAEB + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBATs7OwAAAAAAAAAAAAAAAAAAAAAAABISEhYWFgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXA8PDwEBAQYGBhISEl5eXgAAAAAAAAAAAAAA + AAwMDGdnZwAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAU9PTwAAAAAAAAAA + AAAAAAAAAAAAABkZGQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc3NwEBAUxM + TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAWBgYAAAAAAAAAAAAAAAAEhISAEBAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAEBAU9PTwAAAAAAAAAAAAAAAAAAAAAAAA4ODgEBAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAEBAUhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAWBgYAAAAAAA + AAAAAAAAAEhISAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCTIyMgAAAAAAAAAAAAAAAAAAAAAAAAEB + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAEBAT8/PwAAAAAAAAAAAAAAAAAAAAAAAENDQwwMDAYGBiQkJAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHl5eQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// + ////////////////////5////B//+H/n///47//zP+f///nn//+/5///8/f//7/n///z8///P+f///Pz + /+B55///8/P/x/nn///z8//P+ef///Pz/5/55///8/P/n/nn///78/+f+ef///nn75/55////OeBn/nn + ////Dz2f+ef///4fPt/R5////H5/z8AP///5/z/v5x////vnP+Z/////+8eP8H/////5h5n3//////wf + Of/5//////85//n//////z3/+f//////gc/5///////Dz/n////////P+A/////Pf8/45////4Y/z/nz + ////Or/P+fP///48/+/58////nz/7/nz///+fP/n+ff///58/9f55////nz/2/kP////fP+b+Q////94 + f7n57////zp/PPnn////kns8+ef/////+Hz8z//////4/n4f//////3///////////////////////// + /////////////ygAAAAgAAAAQAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAAAAAAAA7 + OzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREQAAAA+Pj4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAAAAAAAAAAAAAAABYWFgAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH + BwcAAAAAAAAAAAAAAAAFBQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmZmZmYA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysAAAAAAAAAAAAAAAAODg4AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAuLi4fHx9OTk4AAAAAAAAAAABeXl5GRkYAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA1NTUAAAAAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ODhgYGAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAowAAAKMAAACjAAAAowAA + AKMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABWAAAArAAA + AOYAAAD/AAAA/wAAAP4AAADgAAAAoQAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABPAAAA3QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ALwAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHAAAAC5AAAA6wAAAP0AAAD6AAAA5QAAALIAAABoAAAACwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAlgAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPgAAADiAAAA+AAAAP8AAAD/AAAA/wAAAPgAAABhAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAGwAAADzAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAAVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAK8AAAA/AAAABQAAAAAAAAADAAAARAAA + AM4AAAD/AAAA/wAAAP8AAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACLAAAA/wAAAP8AAAD/AAAA/wAAAOoAAADGAAAAzwAAAPoAAAD/AAAA/wAA + AP8AAAD/AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAAA/wAAAP8AAAD/AAAA/wAA + APUAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAALAAAAD/AAAA/wAAAP4AAABlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAP8AAAD/AAAA/gAA + AKYAAAA4AAAAAQAAAAAAAAAAAAAAEgAAAJcAAAD/AAAA/wAAAP8AAAD/AAAASQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAYAAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAAAMwAAAD/AAAA/wAAAPkAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAADWAAAA/wAAAO4AAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJMAAAD/AAAA/wAAAP8AAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAADtAAAA/wAAAP8AAAD/AAAA/wAA + AHEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAPoAAAD/AAAA/wAA + AMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAP8AAADzAAAAMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAO4AAAD/AAAA/wAAAP8AAAAlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAjwAAAP8AAAD/AAAA/wAAAP8AAADKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAApQAAAP8AAAD/AAAA/wAAAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAGAAAA2gAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAArAAAAP8AAAD/AAAA/wAAAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAD2AAAA/wAAAP8AAAD/AAAA/wAA + AEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAA/wAA + AP8AAAD/AAAA4QAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAA/wAAAP8AAAD/AAAAVwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAcgAAAP8AAAD/AAAA/wAAAP8AAADTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADaAAAA/wAAAP8AAAD/AAAAYQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAANIAAAD/AAAA/wAAAP8AAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJAAAA/wAAAP8AAAD/AAAA/wAA + AHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJAAAAD/AAAA/wAAAP8AAADHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAA/wAAAP8AAAD/AAAA/AAA + ABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFwAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAP8AAAD/AAAA/wAAAP8AAAApAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAAAMsAAAD/AAAA/wAAAP8AAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAA/wAAAP8AAAD/AAAA/wAA + AOIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAjAAAA/wAAAP8AAAD/AAAA/wAAAHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACvAAAA/wAAAP8AAAD/AAAA/gAA + AEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAIwAAAD/AAAA/wAAAP8AAAD/AAAArQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAD2AAAA/wAAAP8AAAD/AAAAxAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAA + ACwAAAB2AAAA4QAAAP8AAAD/AAAA/wAAAP8AAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtgAAAP8AAAD/AAAA/wAA + AP8AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAANoAAAD/AAAA/wAAAP8AAAD4AAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAA + AIUAAADJAAAA8QAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAlwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiwAAAN8AAADfAAAA3wAAAN8AAADfAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADUAAAA/wAAAP8AAAD/AAAA/wAAAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzQAAAP8AAAD/AAAA/wAA + AP8AAAA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAKcAAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAyQAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAD/AAAA/wAA + AP8AAAD/AAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADAAAAA/wAAAP8AAAD/AAAA/wAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAADiAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADiAAAAzgAAAMAAAACnAAAAdgAAACwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA9wAAAP8AAAD/AAAA/wAAAP8AAAAxAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALoAAAD/AAAA/wAA + AP8AAAD/AAAAhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAGAAAA0wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAALgAAABYAAAAEQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAngAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9AAAA/wAA + AP8AAAD/AAAA/wAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAP8AAAD/AAAA/wAAAP8AAACkAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAANEAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAD/AAAA/wAAAP8AAAD/AAAAIQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAA/wAA + AP8AAAD/AAAA/wAAALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAKAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAC+AAAACwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4gAA + AP8AAAD/AAAA/wAAAP8AAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANcAAAD/AAAA/wAAAP8AAAD/AAAAwAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAAD/AAAA/wAA + AP8AAAD/AAAA6AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAA/wAAAP8AAAD/AAAA/wAAADkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5wAA + AP8AAAD/AAAA/wAAAP8AAADDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAArQAAAP8AAAD/AAAA/wAAAP8AAABuAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJgAAAD/AAAA/wAAAP8AAAD/AAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAD6AAAA/wAAAP8AAAD/AAAA/wAAALwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADxAAAA/wAA + AP8AAAD/AAAA+AAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAP8AAAD/AAAA/wAAAP8AAACBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAAAP8AAAD/AAAA/wAAAP8AAAC7AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAbAAAA/gAAAP8AAAD/AAAA/wAAALIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAA/wAA + AP8AAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFAAAA/wAAAP8AAAD/AAAA8wAA + AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AG4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIAAAD/AAAA/wAAAP8AAAD/AAAAVAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGQAAAD/AAAA/wAAAP8AAAD/AAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAVQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjQAA + AP8AAAD/AAAA/wAAAP8AAAA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAOgAAAD/AAAA/wAA + AP8AAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADhAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbAAAA/wAAAP8AAAD/AAAA/wAAACEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAbQAAAP8AAAD/AAAA/wAAAP4AAAAzAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA4gAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AKMAAAD/AAAA/wAAAP8AAAD/AAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA0QAA + AP8AAAD/AAAA/wAAALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACLAAAA/wAAAP8AAAD/AAAA/wAAAP8AAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAP8AAAD/AAAA/wAAAP8AAAAWAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAA+AAAAP8AAAD/AAAA/wAAAGcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAOgAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACiAAAA/wAAAP8AAAD/AAAA/wAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABkAAAA/wAAAP8AAAD/AAAA+AAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABpAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAGcAAACSAAAArQAAALoAAAC5AAAApQAAAHcAAAAtAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwAAAD/AAAA/wAAAP8AAAD/AAAAIAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkAAAD/AAAA/wAA + AP8AAAD/AAAA/gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA/wAAAP8AAAD/AAAA7wAA + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAZQAAANUAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADEAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAjAAAAP8AAAD/AAAA/wAAAP8AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAngAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAnwAAAP8AAAD/AAAA/wAAAP8AAAD4AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAB6AAAA/gAAAP8AAAD/AAAA9QAAAFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACNAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAHwAAAMsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD8AAAAggAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAA/wAAAP8AAAD/AAAA/wAA + AEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrAAAA/wAA + AP8AAAD/AAAA/wAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAA8QAA + AP8AAAD/AAAA/wAAAKwAAAAfAAAAAAAAAAAAAAAAAAAAZQAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA5QAA + ABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAADkAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArAAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAF4AAAD/AAAA/wAAAP8AAAD/AAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAD/AAAA/wAAAP8AAAD/AAAA2wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAtgAAAP8AAAD/AAAA/wAAAPkAAACbAAAANQAA + AIAAAAD9AAAA/wAAAP8AAAD/AAAA/wAAAPgAAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAFAAAAxgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANoAAACMAAAAZwAAAF0AAABzAAAAowAA + AOcAAAD/AAAA/wAAAP8AAAD/AAAAqAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAOgAAAP8AAAD/AAAA/wAA + AP8AAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1wAA + AP8AAAD/AAAA/wAAAP8AAADCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAARgAAAMMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADyAAAARAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APIAAABgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAEoAAADFAAAA/wAAAP8AAAD/AAAAdAAA + AAAAAAAAAAAAAAAAAAAAAAAUAAAA/wAAAP8AAAD/AAAA/wAAAK0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACeAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAJwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAKwAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA3QAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAA3wAAAP8AAAD/AAAA/wAAAP8AAADwAAAALgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABhAAAA8AAAAP8AAAD3AAAAKQAAAAAAAAAAAAAAAAAAAAAAAADhAAAA/wAA + AP8AAAD/AAAA3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAADgAAAJAAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAJsAAAANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAA2QAA + AP8AAADIAAAAAwAAAAAAAAAAAAAAAAAAAK0AAAD/AAAA/wAAAP8AAAD+AAAAEgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeAAAA8QAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAApgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAA/wAAAP8AAAD/AAAA/wAAAP4AAAAhAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAADlAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAMUAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAegAAAP8AAAD/AAAA/wAAAP8AAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAxwAAAPMAAAAgAAAAAAAAAAAAAAAAAAAAawAA + AP8AAAD/AAAA/wAAAP8AAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAD/AAAATAAAAAAAAAAAAAAAAAAAAAAAAADMAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD6AAAARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAA + APUAAAD/AAAA/wAAAP8AAAD/AAAAwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABxAAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMUAAABJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfAAAA/wAAAP8AAAD/AAAA/wAA + AIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAMAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAA/wAAAP8AAAD/AAAA/wAAAJUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAA + AP8AAADDAAAAAgAAAAAAAAAAAAAAKQAAAP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADzAAAAYAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8AAABBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAA + AKkAAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAALEAAAD/AAAA/wAAAP8AAAD/AAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADKAAAA/wAAAP8AAAD/AAAA6QAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA/QAAAP8AAACrAAAAMQAAAEAAAADTAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADlAAAA/wAAAP8AAAD/AAAAzwAAAHEAAAA7AAAAJgAAADwAAAB/AAAA8gAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AE8AAAD+AAAA/wAAAP8AAAD/AAAA+gAAAJUAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAP8AAAD/AAAA/wAA + AP8AAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAAD/AAAA/wAAAP8AAAD/AAAAUgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACQAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2wAAABgAAADfAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKwAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAA6gAAAP8AAAD/AAAA/wAAAMIAAAAnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACwAAAA/wAAAP8AAAD/AAAA/wAAAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACQAAAOcAAAD/AAAA/wAAAP8AAADQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAACyAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPMAAAA8AAAAAAAAAB4AAADOAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPoAAAB/AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AIkAAAD/AAAA/wAAAP8AAACPAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4AAAD/AAAA/wAA + AP8AAAD/AAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAP8AAAD/AAAA/wAA + AP8AAAB1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAB6AAAA8QAAAP8AAAD/AAAA/wAAAP8AAADVAAAAOAAAAAAAAAAAAAAAAAAA + AAcAAAByAAAA4gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOsAAACWAAAAIgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAA8gAAAP8AAAD/AAAApQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAACnAAAAzAAAAIUAAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAP8AAAD/AAAA/wAAAP8AAAD2AAAADwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAvwAAAP8AAAD/AAAA/wAAAPoAAABPAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAUAAA + AG4AAABhAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAALgAAAFgAAABtAAAAawAA + AFkAAAAvAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AEkAAAD/AAAA/wAAAPgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAA2AAAA7QAAAP8AAAD/AAAA/wAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAA9AAA + AP8AAAD/AAAA/wAAAP8AAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAA5QAA + AP8AAAD/AAAA/wAAAPkAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAApgAAAM4AAACbAAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAP8AAAD/AAAAzgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAOwAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAA/wAAAP8AAAD/AAAA/wAAAP0AAAB5AAAABAAA + AAAAAAARAAAATgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAA7QAAAP8AAAD/AAAA/wAAAP4AAACZAAAAOAAA + ABAAAAAYAAAAZQAAAPEAAAD/AAAA/wAAAP8AAACqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACTAAAA/wAAAP8AAACyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAsAAADSAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAgAAADNAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADhAAAArQAAAPUAAAD/AAAAqAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAsAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAA/wAAAMYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAArgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAABWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAADBAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD5AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAvAAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+QAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAbAAAAP8AAAD/AAAA+gAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AI0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+AAAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAABmAAAA4QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAbAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAE0AAAD+AAAA/wAAAP8AAADRAAAAzgAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAA/gAAAP8AAAD/AAAAngAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkAAADuAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA4gAAAAIAAAAAAAAAAAAAAA8AAACFAAAAsQAAAH8AAAAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAA3AAAAP8AAAD/AAAAqgAA + AAUAAAAAAAAACQAAADgAAABdAAAAewAAAH8AAAB+AAAAVwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACzAAAA/wAAAP8AAAD/AAAAkgAAAAsAAAAAAAAAAAAAAAAAAAAVAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABBAAAA+QAAAP8AAAD/AAAA/wAAAP8AAAC7AAAAhwAAAKcAAAA0AAAAAAAA + AAAAAAAAAAAAvwAAAP8AAAD/AAAA/wAAAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAABgAAADpAAAA/wAAAN8AAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADvAAAA/wAA + AP8AAAD/AAAA7AAAAKcAAACSAAAAsgAAAPcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ALwAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAOMAAAD/AAAA/wAA + AP8AAAD/AAAAjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADFAAAAagAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAH8AAAB/AAAAfwAAAH8AAABkAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAAB/AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABtAAAA/wAAAP8AAAD/AAAA/wAAANgAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAjQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAA + AP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AB0AAAC0AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPUAAACeAAAAIQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEAAAD/AAAA/wAA + AP8AAAD/AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAAiAAAAMUAAADxAAAA/gAA + AP8AAAD4AAAA3QAAAKMAAABiAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA8wAAAP8AAAD/AAAA/wAAAP8AAAAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAKQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAA + AP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAP4AAAD/AAAA/wAAAP8AAAD+AAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABBAAAA/wAAAP8AAAD/AAAA/wAAAP8AAABiAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7QAA + AP8AAAD/AAAA/wAAAP8AAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5AAAA/wAA + AP8AAAD/AAAA/wAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2AAAA/wAAAP8AAAD/AAAA/wAAAIkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADrAAAA/wAAAP8AAADYAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AGIAAAD/AAAA/wAAAP8AAAD/AAAA+QAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAA + AP8AAAD/AAAA/wAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAADCAAAA4AAA + AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAANYAAAD/AAAA/wAAAP8AAAD/AAAA9gAA + AH0AAAAiAAAAAAAAAAAAAAAIAAAAQAAAAKYAAAD/AAAA/wAAAP8AAADrAAAADwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAATAAAA6AAAAP8AAAD/AAAA/AAAADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAANQAAAPQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAA8gAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAD/AAAA/wAA + AP8AAAD/AAAAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAA + AMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAPIAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACvAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAA6AAAAP8AAAD/AAAA/wAAAP8AAAD5AAAADwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAMIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAAmwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAA + AP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AD4AAACfAAAA4QAAAP8AAAD/AAAA/wAAAP8AAADsAAAApQAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAB8AAAAmAAAAFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAA + AP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAMAAAA6AAAAbgAAAI4AAACbAAAAmQAAAIwAAAByAAAAQgAA + AAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAA0AAACDAAAA6gAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9QAAAKMAAAAtAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAA + AP8AAAD/AAAA/wAAAMgAAAAyAAAA4AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPwAAACIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABMAAAAUAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAkQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAA5QAAAO8AAAD/AAAA/wAA + AP8AAADiAAAAngAAAHIAAABgAAAAZwAAAIUAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAACgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAMgAAAKYAAADvAAAA/wAAAP8AAAD7AAAA0AAAAIAAAAAYAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAADgAAADVAAAA/gAAAPIAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADEAAAARwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABSAAAA8AAAAP8AAAD/AAAA/wAAAP8AAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAI4AAAD9AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPAAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA7gAAAP8AAAD/AAAA/wAA + AP8AAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAPcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAbwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAA+wAAAP8AAAD/AAAA/wAA + APMAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAUAAACwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACGAAAAAAAA + AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAM0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAvgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADIAAAD/AAAA/wAAAP8AAAD/AAAA9AAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACTAAAA/wAAAP8AAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APQAAAC8AAAApQAAAMYAAAD9AAAA/wAAAP8AAABvAAAAAAAAAAAAAAALAAAA9QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAD/AAAA/wAA + AP8AAAD/AAAAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AEkAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACTAAAAFAAAAAAAAAAAAAAAAAAAACsAAADbAAAA/wAA + APsAAAA3AAAAAAAAAE4AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAAD/AAAAbQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACYAAAD/AAAA/wAAAP8AAAD/AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8AAAD/AAAA/wAAAP8AAAD9AAAAEQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAagAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAD0AAAA/wAAANwAAAAJAAAAjQAAAP8AAAD/AAAA/wAA + AMkAAAAPAAAAKwAAAOEAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM4AAAD/AAAA/wAA + AP8AAADGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAA + AP8AAAD/AAAA/wAAAP8AAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AF4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AIIAAAD/AAAA/wAAAIQAAAC+AAAA/wAAAP8AAAD/AAAAPQAAAAAAAAAAAAAAagAAAMwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAAAP8AAAD/AAAA/wAAAJoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyAAAA/wAAAP8AAAD/AAAA/wAAAEUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAP8AAAD/AAAA/wAAAP8AAADuAAAADgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAPsAAAD/AAAA+AAAAPMAAAD/AAAA/wAA + AN8AAAAAAAAAAAAAAAAAAAApAAAA7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAA9wAA + AP8AAAD/AAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAA + AMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AKgAAAD/AAAA/wAAAP8AAAD/AAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABwAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAwgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAoQAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAA/wAAAP8AAABOAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAP8AAAD/AAAA/wAAAP8AAABHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAABtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AHAAAAD/AAAA/wAAAJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAA + AP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAC6AAAA/wAAAP8AAAD/AAAA/wAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACdAAAA/wAAAP8AAAD/AAAA/wAAAMcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAADcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkgAAAP8AAAD/AAAA9QAAABUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANcAAAD/AAAA/wAAAP8AAAD/AAAAGAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAD/AAAA/wAAAP8AAAD/AAAAfAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAPUAAAD/AAAA/wAA + AP8AAAD/AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADBAAAA/wAAAP8AAAD/AAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAA + AP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAA9wAAAP8AAAD/AAAA/wAAAOsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA5gAAAP8AAAD/AAAA/wAAAP8AAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAvgAAAP8AAAD/AAAA/wAAAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAPUAAAD/AAAAqgAAAP8AAADzAAAAFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAD/AAAA/wAAAP8AAAD/AAAApQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7AAAA/wAAAP8AAAD/AAAA/wAA + AB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAA/wAA + AP8AAAD/AAAAzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAA8AAAA/wAAAO0AAAAfAAAA/AAAAP8AAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAA + AP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAegAAAP8AAAD/AAAA/wAAAP8AAABNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkAAAD/AAAA/wAAAP8AAAD5AAAACwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAAtAAAAAAAAAC3AAAA/wAA + APoAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADdAAAA/wAAAP8AAAD/AAAAygAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA/QAAAP8AAAD/AAAA/wAA + AO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAA + AP8AAAD/AAAA/wAAAP8AAABLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA2QAAAP8AAAB4AAAAAAAAAE0AAAD/AAAA/wAAALMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAA + AP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAaQAAAP8AAAD/AAAA/wAAAPYAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADwAAAA/wAAAP8AAAD/AAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAA/wAAAP8AAAD/AAAA/wAAAI8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAAD/AAAA/wAAADgAAAAAAAAAAgAA + ANwAAAD/AAAA/wAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAADwAAAA/wAAAP8AAAD8AAAAVwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANcAAAD/AAAA/wAA + AP8AAADiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AIoAAAD/AAAA/wAAAP8AAAD/AAAAygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAkgAAAP8AAADzAAAABAAAAAAAAAAAAAAAcAAAAP8AAAD/AAAA1AAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACQAAAAAAAAAAAAAAAAAA + AAAAAAAZAAAA2AAAAP8AAAD/AAAA+AAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAswAAAP8AAAD/AAAA/wAAAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArwAAAP8AAAD/AAAA/wAAAP8AAAD6AAAACQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAADtAAAA/wAAALcAAAAAAAAAAAAA + AAAAAAAOAAAA8gAAAP8AAAD/AAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAA + AAAAAAAEAAAAmwAAAPcAAAD+AAAA2QAAAI8AAAAdAAAAMAAAANwAAAD/AAAA/wAAANsAAAAzAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAA/wAA + AP8AAAD/AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADdAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAYQAAAP8AAAD/AAAAcwAAAAAAAAAAAAAAAAAAAAAAAACSAAAA/wAAAP8AAADtAAAAEgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAAAMgAAAAAAAAAAAAAAFEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APkAAAD4AAAA/wAAAPoAAACNAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAD/AAAA/wAAAP8AAAD/AAAACQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAA/wAAAP8AAAAuAAAAAAAA + AAAAAAAAAAAAAAAAACUAAAD9AAAA/wAAAP8AAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAA + AAAAAAAAAAAATgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAApQAAAAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA + APQAAAD/AAAA/wAAAP8AAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABDAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAQgAAAP8AAAD/AAAA5AAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALUAAAD/AAAA/wAA + APsAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAMgAAAP8AAAD/AAAA/wAAAP8AAADIAAAAAAAAAAAAAAAPAAAA6AAAAP8AAAD/AAAA/wAA + AO4AAAC6AAAA/wAAAP8AAAD/AAAA0wAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqgAAAP8AAAD/AAAA/wAAAFwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAA/wAAAP8AAACYAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAP8AAAD/AAAA/wAAALsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP8AAAD/AAAA/wAA + AMgAAAAAAAAAAAAAAAAAAAAeAAAAgQAAAIcAAABRAAAABwAAAAAAAACEAAAA/wAAAP8AAAD/AAAA6QAA + ACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABKAAAA/wAAAP8AAAD/AAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA0AAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAAmAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAOAAAAP4AAAD/AAAA/wAAAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAA4AAA + AP8AAAD/AAAA/wAAAEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAADIAAAD/AAAA/wAAAP8AAAD/AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAADHAAAA/wAAAP8AAAD/AAAA2gAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADYAAAA/wAAAP8AAADmAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAAD/AAAA/wAAAP8AAACuAAAA/QAA + AP8AAAD/AAAA/wAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAA/wAAAP8AAADwAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAA/wAAAP8AAAD/AAAA1AAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAP8AAAD/AAAA/wAA + AP8AAADNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA/wAA + AP8AAAD/AAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFYAAAD/AAAA/wAAAP8AAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAkgAAAP8AAAD/AAAA/wAAAEcAAADUAAAA/wAAAP8AAAD/AAAAmQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAARQAAAP8AAAD/AAAA/wAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AB0AAAD9AAAA/wAAAP8AAAD/AAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAkAAAA/wAAAP8AAAD/AAAA/wAAAN0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAPsAAAD/AAAA/wAAAP8AAADhAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMIAAAD/AAAA/wAA + AL4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAD1AAAA/wAAAP8AAADfAAAAAgAA + AJsAAAD/AAAA/wAAAP8AAADTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADUAAAA/wAAAP8AAAD/AAAARwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL0AAAD/AAAA/wAAAP8AAADgAAAABgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAD9AAAA/wAA + AP8AAAD/AAAA9gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0wAA + AP8AAAD/AAAA/wAAAP8AAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAPMAAAD/AAAA/wAAAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAsgAAAP8AAAD/AAAA/wAAAGYAAAAAAAAAYgAAAP8AAAD/AAAA/wAAAP0AAAAQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWgAAAIsAAAAEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAdAAAAP8AAAD/AAAA/wAAAOUAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAXwAAAP8AAAD/AAAA/wAAAP8AAABqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANUAAAD/AAAA/wAAAP8AAAD/AAAAMwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAA/wAAAP8AAAD/AAAA/wAAAEMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA + APwAAAD/AAAA8wAAAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4AAAD/AAAA/wAAAP8AAADDAAAAAwAA + AAAAAAAoAAAA/wAAAP8AAAD/AAAA/wAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADqAAAA/wAAAHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAD3AAAA/wAAAP8AAAD/AAAAhQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA+gAAAP8AAAD/AAAA/wAA + AOIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjgAA + AP8AAAD/AAAA/wAAAP8AAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AK4AAAD/AAAA/wAAAP8AAAD/AAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAPoAAAD/AAAA+QAAAIsAAAAtAAAAGQAA + AEYAAADAAAAA/wAAAP8AAAD/AAAA0wAAABcAAAAAAAAAAAAAAAEAAADtAAAA/wAAAP8AAAD/AAAAggAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAP0AAAD/AAAA7wAAABgAAAAAAAAAAAAA + AAAAAAANAAAA0wAAAP8AAAD/AAAA/wAAAPsAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC5AAAA/wAAAP8AAAD/AAAA/wAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAAAA/gAAAP8AAAD/AAAA/wAAAOYAAAAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAP8AAAD/AAAA/wAAAP8AAAA4AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAARAAAAOIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAJwAAAANAAAAAAAA + AAAAAAAAAAAAAAAAALUAAAD/AAAA/wAAAP8AAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAA+AAAAP8AAAD/AAAAsAAAAAAAAAAAAAAACwAAALkAAAD/AAAA/wAAAP8AAAD/AAAApwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAAD/AAAA/wAA + AP8AAAD/AAAA0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACtAAAA/wAAAP8AAAD/AAAA/wAAAIsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAADrAAAA/wAAAP8AAAD/AAAA9wAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHEAAADFAAAA6wAA + AOwAAADZAAAAugAAAHcAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAwAAAAMAAAADAAA + AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAA/wAAAP8AAAD/AAAApwAA + AHEAAADTAAAA/wAAAP8AAAD/AAAA/wAAAP0AAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAPQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAADsAAAA/wAAAP8AAAD/AAAA/QAA + AF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAP8AAAD/AAAA/wAAAP8AAACpAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAHYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAApQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAA + AP8AAAD/AAAA/wAAAP8AAACiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEEAAAD3AAAA/wAAAP8AAAD/AAAA/AAAAIYAAAAJAAAAAAAAAAAAAAAAAAAAAAAA + ADQAAADpAAAA/wAAAP8AAAD/AAAA+QAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAPUAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPIAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAA/wAAAP8AAAD/AAAA/wAAAPIAAAAGAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAADvAAAA/wAA + AP8AAAD/AAAA/wAAAPAAAACnAAAAhwAAAIwAAAC8AAAA/QAAAP8AAAD/AAAA/wAAAP8AAABmAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAZgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AIoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAADAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD6AAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAA5QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAeQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABOAAAAuwAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD1AAAAoAAAACsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA8gAAAP8AAAD/AAAA/wAAAP8AAACTAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABiAAAA9wAAAPcAAAD3AAAA9wAAAPcAAACPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAEUAAABoAAAAdwAA + AG4AAABdAAAANwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAzAAAAvAAAANoAAACuAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////4D///////////////////+A///////// + ///////////gP///wA//////////////4D///4AD///////8AP///+A///4AAf//////8AB////gP//8 + AID///////AAP///4D///Afgf//////gMB///+A///gP8D//////wfwf///gP//wH/gf/////8P8D/// + 4D//8B/8H//////H/g///+A//+A//A////////4P///gP//gf/4P///////+D///4D//4H/+D/////// + /A///+A//8B//gf///////gf///gP//A//4H///////wH///4D//wP/+B///////gD///+A//8D//wP/ + ////gAA/gf/gP//A//8D/////gAA/4H/4D//wP//A/////wAA/+B/+A//8D//wP////4AP//gf/gP//A + //8D////+Af//4H/4D//wP//A/////AP//+B/+A//8D//wP////wH///gf/gP//A//8D////8D///4H/ + 4D//wP/+A////+A///+B/+A//8D//gP////gf///gf/gP//A//4D////4H///4H/4D//4H/+A////+B/ + //+B/+A//+B//gP////gf///gf/gP//gf/4D////4H///4H/4D//8D/8B////+B///+B/+A///A//Af/ + ///gf///gf/gP//4H/gH////4H///4H/4D///A/4D/8Af+B///+B/+A///4H8A/4AB/gf///gf/gf/// + A/Af8AAH4H///4H/4H///4DgH+AAA+B///+B/+B////AAD/AAAHgf///gf/gf///8AB/wB8B4H///4H/ + wH////gA/4B/4PB//8+A/8B////gAf+A//BwP//HgP/Af///wAf/gf/4cD//x4B/gP///4Af/4H//PA/ + /8MAPwD///8Af/+B///4H//AAAAB///+Af//gf//+B//4AAAAf///Af//4H///gP/+ACAAP///wP//+B + ///8D//wBwAP///4P/wfgP///Af//B/AP///+D/4H4D///4D4P////////h/8A/AI///AAD////////4 + f+APwAP//4AAf///////+H/AD+AB///AAH////////g/wA/wAf//wAD////////4P4Af+AGD/4EA//// + /////A4AH/ADg/+D//////////wAAD/gPwH/x///gf/////+AAB/4D8B/+f//4H//////wAB/+B/Af// + //+B///////AB//gfwH/////gf///////P//wH8B/////4H//////////8B/Af////+B///////////g + f4H/////gf//////////4H+D/////4H//////////+A/g/w///+B///////////gDAP4H///gf////// + ////8AAH+B///4H///////////gAB/AP//+B///////////8AA/wD///gf///////////wA/8A///4H/ + ///////////h//AP//+BwA/////////////wD///gQAD////////////8A///4AAAP/////h/+f///AP + //+AAAD/////gD+D///wD///gA/Af////gAfAf//8A///4A/4D////wADwH///gP//+A//A////8AAYA + ///4D///gf/wP///+AOCAP//+B///4H/+B////APwAD///wf//+B//gf///wH+AM///8H///gf/4H/// + 8B/gHP///B///4H/+B///+A/8B7///4f//+B//gf///gP/Af///+H///gf/4H///4H/wH////g///4H/ + +B///+B/8B////4P//+B//A////gf/g////8B///gf/wP///4H/4P////Af//4H/8D///8B/+B////xD + //+B/+A////A//gf///8Q///gf/gf///4P/4H///+EH//4H/wP///+D/+B////hg//+B54H////g//gP + ///w4P//gYAD////4P/4D///8PB//4GAB////+B/8A////Dwf/+BgA/////gf/AP///g+D//gYAH//// + 8H/wD///4fg//4HBA/////B/8Af//8H4H/+B/wH////wP+AH///B/A//gf+B////+D/gB///g/wP/4H/ + gf////w/wAf//wP+B/+A/8D////8H4ED/j8D/gf/wP/A/////g+BA/4+B/4D/8D/wP////8AAwP8HAf/ + A//Af8D/////gAeD/BgP/wP/4H+A/////8Afg/4AD/8B/+A/gf/////////+AB//gf/wDwH///////// + /gAf/4D/+AAD//////////8AP/+A//wAB///////////AH//gP//AA///////////4B//4D//8A///// + ///////B//////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8oAAAAQAAAAIAAAAABACAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAA + AFEAAABRAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAABMAAACOAAAA5AAAAP8AAAD3AAAAuAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAgAAAAaQAAAH0AAABmAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAA/wAAAP8AAACBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAADkAAAA/wAAAOoAAACOAAAAdwAAAMQAAAD9AAAAdwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAA/AAAAPkAAADkAAAA/QAAAPoAAABzAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAP8AAAD/AAAAgQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAADmAAAA/wAAAMwAAAAVAAAAAAAA + AAAAAAABAAAAoAAAAP4AAABjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKAAAA+gAAAHoAAAAOAAAAAAAA + ACoAAADkAAAA/wAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjAAAA/wAA + APEAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAsAAADnAAAA8gAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAA + AGAAAAAAAAAAAAAAAAAAAAAAAAAAagAAAP8AAACbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABLAAAA/wAAAP8AAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAhAAAA/AAAAP8AAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAP8AAACSAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAD/AAAApgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAP8AAAD/AAAAgQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAdwAAAP8AAAD/AAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADcAAAD/AAAA8QAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAC/AAAA/wAA + AHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAA + AIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAD/AAAA4wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAJAAAA/AAAAP8AAABOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + ACgAAACnAAAA/wAAAOQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABLAAAA/wAAAP8AAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiAAAA/wAA + ALYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOkAAAD/AAAAjQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAcwAA + ANMAAAD7AAAA/wAAAP8AAAD/AAAA/wAAAMQAAAAmAAAAAAAAAAAAAAAAAAAASgAAAO8AAADvAAAAdwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAASwAAAP8AAAD/AAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA+AAAAP8AAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeAAAA/wAA + ALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAtAAAAP8AAAD/AAAA7QAAAJkAAABsAAAAWQAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AE8AAAD/AAAA/wAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPsAAAD/AAAAkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA4QAAAP8AAADVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAP8AAAD/AAAApgAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABPAAAA/wAAAP8AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAA/wAA + AP8AAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpAAAA/wAAAJgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8AAAD/AAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMIAAAD/AAAA1QAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAP8AAAD/AAAAfwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAASwAAAP8AAAD/AAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvQAA + AP8AAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAD9AAAA/wAAANoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAD7AAAA/wAA + AHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA/wAA + AH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAHcAAAD/AAAA6QAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAA/wAA + AP8AAADFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAyAAAA/wAAAP8AAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABPAAAA/wAAAP8AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAA/wAAAP8AAACBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAA+QAAAP8AAABAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAYgAAAP8AAAD/AAAAnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAP8AAAD/AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAP8AAAD/AAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASwAA + AP8AAAD/AAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAD/AAAAugAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK8AAAD/AAAA/wAAAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD/AAAA/wAAAAwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA/wAAAH8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEsAAAD/AAAA/wAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAMAAAA1gAAAP8AAABnAAAAAAAAAAAAAAAAAAAAAAAAABwAAAD5AAAA/wAAAPIAAAAOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAkAAAATwAAAFwAAABHAAAACwAAAAAAAAAAAAAAAAAAAAAAAABPAAAA/wAA + AP8AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPAAAA/wAA + AP8AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAA/wAAAP8AAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADdAAAA+wAAAGIAAAAAAAAAAAAAAAAAAACdAAAA/wAA + AP8AAACCAAAAAAAAAAAAAAAAAAAAAAAAADsAAADOAAAA/wAAAP8AAAD/AAAA/wAAAPAAAABtAAAAAAAA + AAAAAAAAAAAAQQAAAP8AAAD/AAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAATwAAAP8AAAD/AAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAP8AAAD/AAAAegAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAALEAAAD/AAAAsAAA + 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 + AAAAAAAZAAAA/wAAAP8AAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAAG0AAACEAAAAdQAA + AEEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAP8AAAD/AAAADgAAAAAAAAAAAAAAAAAA + AMsAAAD/AAAA/wAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAD/AAAA/gAA + AAsAAAAAAAAAAAAAAAAAAAB+AAAA/wAAAP8AAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/wAAAGQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABGAAAA/wAAAP8AAABvAAAAAAAAAAAAAAAAAAAAIAAAAPoAAADTAAAAAAAAAAAAAAAAAAAAAAAA + ADsAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAA + AP8AAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAL8AAAD/AAAA/AAAAKcAAAB6AAAAkQAAAOgAAAD/AAAAWQAA + AAAAAAAAAAAAAAAAACcAAAD5AAAA/gAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAtQAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAAkwAAAAAAAAAAAAAAAAAAAAAAAACEAAAA/wAAAP8AAACUAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/wAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAA3AAAAewAAAJEAAACAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsQAAAP8AAAD/AAAAwAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAAAP8AAABkAAAAAAAA + AA8AAAA/AAAATQAAAD8AAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ALsAAAD/AAAA/wAAAM8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAA + AP8AAAD/AAAAcAAAAJsAAAD5AAAA/wAAAP8AAAD/AAAA/AAAALMAAAAiAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABlAAAAiQAA + AHQAAAAmAAAAAAAAAAAAAAAAAAAADgAAAHcAAABbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACkAAAA/wAAAP8AAADCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAABkAAAD/AAAA/wAAAPQAAADwAAAAigAAAEQAAAAxAAAAVQAAANAAAAD/AAAA5wAA + ABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AC4AAADiAAAA/wAAAP8AAAD/AAAA+wAAAHkAAAAAAAAAAAAAAKcAAAD/AAAA/wAAAEYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAAAP8AAAD/AAAApAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAAAP8AAADLAAAAHAAAAAAAAAAAAAAAAAAA + AAAAAAAOAAAA4wAAAP8AAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAABIAAADkAAAA/wAAAP8AAACmAAAAWAAAAHsAAAD2AAAAaAAAABYAAAD8AAAA/wAA + AP4AAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAAD/AAAA/wAA + AIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIcAAAD/AAAA8gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPAAAA/wAAAP8AAACBAAAAAAAAAAAAAAAAAAAAZgAA + APYAAAB2AAAA/wAAAMEAAAAOAAAArgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAzgAAAP8AAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABkAAAD/AAAA/wAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdAAAA/wAAAP8AAAAeAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAA8AAAAP8AAADaAAAAAwAA + AAAAAAAAAAAAAAAAAAcAAADvAAAA+gAAAP8AAABgAAAAAAAAAEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGsAAAD/AAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAAAP8AAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVgAA + AP8AAAD/AAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA + AP8AAAD/AAAAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAAAP8AAAD/AAAAKgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/wAAAGkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGQAAAD/AAAA/wAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGsAAAD/AAAA/wAAADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG4AAAD/AAAA+QAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAA + AOkAAADeAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/wAA + AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLAAAA/wAAAOMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAA/wAAAP4AAAAIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAzAAAA/wAAAPEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAALEAAABwAAAA7AAAAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAZAAAA/wAAAP8AAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1QAAAP8AAACFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAP8AAADzAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAP8AAAD/AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAD1AAAALAAAAIoAAADsAAAAEQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAA + AP8AAADSAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AGIAAAD/AAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4AAAD/AAAA/wAAAHMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAA6gAAAAEAAAAfAAAA+wAA + AJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD/AAAA/wAAAGQAAAABAAAAZQAA + AHgAAAArAAAASQAAAPUAAADBAAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6AAAA/wAA + AP8AAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAygAA + AKcAAAAAAAAAAAAAAKwAAAD6AAAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAA + AP8AAABkAAAAKAAAAP8AAAD/AAAA/QAAAP0AAACNAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOcAAAD/AAAAIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAsgAAAP8AAAD/AAAA5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAPgAAAP8AAABfAAAAAAAAAAAAAABAAAAA/wAAALgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAGQAAAP8AAAD/AAAAZAAAAAMAAAChAAAAtQAAAGwAAADgAAAA9AAAAE4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAA/wAA + AGAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAPMAAADqAAAA/gAAAP8AAAAhAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAD7AAAAFAAAAAAAAAAAAAAAAAAAANYAAAD/AAAASAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAD/AAAA/wAAAGUAAAAAAAAAAAAAAAAAAAAAAAAARQAA + AP8AAAD1AAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFQAAAO8AAADAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAAD/AAAAiQAAANsAAAD/AAAAWwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEcAAAD/AAAAuQAAAAAAAAAAAAAAAAAA + AAAAAAB2AAAA/wAAANAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAA/gAAAP8AAAB2AAAAAAAA + AAAAAAAAAAAAAAAAAAMAAADzAAAA/wAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAA/gAAAGQAAAAAAAAAAAAAACQAAADrAAAA8AAA + ABoAAACiAAAA/wAAAJUAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAIEAAAAAAAAAAAAAAAoAAADaAAAA/wAA + AFsAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAP0AAAD/AAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ANgAAAD/AAAArQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2gAAAP8AAACjAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAD2AAAArQAA + AJcAAADvAAAA5QAAAD4AAAAAAAAAaQAAAP8AAADPAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD7AAAAMgAA + AAIAAACmAAAA/wAAAOgAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAA/wAAAMwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAB2AAAA/wAAAPgAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAOkAAAD/AAAAjgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAHwAAAGwAAABxAAAATAAAAAgAAAAAAAAAAAAAAAEAAAAGAAAABQAAAAAAAAAAAAAAAAAA + AAAAAABPAAAA/wAAAOkAAADQAAAA/wAAAP8AAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA + AP8AAAD/AAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAMgAAAD/AAAA1QAAACQAAAAAAAAAAAAA + AFwAAAD/AAAA/QAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAOEAAAD/AAAA/wAAAP8AAADVAAAABwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAE4AAAD/AAAA/wAAAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAtAAA + AP8AAAD7AAAAywAAANEAAAD+AAAA/QAAAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAA+wAAAP8AAADkAAAAKAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAA+wAAAPsAAAC/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABCAAAAkwAAALcAAACyAAAAjAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADwAAABiAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////+H//////// + /4f/Af///g//h/4A///8B/+H/Bh///hD/4f8PD//+eP/h/h+P///4/+H+H4f///D/4f4/h///wP/h/j/ + H//gBw+H+P8f/8AfD4f4/x//wf8Ph/j/H//D/w+H+P4f/4f/D4f4fh//h/8Ph/h+H/+H/w+H/H4f/4f/ + D4f8PB8Hh/8Ph/4cPAOH/w+H/wA4AYf/D4f/wHhwh/sPh/+A8PxH+QcH/wPw/sP4AA/+D/D/w/gAD/w+ + MP/h/BA//HwwH+AP///8eDgP8Af///xwPAH4D////gA4EPH/D//+APhw+f8P//+B+HD//w/////4cP// + D/////hx5/8P////+AHD/w/////8A8P/D/////8Hw/8IP//////D/wAP//Bx/8P/AAf/4DD/w/8Hh//A + AP/D/w/D/8OA/+P/D8P/g4L/4/8Pw/+Hw//j/w/D/4fD/+H/D8f/h8P/4f8Px/+Pw//A/w+H/4/D/8D/ + AA//h8P/zH8AH/+Hw/+MfwAf/8eB/44/Dw//x4H/Hh8PD//jAeYeH4+P//AR4B8fh4//+DHgPw+DD/// + /+A/D8Af////8H8P8D/////4////////////////////////////////////////////////KAAAADAA + AABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAPQAA + ABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAPgAAADMAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAI8AAAD3AAAA7AAA + AN0AAADWAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAALAAAAhAAAANIAAADXAAAAnQAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAA + AP4AAACMAAAACgAAAAEAAABgAAAA8wAAADcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChAAAAsgAAAD8AAAA8AAAA0AAAANUAAAAHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABMAAAA/gAAALYAAAABAAAAAAAAAAAAAAAAAAAApgAAANUAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAB6AAAAAgAAAAAAAAAAAAAASgAA + AP4AAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC5AAAA/gAAAD4AAAAAAAAAAAAAAAAAAAAAAAAARAAAAP4AAABWAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAZAAAAP4AAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAA + AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAD1AAAA7wAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADAAA + AP0AAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAUAAABGAAAA5wAAAMcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AAAD+AAAAxAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAO0AAADpAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAGAAAAKMAAADwAAAA/gAAAPkAAADtAAAAoQAAABUAAAAAAAAAAAAAAHUAAADzAAAAmAAA + AAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0AAAD+AAAAsAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYAAAD+AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAEAAAAyAAAAP4AAACzAAAAPgAAABQAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + AHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ADIAAAD+AAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPEAAAD+AAAAJwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGAAAA/gAAALcAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAA8AAAD2AAAAzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAP4AAAD+AAAAIgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAA/gAAAEsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAA + AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2AAAA+gAAABMAAAAAAAAAAAAAAAAAAAAAAAAANAAA + AP4AAAD4AAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvAAAA/gAA + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAA + AAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/AAAAHsAAAAAAAAAAAAA + AAAAAAAAAAAAeAAAAP4AAADNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAC8AAAA/gAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAA + AAAAAAAAAAAAAAAAAAAAAAC3AAAA/gAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjgAA + APQAAAA1AAAAAAAAAAAAAAAGAAAA2gAAAP4AAABxAAAAAAAAAAAAAAAAAAAAFwAAAGEAAACCAAAAeAAA + ADAAAAAAAAAAAAAAAAAAAAC5AAAA/gAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAC5AAAA/gAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAJAAAADrAAAAWgAAAAMAAAB/AAAA/gAAANQAAAALAAAAAAAAAAAAAABTAAAA8QAA + AP4AAAD7AAAA+wAAAPsAAACGAAAAAgAAAAAAAACnAAAA/gAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAHsAAAD+AAAAnwAAAAAAAAAAAAAAAAAAAAAAAADDAAAA/gAAAFUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA2gAAAOIAAAD9AAAA2wAAACMAAAAAAAAAAAAA + ABkAAADxAAAA/AAAAHMAAAATAAAAEwAAAFgAAADZAAAAcwAAAAAAAACDAAAA/gAAAEQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAOAAAAAAAAAHsAAAD+AAAAoQAAAAAAAAAAAAAAAAAAAAMAAADgAAAA/gAA + ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAC2AAAA/gAAAPQAAACOAAAADgAA + AAAAAAAAAAAAAAAAAGcAAAD+AAAAmQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAoQAAAAUAAABLAAAA/gAA + AHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAACaAAAAAAAAAI4AAAD+AAAA7QAAACUAAAAAAAAAAAAA + AEcAAAD+AAAA5gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAANwAAADuAAAAhAAA + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAD+AAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAMAAAA7AAAAMsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADFAAAAnQAAAPAAAAD+AAAAtgAA + APAAAACiAAAAnQAAAPMAAAD3AAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAA + ANIAAAAdAAAAAAAAAAAAAAAAAAAAHAAAADAAAAAAAAAAAAAAAHAAAAD+AAAAhwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAP4AAABdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAoAAA + AMEAAABrAAAAAgAAAF4AAAC2AAAAxQAAAJsAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAA5wAAAFQAAAAAAAAAAAAAAAAAAAApAAAA6wAAAPoAAAAoAAAAAAAAACEAAADzAAAA7QAA + AEUAAABJAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAALAAAAD4AAAAegAAAE0AAAC9AAAAvgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAA6QAAAFsAAAAAAAAAAAAAABQAAADWAAAA/gAAAP0AAAAxAAAAAAAA + AAAAAABEAAAA5QAAAP4AAAD+AAAAQQAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAA4AAADlAAAA2AAA + AOoAAAD9AAAA4AAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlQAAAOAAAABRAAAATAAAANEAAAD+AAAA/gAA + AJcAAAAAAAAAAAAAAAAAAABDAAAA9gAAANIAAAB2AAAADgAAAIUAAADqAAAALQAAAAAAAAAAAAAAAAAA + ACcAAAC8AAAABwAAAAUAAAAPAAAACAAAAAAAAAAAAAAAAAAAAA8AAAAvAAAAGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAJUAAADxAAAA/gAA + APoAAADRAAAAXgAAAAAAAAAAAAAAAAAAAAAAAADAAAAA/gAAADQAAAAAAAAAAAAAANoAAAD+AAAAdQAA + AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAALAAAAIQAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA/gAAAAUAAAAAAAAAAAAA + AMIAAAD/AAAAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9AAAA/wAA + AEMAAAAAAAAAAAAAAF4AAAD9AAAAKwAAAAAAAAAAAAAAIQAAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAA9AAAA9gAAAPMAAACmAAAAqAAAAPIAAACsAAAAAAAAAAAAAAAHAAAA3wAAAOsAAAANAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAALMAAADjAAAA4AAAAJcAAAAPAAAAAAAAAAAAAAA3AAAA/gAA + AP4AAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAABgAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAABMAAAA/gAAAP4AAABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAkgAA + AIQAAADdAAAA8gAAAOgAAACsAAAALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEYAAACeAAAAmgAAAEgAAAAAAAAAAAAAAEEAAACbAAAAHQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAA1AAAA/gAAAP4AAABOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AFIAAAD+AAAA+QAAALUAAABKAAAAJgAAAE0AAADdAAAA8QAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAP0AAAD7AAAAyAAAAOEAAAB7AAAABAAAAOUAAAD/AAAAmwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAA7gAAAP4AAAAuAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFIAAAD+AAAAqAAAAAEAAAAAAAAAAAAAAAAAAABHAAAA/gAAAJwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAA9QAAAPkAAABJAAAAAAAAAA4AAADTAAAAeAAA + AP8AAAB/AAAAmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgAAAPcAAAAPAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAAAAAAARAAAA+AAA + ANIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAA/wAAAJgAAAAAAAAAAAAA + AAAAAABuAAAA/AAAAPQAAAAMAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgAA + AOYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAAAAAA + AAAAAAALAAAA9QAAANoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBAAAA/wAA + AD0AAAAAAAAAAAAAAAAAAAAqAAAA/QAAAM0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAQAAAAPsAAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAA + AAAAAAAAAAAAAAAAAAAAAAAbAAAA+wAAAL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADdAAAA/gAAAAoAAAAAAAAAAAAAAAAAAAAEAAAA6AAAALYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAJoAAAC9AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAAAAAABWAAAA/gAAAHEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADZAAAA9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5QAAAOoAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAB0AAADVAAAAUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAAAAAAAAAAAAAAAAAA0AAADTAAAAwAAAAAcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAA+gAAAAAAAAAAAAAAAAAAAAAAAAARAAAA9wAA + AP4AAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA1QAAAAAAAABrAAAA2wAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAADwAAADaAAAAqgAAAMMAAACUAAAACwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5AAAA/gAAABUAAAAAAAAAAAAA + AAAAAAA+AAAA/gAAAP8AAABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfAAAAkAAA + AAAAAAAPAAAA7gAAAHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAAD+AAAAigAAAC8AAADMAAAAmwAA + AOsAAACJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAA9gAA + AFMAAAAAAAAAAAAAAAAAAACLAAAA4wAAAPsAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACUAAAD4AAAAQQAAAAAAAAAAAAAAlAAAAO8AAAAYAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAD+AAAAjQAA + AAAAAAAAAAAAAAAAAGgAAAD+AAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAhwAAAMIAAAAEAAAAAAAAABoAAADsAAAAewAAAM4AAADYAAAAAQAAAAAAAAAAAAAAFwAA + ACQAAAAAAAAAAAAAAK4AAADiAAAABgAAAAAAAAAAAAAANQAAAP4AAACOAAAAAAAAAAAAAAAAAAAAAAAA + ADcAAAD+AAAAqQAAAAAAAAAAAAAAAAAAACwAAAD+AAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAKUAAAC1AAAAcAAAANYAAACyAAAACQAAAJUAAAD7AAAAFwAA + AAAAAAAAAAAAXQAAAMkAAAAEAAAAZAAAAP4AAACCAAAAAAAAAAAAAAAAAAAAAAAAAN8AAADyAAAAFgAA + AAAAAAAAAAAAAAAAAAYAAADfAAAA8QAAABUAAAAAAAAAAAAAACwAAAD+AAAArgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3AAAAVgAAAC8AAAAAAAAAAAAA + AAIAAAAEAAAAAAAAAAAAAAAAAAAALwAAAP4AAADaAAAA/AAAAO0AAAAWAAAAAAAAAAAAAAAAAAAAAAAA + AJgAAAD+AAAAdQAAAAAAAAAAAAAAAAAAAAAAAABGAAAA9gAAAMYAAAAxAAAAGgAAAKMAAAD9AAAAUQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALYAAAD/AAAA/QAAAF8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAG8AAAD+AAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANgAAALwAAADzAAAA+QAA + ANsAAABnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAACGAAAASgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA8AAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAKAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///////////////////////////+P///4f////4///+A//8D/j///4B//wH+P///Dj + /+Mf4///8eP//x/j///h4//8H+P//+Px/8Ax4///4/H/gPHj///j8f+H8eP//+Ph/4/x4///8eH/j/Hj + ///x4/+P8eP///jDg4/x4///+AMAj/Hj///+BgCPkcP///wOPA+Qw///+D4/h4AH///45j/HwA////HC + B8B/////8YMF4D/////4BwDgcf////gPGPfx/////j8Y//H//////xjP8f//////AYfx//////+Bh/Gf + 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 + AAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAAAAAAAASAAAAfAAAAGMAAAAGAAAAAAAAAAAAAAAAAAAAAAAA + ADUAAABlAAAAGwAAAAAAAAAAAAAAkgAAACAAAAAAAAAAjQAAABsAAAAbAAAAbgAAAAAAAAAAAAAAAAAA + AAAAAAAOAAAANQAAAFoAAAAAAAAAAAAAAJIAAAAgAAAAAAAAAKMAAAAAAAAAAAAAAKkAAAAAAAAAAAAA + AAAAAAA9AAAAlQAAAEoAAAACAAAAsAAAAAAAAACSAAAAIAAAAAAAAACHAAAADwAAABQAAACpAAAAAAAA + AAAAAAAAAAAAjAAAAAwAAAAAAAAAAAAAALMAAAAAAAAAkgAAACAAAAAAAAAAEAAAAHQAAACRAAAARQAA + AGAAAACMAAAAXwAAAIoAAAAMAAAAAAAAAAEAAACzAAAAAAAAAJgAAAAaAAAAAAAAABMAAACQAAAAMgAA + AAUAAACmAAAAAAAAABMAAABOAAAASgAAAAAAAABTAAAAswAAAHcAAACUAAAAAAAAAAAAAABEAAAAPgAA + AKUAAABSAAAAfQAAAHYAAAAuAAAAAAAAAIoAAACFAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AEwAAABAAAAAAAAAAJgAAAANAAAAqgAAAAMAAAAFAAAAAAAAAAAAAACeAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAoAAAAhwAAAEAAAABgAAAAZQAAAAAAAAAAAAAAnwAAAEMAAAAyAAAAAAAA + AAAAAAAAAAAAKwAAAJwAAABVAAAAngAAAAAAAAAAAAAAUAAAAGMAAAAAAAAAAAAAAK4AAAAgAAAAfQAA + AC0AAAAAAAAAAAAAAJEAAAAZAAAAYwAAAEwAAAAAAAAAAAAAABwAAABiAAAAAAAAAAAAAACeAAAAAAAA + AGEAAAA6AAAAAAAAAAAAAACNAAAAAgAAAFoAAABjAAAAAAAAAAAAAABVAAAAZAAAAA4AAAAAAAAAngAA + AF8AAAB/AAAAAAAAAAAAAAAAAAAALgAAAFIAAACAAAAAjAAAAA0AAAAmAAAAfwAAABYAAAB/AAAAAAAA + AJ4AAAACAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAABQAAAAAAAAAFAAAAtwAAACcAAAAAAAAAhwAA + AAAAAAApAAAAbQAAAFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8nEGHjJxBh4ycQbcEnEGHNJxBgCScQYIhnEGAl5xByDecQfgx + nEHDMJxBwzScQcMRnEHAEZxB5FGcQf//nEE= - False + False - CenterParent + CenterParent - Writing System Properties + Writing System Properties - helpProvider + helpProvider - System.Windows.Forms.HelpProvider, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.HelpProvider, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - WritingSystemPropertiesDialog + WritingSystemPropertiesDialog - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + \ No newline at end of file diff --git a/Src/Kernel/FwKernel_GUIDs.cpp b/Src/Kernel/FwKernel_GUIDs.cpp index 1483e94545..90998a0371 100644 --- a/Src/Kernel/FwKernel_GUIDs.cpp +++ b/Src/Kernel/FwKernel_GUIDs.cpp @@ -25,7 +25,6 @@ DEFINE_UUIDOF(TsStrBldr, 0xF1EF76EB, 0xBE04, 0x11d3, 0x8D, 0x9A, 0x00, 0x50, 0x0 DEFINE_UUIDOF(TsIncStrBldr, 0xF1EF76EC, 0xBE04, 0x11d3, 0x8D, 0x9A, 0x00, 0x50, 0x04, 0xDE, 0xFE, 0xC4); DEFINE_UUIDOF(TsPropsBldr, 0xF1EF76ED, 0xBE04, 0x11d3, 0x8D, 0x9A, 0x00, 0x50, 0x04, 0xDE, 0xFE, 0xC4); DEFINE_UUIDOF(TsMultiString, 0x7A1B89C0, 0xC2D6, 0x11d3, 0x9B, 0xB7, 0x00, 0x40, 0x05, 0x41, 0xF9, 0xE9); -DEFINE_UUIDOF(ILgInputMethodEditor, 0xE1B27A5F, 0xDD1B, 0x4BBA, 0x9B, 0x72, 0x00, 0xBD, 0xE0, 0x31, 0x62, 0xFC); DEFINE_UUIDOF(IVwGraphics, 0xF7233278, 0xEA87, 0x4FC9, 0x83, 0xE2, 0xCB, 0x7C, 0xC4, 0x5D, 0xEB, 0xE7); DEFINE_UUIDOF(IJustifyingRenderer, 0x1141174B, 0x923F, 0x4C43, 0xBA, 0x43, 0x8A, 0x32, 0x6B, 0x76, 0xA3, 0xF2); DEFINE_UUIDOF(ISimpleInit, 0x6433D19E, 0x2DA2, 0x4041, 0xB2, 0x02, 0xDB, 0x11, 0x8E, 0xE1, 0x69, 0x4D); @@ -49,15 +48,9 @@ DEFINE_UUIDOF(ILgSpellChecker, 0xE3661AF5, 0x26C6, 0x4907, 0x92, 0x43, 0x61, 0x0 DEFINE_UUIDOF(ILgCollatingEngine, 0xD27A3D8C, 0xD3FE, 0x4E25, 0x90, 0x97, 0x8F, 0x4A, 0x1F, 0xB3, 0x03, 0x61); DEFINE_UUIDOF(ILgSearchEngine, 0x09FCA8D5, 0x5BF6, 0x4BFF, 0xA3, 0x17, 0xE0, 0x12, 0x64, 0x10, 0xD7, 0x9A); DEFINE_UUIDOF(ILgWritingSystem, 0x9F74A170, 0xE8BB, 0x466d, 0x88, 0x48, 0x5F, 0xDB, 0x28, 0xAC, 0x5A, 0xF8); -DEFINE_UUIDOF(ILgTextServices, 0x5B6303DE, 0xE635, 0x4DD7, 0xA7, 0xFC, 0x34, 0x5B, 0xEE, 0xF3, 0x52, 0xD8); -DEFINE_UUIDOF(ILgFontManager, 0x73718689, 0xB701, 0x4241, 0xA4, 0x08, 0x4C, 0x38, 0x9E, 0xCD, 0x66, 0x64); -DEFINE_UUIDOF(LgInputMethodEditor, 0x659C2C2F, 0x7AF6, 0x4F9E, 0xAC, 0x6F, 0x7A, 0x03, 0xC8, 0x41, 0x8F, 0xC9); -DEFINE_UUIDOF(LgFontManager, 0x02C3F580, 0x796D, 0x4B5F, 0xBE, 0x43, 0x16, 0x6D, 0x97, 0x31, 0x9D, 0xA5); DEFINE_UUIDOF(ILgIcuCharPropEngine, 0xE8689492, 0x7622, 0x427b, 0x85, 0x18, 0x63, 0x39, 0x29, 0x4F, 0xD2, 0x27); DEFINE_UUIDOF(ILgNumericEngine, 0xCBBF35E1, 0xCE39, 0x4EEC, 0xAE, 0xBD, 0x5B, 0x4A, 0xAA, 0xA5, 0x2B, 0x6C); DEFINE_UUIDOF(ILgKeymanHandler, 0x3F42144B, 0x509F, 0x4def, 0x8D, 0xD3, 0x6D, 0x8D, 0x26, 0x67, 0x70, 0x01); -DEFINE_UUIDOF(ILgCodePageEnumerator, 0x2CFCF4B7, 0x2FFE, 0x4CF8, 0x91, 0xBE, 0xFB, 0xB5, 0x7C, 0xC7, 0x78, 0x2A); -DEFINE_UUIDOF(ILgLanguageEnumerator, 0x746A16E1, 0x0C36, 0x4268, 0xA2, 0x61, 0xE8, 0x01, 0x2B, 0x0D, 0x67, 0xC5); DEFINE_UUIDOF(ILgIcuConverterEnumerator, 0x8E6D558E, 0x8755, 0x4EA1, 0x9F, 0xF6, 0x03, 0x9D, 0x37, 0x53, 0x12, 0xE9); DEFINE_UUIDOF(ILgIcuTransliteratorEnumerator, 0x50F2492C, 0x6C46, 0x48BA, 0x8B, 0x7F, 0x5F, 0x04, 0x15, 0x3A, 0xB2, 0xCC); DEFINE_UUIDOF(ILgIcuLocaleEnumerator, 0x08F649D0, 0xD8AB, 0x447B, 0xAA, 0xB6, 0x21, 0xF8, 0x5C, 0xFA, 0x74, 0x3C); @@ -72,9 +65,6 @@ DEFINE_UUIDOF(LgWfiSpellChecker, 0x818445E2, 0x0282, 0x4688, 0x8B, 0xB7, 0x14, 0 DEFINE_UUIDOF(LgMSWordSpellChecker, 0x5CF96DA5, 0x299E, 0x4FC5, 0xA9, 0x90, 0x2D, 0x2F, 0xCE, 0xE7, 0x83, 0x4D); DEFINE_UUIDOF(LgNumericEngine, 0xFF22A7AB, 0x223E, 0x4D04, 0xB6, 0x48, 0x0A, 0xE4, 0x05, 0x88, 0x26, 0x1D); DEFINE_UUIDOF(LgKeymanHandler, 0x69ACA99C, 0xF852, 0x4C2C, 0x9B, 0x5F, 0xFF, 0x83, 0x23, 0x8A, 0x17, 0xA5); -DEFINE_UUIDOF(LgTextServices, 0x720485C5, 0xE8D5, 0x4761, 0x92, 0xF0, 0xF7, 0x0D, 0x2B, 0x3C, 0xF9, 0x80); -DEFINE_UUIDOF(LgCodePageEnumerator, 0x9045F113, 0x8626, 0x41C0, 0xA6, 0x1E, 0xA7, 0x3F, 0xBE, 0x59, 0x20, 0xD1); -DEFINE_UUIDOF(LgLanguageEnumerator, 0xB887505B, 0x74DE, 0x4ADC, 0xA1, 0xD9, 0x55, 0x53, 0x42, 0x8C, 0x8D, 0x02); DEFINE_UUIDOF(LgIcuConverterEnumerator, 0x9E729461, 0xF80D, 0x4796, 0xBA, 0x17, 0x08, 0x6B, 0xC6, 0x19, 0x07, 0xF1); DEFINE_UUIDOF(LgIcuTransliteratorEnumerator, 0x3F1FD0A4, 0xB2B1, 0x4589, 0xBC, 0x82, 0x9C, 0xEF, 0x5B, 0xA8, 0x4F, 0x4E); DEFINE_UUIDOF(LgIcuResourceBundle, 0x0DD7FC1A, 0xAB97, 0x4A39, 0x88, 0x2C, 0x26, 0x97, 0x60, 0xD8, 0x66, 0x19); diff --git a/Src/Language/Language.idh b/Src/Language/Language.idh index 2fda7a5c0d..13b3f58ca7 100644 --- a/Src/Language/Language.idh +++ b/Src/Language/Language.idh @@ -47,7 +47,6 @@ Description: interface ICollation; interface ILgWritingSystem; interface ILgWritingSystemFactory; - interface ILgTextServices; //:>**************************************************************************************** //:> Enumerations @@ -244,13 +243,6 @@ Description: [propget] HRESULT ISO3( [out, retval] BSTR * pbstr); - // Get the locale assigned to this writing system. - [propget] HRESULT LCID( - [out, retval] int * pnLocale); - // Set the locale for this writing system. - [propput] HRESULT LCID( - [in] int nLocale); - // Get the name of the spelling dictionary to use for this writing system. // Currently returns a generally-useful default, unless explicitly set to empty // to prevent this. @@ -325,177 +317,10 @@ Description: //:> These are the interfaces for the engines--the code that actually does the work. //:>**************************************************************************************** - /******************************************************************************************* - Interface ILgInputMethodEditor - Functions related to special ways of typing for exotic writing systems. - The ${#Setup} method is called before the user types something and may do things at the - system level (such as setting the current system IME or Keyman file) to change what is - received through WM_CHAR. The other methods allow post-processing of what is received - through WM_CHAR. - - @h3{When to implement} - Clients should not normally implement this interface. Standard implementations are in - Language.dll. If you have a very unusual input method requirement, you could make your - own implementation. - - Note: current FieldWorks code is @i{not} using this approach to typing. Check out - @HTTP{intranet.sil.org/softwaredev/project_status.htm} to see if there are any plans. - - @h3{When to use} - Most programmers will not use this interface directly. It is used by the Views - subsystem and controls that accept typing in vernacular scripts. - - @h3{How to obtain an instance} - At present, you can't. Eventually OldWritingSystem will implement a method. Some - implemenations may also be available through CoCreateInstance. - - @h3{Hungarian: ime} - - *******************************************************************************************/ - DeclareInterface(LgInputMethodEditor, Unknown, E1B27A5F-DD1B-4BBA-9B72-00BDE03162FC) - { - // GET THE SYSTEM READY TO use this input method; for example, switch Keyman to the - // proper table. - HRESULT Setup(); - - // Given something the user typed, following any preprocessing that happens - // automatically as a result of Setup (e.g., Keyman processing), do any further - // processing required to actually replace the selected part of the string with what - // the user typed. - // The default implementation just replaces characters from ichMin to ichLim with - // those from bstrInput, then sets *pichModMin to ichMin, and *pichModLim and - // *pichIP both to ichMin + BstrLen(bstrInput). - // @param bstrInput What the user typed. - // @param pttpInput Text properties desired for new text - // @param ptsbOld Original, unedited text, gets modified by this method - // @param ichMin Range in old ptsbOld to replace - // @param ichLim Range in old ptsbOld to replace - // @param pichModMin Range in modified ptsbOld that is different from before - // @param pichModLim Range in modified ptsbOld that is different from before - // @param pichIP Position of insertion point in modified string - // @return The result is the modified string represented by ptsbOld. - // @exception E_INVALIDARG ichMin/Lim is not a valid range within ptsbOld - [local, restricted] HRESULT Replace( - [in] BSTR bstrInput, - [in] ITsTextProps * pttpInput, - [in] ITsStrBldr * ptsbOld, - [in] int ichMin, - [in] int ichLim, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP); - - // The user pressed a certain number of backspaces. Delete an appropriate amount of - // the string represented by the input string builder, indicating exactly what changed. - // Also, if there were not enough characters to delete, indicate how many backspaces - // were left over. - // @param pichStart start position (delete characters before here) - // @param cactBackspace number of backspaces pressed - // @param ptsbOld the text being edited; gets changed by this call - // @param pichModMin range in output text affected - // @param pichModLim range in output text affected - // @param pichIP position of IP in modified string - // @param pcactBsRemaining Number not handled, caller should apply to previous run or - // string - HRESULT Backspace( - [in] int pichStart, - [in] int cactBackspace, - [in] ITsStrBldr * ptsbOld, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP, - [out] int * pcactBsRemaining); - - // The user pressed a certain number of delete forward characters. Compute the effect on - // ptsbInOut - // Also, if there were not enough characters to delete, indicate how many backspaces - // were left over. - // @param pichStart start position (delete characters after here) - // @param cactDelForward number of DF pressed - // @param ptsbInOut the text being edited; gets changed by this call - // @param pichModMin range in output text affected - // @param pichModLim range in output text affected - // @param pichIP position of IP in modified string - // @param pcactDfRemaining Number not handled, caller should apply to next run or string - HRESULT DeleteForward( - [in] int pichStart, - [in] int cactDelForward, - [in] ITsStrBldr * ptsbInOut, - [out] int * pichModMin, - [out] int * pichModLim, - [out] int * pichIP, - [out] int * pcactDfRemaining); - - // Return true if input method considers an IP at the specified index reasonable. - // Note that really useful IPs should also satisfy the Renderer; see - // ${ILgSegment#IsValidInsertionPoint}. - HRESULT IsValidInsertionPoint( - [in] int ich, - [in] ITsString * ptss, - [out, retval] BOOL * pfValid); - }; - - /******************************************************************************************* - Interface ILgFontManager - Obtain a list of the (TrueType) fonts that are available on the system, and handle - simple queries about font availability. - - Note: the font manager may load the available fonts once, and use this cached list - to answer subsequent queries. To be sure the answer to a query is current, call - RefreshFontList. - - @h3{When to implement} - Clients should not implement this interface. There is a standard implementation in - Language.dll. - - @h3{When to use} - Use this interface when you need to know whether a given font is available on the - system, or to get a list of available fonts. - - @h3{How to obtain an instance} - Use CoCreateInstance, CLSID_LgFontManager. Or use the CreateInstance() method of a - smart pointer. - - @h3{Hungarian: fm} - *******************************************************************************************/ - DeclareInterface(LgFontManager, Unknown, 73718689-B701-4241-A408-4C389ECD6664) - { - // Is the given font available? - HRESULT IsFontAvailable( - [in] BSTR bstrName, - [out, retval] ComBool * pfAvail); - - // Is the given font available? - HRESULT IsFontAvailableRgch( - [in] int cch, - [in] OLECHAR * prgchName, - [out, retval] ComBool * pfAvail); - - // Get the list of available fonts delimited by L'\0'. - HRESULT AvailableFonts( - [out] BSTR * pbstrNames); - - // Update the list of fonts (by re-reading from the OS). - HRESULT RefreshFontList(); - }; - - //:>**************************************************************************************** //:> CoClass definitions. //:>**************************************************************************************** - #ifndef NO_COCLASSES - DeclareCoClass(LgInputMethodEditor, 659C2C2F-7AF6-4F9E-AC6F-7A03C8418FC9) - { - interface ILgInputMethodEditor; - }; - - DeclareCoClass(LgFontManager, 02C3F580-796D-4B5F-BE43-166D97319DA5) - { - interface ILgFontManager; - }; - #endif // !NO_COCLASSES - // Flags used to specify variations on how to collate. // Default is all listed options off. // Except where noted, options are orthogonal and may be ORed together for combined @@ -1672,9 +1497,9 @@ Description: /******************************************************************************************* Interface ILgKeymanHandler - An interface that manages Keyman, being able to invoke a keyboard, find out which - one is active, find out which keyboards are available, return the windows message that - Keyman sends when a keyboard is selected, and so forth. + Last vestigaes of an interface that manages Keyman, being able to find out which + one is active, if any. This is not implemented for Mono, since the one remaining caller + is simply coded to know there is no Keyman keyboard. @h3{When to implement} The standard implementation should suffice. @@ -1699,108 +1524,9 @@ DeclareInterface(LgKeymanHandler, Unknown, 3F42144B-509F-4def-8DD3-6D8D26677001) // that we don't rely on garbage collection. HRESULT Close(); - // Obtain the number of keyboard layouts currently avaiable. - [propget] HRESULT NLayout( - [out, retval] int * pclayout); - // Obtain the ith layout name. - [propget] HRESULT Name( - [in] int ilayout, - [out, retval] BSTR * pbstrName); - // Get/Set the active keyboard. + // Get the active keyboard. [propget] HRESULT ActiveKeyboardName( [out, retval] BSTR * pbstrName); - [propput] HRESULT ActiveKeyboardName( - [in] BSTR bstrName); - // Return the windows message (obtained from RegisterWindowsMessage("WM_KMSELECTLANG"). - [propget] HRESULT KeymanWindowsMessage( - [out, retval] int * pwm); - // Enhance JohnT: might be useful to add GetKeymanVersion, StartKeyman. -}; - -/******************************************************************************************* - Interface ILgTextServices - - Provide access to TSF functionality wrapped in easy-to-call methods. - - @h3{When to implement} - Clients should not implement this interface. There is a standard implementation in - Language.dll. - - @h3{When to use} - When TSF related functionality is needed, especially from C# code which does not have - a built-in access path. - - @h3{How to obtain an instance} - Use CoCreateInstance, CLSID_LgTextServices. Or use the CreateInstance() method of a - smart pointer. - - @h3{Hungarian: lts} -*******************************************************************************************/ -DeclareInterface(LgTextServices, Unknown, 5B6303DE-E635-4DD7-A7FC-345BEEF352D8) -{ - // Set the system keyboard and TSF language. - HRESULT SetKeyboard( - [in] int nLcid, - [in] BSTR bstrKeymanKbd, - [in, out] int * pnActiveLangId, - [in, out] BSTR * pbstrActiveKeymanKbd, - [in, out] ComBool * pfSelectLangPending - ); -}; - -/******************************************************************************************* - Interface ILgCodePageEnumerator - - An interface that allows retrieving a list of the code pages installed on the system, - with names suitable for displaying in a combo box. - - @h3{When to implement} - The standard implementation should suffice. - - @h3{When to use} - Whenever you want to retrieve a list of available code pages. - - @h3{Hungarian: lcpe} -*******************************************************************************************/ -DeclareInterface(LgCodePageEnumerator, Unknown, 2CFCF4B7-2FFE-4CF8-91BE-FBB57CC7782A) -{ - - // Initialize enumerator. This default initializer gives all known code pages. - // We may eventually have others that allow them to be limited. - HRESULT Init(); - - // Get the next code page. When there are no more, sets pnId to 0 and pbstrName to null. - HRESULT Next( - [out] int * pnId, - [out] BSTR * pbstrName); -}; - -/******************************************************************************************* - Interface ILgLanguageEnumerator - - An interface that allows retrieving a list of the languages installed on the system, - with names suitable for displaying in a combo box. - - @h3{When to implement} - The standard implementation should suffice. - - @h3{When to use} - Whenever you want to retrieve a list of available languages. - - @h3{Hungarian: lcpe} -*******************************************************************************************/ -DeclareInterface(LgLanguageEnumerator, Unknown, 746A16E1-0C36-4268-A261-E8012B0D67C5) -{ - - // Initialize enumerator. This default initializer gives all installed languages. - // We may eventually have others that allow them to be limited. - HRESULT Init(); - - // Get the next language. When there are no more, sets pnId to 0 and pbstrName to null. - // For a language unsupported by the OS, it returns the id along with E_FAIL. - HRESULT Next( - [out] int * pnId, - [out] BSTR * pbstrName); }; /******************************************************************************************* @@ -2086,18 +1812,6 @@ DeclareInterface(RegexMatcher, Unknown, 6C62CCF0-4EE1-493C-8092-319B6CFBEEBC) { interface ILgKeymanHandler; }; - DeclareCoClass(LgTextServices, 720485C5-E8D5-4761-92F0-F70D2B3CF980) - { - interface ILgTextServices; - }; - DeclareCoClass(LgCodePageEnumerator, 9045F113-8626-41C0-A61E-A73FBE5920D1) - { - interface ILgCodePageEnumerator; - }; - DeclareCoClass(LgLanguageEnumerator, B887505B-74DE-4ADC-A1D9-5553428C8D02) - { - interface ILgLanguageEnumerator; - }; DeclareCoClass(LgIcuConverterEnumerator, 9E729461-F80D-4796-BA17-086BC61907F1) { interface ILgIcuConverterEnumerator; diff --git a/Src/Language/Language.mak b/Src/Language/Language.mak index bb6df50b18..0e382e62f2 100644 --- a/Src/Language/Language.mak +++ b/Src/Language/Language.mak @@ -57,97 +57,30 @@ LINK_LIBS=Generic.lib Usp10.lib xmlparse.lib $(LINK_LIBS) # === Object Lists === -# not currently used -OBJ_LANMODEL=\ - $(INT_DIR)\genpch\LgCharOverride.obj\ - $(INT_DIR)\autopch\LgCharPropSpec.obj\ - $(INT_DIR)\autopch\LgCharSpec.obj\ - $(INT_DIR)\autopch\LgCollaterSpec.obj\ - $(INT_DIR)\autopch\LgComponent.obj\ - $(INT_DIR)\autopch\LgConverterSpec.obj\ - $(INT_DIR)\autopch\LgConvertStringSpec.obj\ - $(INT_DIR)\autopch\LgExternalSpecComponent.obj\ - $(INT_DIR)\autopch\LgLineBreakSpaceSpec.obj\ - $(INT_DIR)\autopch\LgLineBreakSpec.obj\ - $(INT_DIR)\autopch\LgOwnedSpecComponent.obj\ - $(INT_DIR)\autopch\LgNumericConverterSpec.obj\ - $(INT_DIR)\autopch\LgRenderSpec.obj\ - $(INT_DIR)\autopch\LgRomanRendererSpec.obj\ - $(INT_DIR)\autopch\LgSpec.obj\ - $(INT_DIR)\autopch\LgSpellCheckSpec.obj\ - $(INT_DIR)\autopch\LgSysCollaterSpec.obj\ - $(INT_DIR)\autopch\LgTokenizerSpec.obj\ - $(INT_DIR)\autopch\LgUnicodeCollaterSpec.obj\ - $(INT_DIR)\autopch\LgUserClassSpec.obj\ - $(INT_DIR)\autopch\LgWfiCheckerSpec.obj\ - $(INT_DIR)\autopch\LgWinRendSpec.obj\ - $(INT_DIR)\autopch\LgWordBreakSpaceSpec.obj\ - $(INT_DIR)\autopch\LgCPWordTokenizer.obj\ - $(INT_DIR)\autopch\LgNumericEngine.obj\ - $(INT_DIR)\autopch\FwStyledText.obj\ - $(INT_DIR)\autopch\WriteXml.obj\ - $(INT_DIR)\autopch\LangDef.obj\ - $(INT_DIR)\usepch\TextProps1.obj\ - $(INT_DIR)\autopch\FwXml.obj\ - OBJ_LANG=\ $(INT_DIR)\genpch\RegexMatcherWrapper.obj\ $(INT_DIR)\autopch\LgIcuWrappers.obj\ - $(INT_DIR)\autopch\LgCodePageEnumerator.obj\ - $(INT_DIR)\autopch\LgKeymanHandler.obj\ $(INT_DIR)\autopch\UniscribeEngine.obj\ $(INT_DIR)\autopch\UniscribeSegment.obj\ $(INT_DIR)\autopch\RomRenderEngine.obj\ $(INT_DIR)\autopch\RomRenderSegment.obj\ $(INT_DIR)\autopch\LgSimpleEngines.obj\ $(INT_DIR)\autopch\LgIcuCharPropEngine.obj\ - $(INT_DIR)\autopch\LgFontManager.obj\ $(INT_DIR)\autopch\LgUnicodeCollater.obj\ - $(INT_DIR)\autopch\LgInputMethodEditor.obj\ + $(INT_DIR)\autopch\LgKeymanHandler.obj\ $(INT_DIR)\autopch\ModuleEntry.obj\ $(INT_DIR)\autopch\FwStyledText.obj\ $(INT_DIR)\autopch\WriteXml.obj\ $(INT_DIR)\usepch\TextProps1.obj\ $(INT_DIR)\autopch\FwXml.obj\ - $(INT_DIR)\autopch\LgTextServices.obj\ - $(INT_DIR)\autopch\LanguageGlobals.obj\ $(INT_DIR)\autopch\dlldatax.obj\ -XMO_LANGSERV=\ - $(COM_INT_DIR)\LgCharOverride.xmo\ - $(COM_INT_DIR)\LgCharPropSpec.xmo\ - $(COM_INT_DIR)\LgCharSpec.xmo\ - $(COM_INT_DIR)\LgCollaterSpec.xmo\ - $(COM_INT_DIR)\LgComponent.xmo\ - $(COM_INT_DIR)\LgConverterSpec.xmo\ - $(COM_INT_DIR)\LgConvertStringSpec.xmo\ - $(COM_INT_DIR)\LgWritingSystemModel.xmo\ - $(COM_INT_DIR)\LgExternalSpecComponent.xmo\ - $(COM_INT_DIR)\LgLineBreakSpaceSpec.xmo\ - $(COM_INT_DIR)\LgLineBreakSpec.xmo\ - $(COM_INT_DIR)\LgOwnedSpecComponent.xmo\ - $(COM_INT_DIR)\LgNumericConverterSpec.xmo\ - $(COM_INT_DIR)\LgRenderSpec.xmo\ - $(COM_INT_DIR)\LgRomanRendererSpec.xmo\ - $(COM_INT_DIR)\LgSpec.xmo\ - $(COM_INT_DIR)\LgSpellCheckSpec.xmo\ - $(COM_INT_DIR)\LgSysCollaterSpec.xmo\ - $(COM_INT_DIR)\LgTokenizerSpec.xmo\ - $(COM_INT_DIR)\LgUnicodeCollaterSpec.xmo\ - $(COM_INT_DIR)\LgUserClassSpec.xmo\ - $(COM_INT_DIR)\LgWfiCheckerSpec.xmo\ - $(COM_INT_DIR)\LgWinRendSpec.xmo\ - $(COM_INT_DIR)\LgWordBreakSpaceSpec.xmo\ - OBJ_GRUTIL=\ ## $(INT_DIR)\autopch\TtfUtil.obj\ $(INT_DIR)\autopch\GrUtil.obj\ - -# XMO_ALL=$(XMO_LANGSERV) - IDL_MAIN=$(COM_OUT_DIR)\LanguageTlb.idl PS_MAIN=LanguagePs diff --git a/Src/Language/Language.vcxproj b/Src/Language/Language.vcxproj index 404dfbaea7..847e71362b 100644 --- a/Src/Language/Language.vcxproj +++ b/Src/Language/Language.vcxproj @@ -94,16 +94,11 @@ - - - - - @@ -114,16 +109,11 @@ - - - - - @@ -138,6 +128,7 @@ + diff --git a/Src/Language/LanguageExtra_GUIDs.cpp b/Src/Language/LanguageExtra_GUIDs.cpp index 1da6026992..b113448168 100644 --- a/Src/Language/LanguageExtra_GUIDs.cpp +++ b/Src/Language/LanguageExtra_GUIDs.cpp @@ -6,6 +6,5 @@ #include -DEFINE_UUIDOF(KeyboardSwitcher,0x4ED1E8bC,0xDAdE,0x11DE,0xB3,0x50,0x00,0x19,0xDB,0xf4,0x56,0x6E); DEFINE_UUIDOF(UniscribeSegment,0x61299C3B,0x54D6,0x4c46,0xAC,0xE5,0x72,0xB9,0x12,0x8F,0x20,0x48); DEFINE_UUIDOF(RomRenderSegment,0xA124E0C1,0xDD4B,0x11d2,0x80,0x78,0x00,0x00,0xC0,0xFB,0x81,0xB5); diff --git a/Src/Language/LanguageGlobals.cpp b/Src/Language/LanguageGlobals.cpp deleted file mode 100644 index a1bd46858e..0000000000 --- a/Src/Language/LanguageGlobals.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/*-----------------------------------------------------------------------*//*:Ignore in Surveyor -Copyright (C) 2010 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LanguageGlobals.cpp -Responsibility: Calgary -Last reviewed: - - Contains what should be the only static or global objects (not scalers) that - exist in the Language module. --------------------------------------------------------------------------------*//*:End Ignore*/ - -#include "Main.h" - -// Nothing should directly reference this. -static LanguageGlobals g_language; - -LanguageGlobals::LanguageGlobals() -{ - -} - -LanguageGlobals::~LanguageGlobals() -{ - -} - -// The single global instance of the LgFontManager. -LgFontManager LanguageGlobals::g_fm; // Global LgFontManager. - -#ifdef WIN32 -// The single global instance of the LgTextServices. -LgTextServices LanguageGlobals::g_lts; -#endif diff --git a/Src/Language/LanguageGlobals.h b/Src/Language/LanguageGlobals.h deleted file mode 100644 index 88d022cab4..0000000000 --- a/Src/Language/LanguageGlobals.h +++ /dev/null @@ -1,45 +0,0 @@ -/*-----------------------------------------------------------------------*//*:Ignore in Surveyor -Copyright (C) 2010 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LanguageGlobals.h -Responsibility: Calgary -Last reviewed: - - Contains what should be the only static or global objects (not scalers) that - exist in the Language module. - This was done to control the order of construction and (mainly) destruction). - see FWNX-177. --------------------------------------------------------------------------------*//*:End Ignore*/ - -#if _MSC_VER -#pragma once -#endif -#ifndef LanguageGlobals_H -#define LanguageGlobals_H 1 - -#include "LgFontManager.h" - -#ifdef WIN32 -#include "LgTextServices.h" -#endif - -class LanguageGlobals -{ -public: - LanguageGlobals(); - ~LanguageGlobals(); - - // Originally from LgFontManager.h - static LgFontManager g_fm; // Global LgFontManager. - -#ifdef WIN32 - // Originally from LgTextServices.cpp - static LgTextServices g_lts; -#endif - -}; - -#endif diff --git a/Src/Language/Language_GUIDs.cpp b/Src/Language/Language_GUIDs.cpp index 4f38ba86c5..3678dc48b2 100644 --- a/Src/Language/Language_GUIDs.cpp +++ b/Src/Language/Language_GUIDs.cpp @@ -25,7 +25,6 @@ DEFINE_UUIDOF(TsStrBldr, 0xF1EF76EB, 0xBE04, 0x11d3, 0x8D, 0x9A, 0x00, 0x50, 0x0 DEFINE_UUIDOF(TsIncStrBldr, 0xF1EF76EC, 0xBE04, 0x11d3, 0x8D, 0x9A, 0x00, 0x50, 0x04, 0xDE, 0xFE, 0xC4); DEFINE_UUIDOF(TsPropsBldr, 0xF1EF76ED, 0xBE04, 0x11d3, 0x8D, 0x9A, 0x00, 0x50, 0x04, 0xDE, 0xFE, 0xC4); DEFINE_UUIDOF(TsMultiString, 0x7A1B89C0, 0xC2D6, 0x11d3, 0x9B, 0xB7, 0x00, 0x40, 0x05, 0x41, 0xF9, 0xE9); -DEFINE_UUIDOF(ILgInputMethodEditor, 0xE1B27A5F, 0xDD1B, 0x4BBA, 0x9B, 0x72, 0x00, 0xBD, 0xE0, 0x31, 0x62, 0xFC); DEFINE_UUIDOF(IVwGraphics, 0xF7233278, 0xEA87, 0x4FC9, 0x83, 0xE2, 0xCB, 0x7C, 0xC4, 0x5D, 0xEB, 0xE7); DEFINE_UUIDOF(IJustifyingRenderer, 0x1141174B, 0x923F, 0x4C43, 0xBA, 0x43, 0x8A, 0x32, 0x6B, 0x76, 0xA3, 0xF2); DEFINE_UUIDOF(ISimpleInit, 0x6433D19E, 0x2DA2, 0x4041, 0xB2, 0x02, 0xDB, 0x11, 0x8E, 0xE1, 0x69, 0x4D); @@ -49,15 +48,9 @@ DEFINE_UUIDOF(ILgSpellChecker, 0xE3661AF5, 0x26C6, 0x4907, 0x92, 0x43, 0x61, 0x0 DEFINE_UUIDOF(ILgCollatingEngine, 0xD27A3D8C, 0xD3FE, 0x4E25, 0x90, 0x97, 0x8F, 0x4A, 0x1F, 0xB3, 0x03, 0x61); DEFINE_UUIDOF(ILgSearchEngine, 0x09FCA8D5, 0x5BF6, 0x4BFF, 0xA3, 0x17, 0xE0, 0x12, 0x64, 0x10, 0xD7, 0x9A); DEFINE_UUIDOF(ILgWritingSystem, 0x9F74A170, 0xE8BB, 0x466d, 0x88, 0x48, 0x5F, 0xDB, 0x28, 0xAC, 0x5A, 0xF8); -DEFINE_UUIDOF(ILgTextServices, 0x5B6303DE, 0xE635, 0x4DD7, 0xA7, 0xFC, 0x34, 0x5B, 0xEE, 0xF3, 0x52, 0xD8); -DEFINE_UUIDOF(ILgFontManager, 0x73718689, 0xB701, 0x4241, 0xA4, 0x08, 0x4C, 0x38, 0x9E, 0xCD, 0x66, 0x64); -DEFINE_UUIDOF(LgInputMethodEditor, 0x659C2C2F, 0x7AF6, 0x4F9E, 0xAC, 0x6F, 0x7A, 0x03, 0xC8, 0x41, 0x8F, 0xC9); -DEFINE_UUIDOF(LgFontManager, 0x02C3F580, 0x796D, 0x4B5F, 0xBE, 0x43, 0x16, 0x6D, 0x97, 0x31, 0x9D, 0xA5); DEFINE_UUIDOF(ILgIcuCharPropEngine, 0xE8689492, 0x7622, 0x427b, 0x85, 0x18, 0x63, 0x39, 0x29, 0x4F, 0xD2, 0x27); DEFINE_UUIDOF(ILgNumericEngine, 0xCBBF35E1, 0xCE39, 0x4EEC, 0xAE, 0xBD, 0x5B, 0x4A, 0xAA, 0xA5, 0x2B, 0x6C); DEFINE_UUIDOF(ILgKeymanHandler, 0x3F42144B, 0x509F, 0x4def, 0x8D, 0xD3, 0x6D, 0x8D, 0x26, 0x67, 0x70, 0x01); -DEFINE_UUIDOF(ILgCodePageEnumerator, 0x2CFCF4B7, 0x2FFE, 0x4CF8, 0x91, 0xBE, 0xFB, 0xB5, 0x7C, 0xC7, 0x78, 0x2A); -DEFINE_UUIDOF(ILgLanguageEnumerator, 0x746A16E1, 0x0C36, 0x4268, 0xA2, 0x61, 0xE8, 0x01, 0x2B, 0x0D, 0x67, 0xC5); DEFINE_UUIDOF(ILgIcuConverterEnumerator, 0x8E6D558E, 0x8755, 0x4EA1, 0x9F, 0xF6, 0x03, 0x9D, 0x37, 0x53, 0x12, 0xE9); DEFINE_UUIDOF(ILgIcuTransliteratorEnumerator, 0x50F2492C, 0x6C46, 0x48BA, 0x8B, 0x7F, 0x5F, 0x04, 0x15, 0x3A, 0xB2, 0xCC); DEFINE_UUIDOF(ILgIcuLocaleEnumerator, 0x08F649D0, 0xD8AB, 0x447B, 0xAA, 0xB6, 0x21, 0xF8, 0x5C, 0xFA, 0x74, 0x3C); @@ -72,9 +65,6 @@ DEFINE_UUIDOF(LgWfiSpellChecker, 0x818445E2, 0x0282, 0x4688, 0x8B, 0xB7, 0x14, 0 DEFINE_UUIDOF(LgMSWordSpellChecker, 0x5CF96DA5, 0x299E, 0x4FC5, 0xA9, 0x90, 0x2D, 0x2F, 0xCE, 0xE7, 0x83, 0x4D); DEFINE_UUIDOF(LgNumericEngine, 0xFF22A7AB, 0x223E, 0x4D04, 0xB6, 0x48, 0x0A, 0xE4, 0x05, 0x88, 0x26, 0x1D); DEFINE_UUIDOF(LgKeymanHandler, 0x69ACA99C, 0xF852, 0x4C2C, 0x9B, 0x5F, 0xFF, 0x83, 0x23, 0x8A, 0x17, 0xA5); -DEFINE_UUIDOF(LgTextServices, 0x720485C5, 0xE8D5, 0x4761, 0x92, 0xF0, 0xF7, 0x0D, 0x2B, 0x3C, 0xF9, 0x80); -DEFINE_UUIDOF(LgCodePageEnumerator, 0x9045F113, 0x8626, 0x41C0, 0xA6, 0x1E, 0xA7, 0x3F, 0xBE, 0x59, 0x20, 0xD1); -DEFINE_UUIDOF(LgLanguageEnumerator, 0xB887505B, 0x74DE, 0x4ADC, 0xA1, 0xD9, 0x55, 0x53, 0x42, 0x8C, 0x8D, 0x02); DEFINE_UUIDOF(LgIcuConverterEnumerator, 0x9E729461, 0xF80D, 0x4796, 0xBA, 0x17, 0x08, 0x6B, 0xC6, 0x19, 0x07, 0xF1); DEFINE_UUIDOF(LgIcuTransliteratorEnumerator, 0x3F1FD0A4, 0xB2B1, 0x4589, 0xBC, 0x82, 0x9C, 0xEF, 0x5B, 0xA8, 0x4F, 0x4E); DEFINE_UUIDOF(LgIcuResourceBundle, 0x0DD7FC1A, 0xAB97, 0x4A39, 0x88, 0x2C, 0x26, 0x97, 0x60, 0xD8, 0x66, 0x19); diff --git a/Src/Language/LgCPWordTokenizer.cpp b/Src/Language/LgCPWordTokenizer.cpp deleted file mode 100644 index f497646a6c..0000000000 --- a/Src/Language/LgCPWordTokenizer.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgCPWordTokenizer.cpp -Responsibility: John Thomson -Last reviewed: Not yet. - -Description: A Tokenizer that finds word breaks by looking for sequences of word-forming - tokens. A word-forming token is recognized by the IsWordforming function - contained in the header file. The IsWordforming function recognizes capital - and lowercase letters to be word-forming by using the predefined function isalpha. --------------------------------------------------------------------------------*//*:End Ignore*/ - -//:>******************************************************************************************** -//:> Include files -//:>******************************************************************************************** -#include "Main.h" - -#pragma hdrstop -#undef THIS_FILE -DEFINE_THIS_FILE - -//:>******************************************************************************************** -//:> Forward declarations -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Local Constants and static variables -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Constructor/Destructor -//:>******************************************************************************************** - -LgCPWordTokenizer::LgCPWordTokenizer() -{ - m_cref = 1; - ModuleEntry::ModuleAddRef(); -} - -LgCPWordTokenizer::~LgCPWordTokenizer() -{ - ModuleEntry::ModuleRelease(); -} -//:>******************************************************************************************** -//:> Generic factory stuff to allow creating an instance with CoCreateInstance. -//:>******************************************************************************************** -static GenericFactory g_fact( - "SIL.Language1.LgCPWordTokenizer", - &CLSID_LgCPWordTokenizer, - "SIL char property based word tokenizer", - "Apartment", - &LgCPWordTokenizer::CreateCom); - - -void LgCPWordTokenizer::CreateCom(IUnknown *punkCtl, REFIID riid, void ** ppv) -{ - AssertPtr(ppv); - Assert(!*ppv); - if (punkCtl) - ThrowHr(WarnHr(CLASS_E_NOAGGREGATION)); - - ComSmartPtr qcpwt; - qcpwt.Attach(NewObj LgCPWordTokenizer()); // ref count initialy 1 - CheckHr(pcpwt->QueryInterface(riid, ppv)); -} - -//:>******************************************************************************************** -//:> IUnknown Methods -//:>******************************************************************************************** -STDMETHODIMP LgCPWordTokenizer::QueryInterface(REFIID riid, void **ppv) -{ - AssertPtr(ppv); - if (!ppv) - return WarnHr(E_POINTER); - *ppv = NULL; - - if (riid == IID_IUnknown) - *ppv = static_cast(static_cast(this)); - else if (riid == IID_ILgTokenizer) - *ppv = static_cast(this); - else if (riid == IID_ISupportErrorInfo) - { - *ppv = NewObj CSupportErrorInfo2(static_cast(this), - IID_ISimpleInit, IID_ILgTokenizer); - return S_OK; - } - else - return E_NOINTERFACE; - - AddRef(); - return NOERROR; -} - - -//:>******************************************************************************************** -//:> ISimpleInit Methods -//:>******************************************************************************************** - -/*---------------------------------------------------------------------------------------------- - Initialize an instance from a ClassInitMoniker - - To create a suitable moniker, do something like this: - - IClassInitMonikerPtr qcim; - hr = qcim.CreateInstance(CLSID_ClassInitMoniker); - hr = qcim->InitNew(CLSID_LgCPWordTokenizer, NULL, 0); - - Note that no init data is required by this implementation which is based on standard - character properties. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgCPWordTokenizer::InitNew(const BYTE * prgb, int cb) -{ - BEGIN_COM_METHOD - ChkComArrayArg(prgb, cb); - - // Nothing to do at present. - END_COM_METHOD(g_fact, IID_ISimpleInit); -} - -/*---------------------------------------------------------------------------------------------- - Return the initialization value previously set by InitNew. - - @param pbstr Pointer to a BSTR for returning the initialization data. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgCPWordTokenizer::get_InitializationData(BSTR * pbstr) -{ - BEGIN_COM_METHOD - ChkComOutPtr(pbstr); - // Leave output null. - END_COM_METHOD(g_fact, IID_ISimpleInit); -} - - -//:>******************************************************************************************** -//:> ILgTokenizer Methods -//:>******************************************************************************************** - -/*---------------------------------------------------------------------------------------------- - Get the next token of whatever kind this tokenizer supports from the input string. - Return E_FAIL if there are no more. (Also set *pichMin and *pichLim to -1.) - ENHANCE: should we pass an ichFirst? -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgCPWordTokenizer::GetToken(OLECHAR * prgchInput, int cch, int * pichMin, - int * pichLim) -{ - BEGIN_COM_METHOD - ChkComArrayArg(prgchInput, cch); - ChkComArgPtr(pichMin); - ChkComArgPtr(pichLim); - - // checks arguments - - int cchCount = 0; - bool fFirst = false; // flags if a wordforming character has been found - - // steps through input - while(cchCount < cch) - { - // checks to see if input is a wordforming character - if(IsWordforming(*prgchInput)) - { - // input is the first wordforming character - if(!fFirst) - { - *pichMin = cchCount; - fFirst = true; - } - } - // if input is not a wordforming character and pichMin has been set - else - { - if(fFirst) - { - *pichLim = cchCount; - return S_OK; - } - } - prgchInput++; - cchCount++; - } - // no token is found - if(!fFirst) - { - *pichMin = *pichLim = -1; - return E_FAIL; - } - // token goes to the end of input - else - *pichLim = cch; - END_COM_METHOD(g_fact, IID_ILgTokenizer); -} - -/*---------------------------------------------------------------------------------------------- - For VB, get the start of the first token that begins at or after ichFirst - Characters before ichFirst are not examined; the result is as if the string - began at ichFirst. - Return E_FAIL if no token found -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgCPWordTokenizer::get_TokenStart(BSTR bstrInput, int ichFirst, int * pichMin) -{ - BEGIN_COM_METHOD - ChkComBstrArgN(bstrInput); - ChkComArgPtr(pichMin); - if (ichFirst < 0) - ThrowInternalError(E_INVALIDARG, "Negative char offset"); - - OLECHAR * pchInput; - int cch = 0; - pchInput = bstrInput + ichFirst; - - while (*pchInput != '\0') - { - // if the input is wordforming, assign to pichMin and exit loop - if(IsWordforming(*pchInput)) - { - *pichMin = cch; - return S_OK; - } - pchInput++; - cch++; - } - // a wordforming character is not found - return E_FAIL; - END_COM_METHOD(g_fact, IID_ILgTokenizer); -} - -/*---------------------------------------------------------------------------------------------- - For VB, get the end of the first token that BEGINS at or after ichFirst. - Note: ichFirst may be the result obtained from a previous call to TokenStart, - rather than the value passed to TokenStart, but to obtain the limit of the same - token it must not be larger than that. In other words, this method does NOT - find the first end-of-token at or after ichFirst: it must find a complete token - starting there. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgCPWordTokenizer::get_TokenEnd(BSTR bstrInput, int ichFirst, int * pichLim) -{ - BEGIN_COM_METHOD - ChkComBstrArgN(bstrInput); - ChkComArgPtr(pichLim); - if (ichFirst < 0) - ThrowInternalError(E_INVALIDARG, "Negative char offset"); - - OLECHAR * pchInput; - bool fFirst = false; - int cch = 0; - pchInput = bstrInput + ichFirst; - - while(*pchInput != '\0') - { - if(IsWordforming(*pchInput)) - { - // if first wordforming character is found - if(!fFirst) - fFirst = true; - } - else - { - // a non-wordforming character is found after fFirst is true - if(fFirst) - { - *pichLim = cch; - return S_OK; - } - } - cch++; - pchInput++; - } - // if no wordforming characters are found - if(!fFirst) - return E_FAIL; - - // end of string is reached before finding pichLim - else - *pichLim = cch; - END_COM_METHOD(g_fact, IID_ILgTokenizer); -} diff --git a/Src/Language/LgCPWordTokenizer.h b/Src/Language/LgCPWordTokenizer.h deleted file mode 100644 index aa716c48a7..0000000000 --- a/Src/Language/LgCPWordTokenizer.h +++ /dev/null @@ -1,80 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgCPWordTokenizer.h -Responsibility: John Thomson -Last reviewed: Not yet. - -Description: - --------------------------------------------------------------------------------*//*:End Ignore*/ -#pragma once -#ifndef LGCPWORDTOKENIZER_INCLUDED -#define LGCPWORDTOKENIZER_INCLUDED - -/*---------------------------------------------------------------------------------------------- -Class: LgCPWordTokenizer -Description: A Tokenizer that finds word breaks by looking for sequences of word-forming - tokens. A word-forming token is a letter, capital or lowercase (as recognized - by the built-in function isalpha. -Hungarian: cpwt -----------------------------------------------------------------------------------------------*/ -class LgCPWordTokenizer : - public ILgTokenizer, - public ISimpleInit -{ -public: - // Static methods - static void CreateCom(IUnknown *punkOuter, REFIID iid, void ** ppv); - - // Constructors/destructors/etc. - LgCPWordTokenizer(); - virtual ~LgCPWordTokenizer(); - - // IUnknown methods - STDMETHOD(QueryInterface)(REFIID iid, void ** ppv); - STDMETHOD_(UCOMINT32, AddRef)(void) - { - return InterlockedIncrement(&m_cref); - } - STDMETHOD_(UCOMINT32, Release)(void) - { - long cref = InterlockedDecrement(&m_cref); - if (cref == 0) { - m_cref = 1; - delete this; - } - return cref; - } - - // ISimpleInit Methods - STDMETHOD(InitNew)(const BYTE * prgb, int cb); - STDMETHOD(get_InitializationData)(BSTR * pbstr); - - // ILgTokenizer methods - STDMETHOD(GetToken)(OLECHAR * prgchInput, int cch, int * pichMin, int * pichLim); - STDMETHOD(get_TokenStart)(BSTR bstrInput, int ichFirst, int *pichMin); - STDMETHOD(get_TokenEnd)(BSTR bstrInput, int ichFirst, int *pichLim); - - // Member variable access - - // Other public methods - -protected: - // Member variables - long m_cref; // standard COM ref count - - // Static methods - - // Constructors/destructors/etc. - - // Other protected methods - bool IsWordforming(OLECHAR ch) - { - return isalpha(ch); - } -}; -#endif //LGCPWORDTOKENIZER_INCLUDED diff --git a/Src/Language/LgCodePageEnumerator.cpp b/Src/Language/LgCodePageEnumerator.cpp deleted file mode 100644 index 1617fb97ef..0000000000 --- a/Src/Language/LgCodePageEnumerator.cpp +++ /dev/null @@ -1,287 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgCodePageEnumerator.cpp -Responsibility: John Thomson -Last reviewed: Not yet. - -Description: - --------------------------------------------------------------------------------*//*:End Ignore*/ - -//:>******************************************************************************************** -//:> Include files -//:>******************************************************************************************** -#include "Main.h" -#pragma hdrstop -// any other headers (not precompiled) - -#undef THIS_FILE -DEFINE_THIS_FILE - -//:>******************************************************************************************** -//:> Forward declarations -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Local Constants and static variables -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Constructor/Destructor -//:>******************************************************************************************** - -LgCodePageEnumerator::LgCodePageEnumerator() -{ - m_cref = 1; - ModuleEntry::ModuleAddRef(); - -} - -LgCodePageEnumerator::~LgCodePageEnumerator() -{ - ModuleEntry::ModuleRelease(); -} - -//:>******************************************************************************************** -//:> Generic factory stuff to allow creating an instance with CoCreateInstance. -//:>******************************************************************************************** -static GenericFactory g_fact( - _T("SIL.Language1.LgCodePageEnumerator"), - &CLSID_LgCodePageEnumerator, - _T("SIL code page enumerator"), - _T("Apartment"), - &LgCodePageEnumerator::CreateCom); - - -void LgCodePageEnumerator::CreateCom(IUnknown *punkCtl, REFIID riid, void ** ppv) -{ - AssertPtr(ppv); - Assert(!*ppv); - if (punkCtl) - ThrowHr(WarnHr(CLASS_E_NOAGGREGATION)); - - ComSmartPtr qlcpe; - qlcpe.Attach(NewObj LgCodePageEnumerator()); // ref count initialy 1 - CheckHr(qlcpe->QueryInterface(riid, ppv)); -} - - - -//:>******************************************************************************************** -//:> IUnknown Methods -//:>******************************************************************************************** -STDMETHODIMP LgCodePageEnumerator::QueryInterface(REFIID riid, void **ppv) -{ - AssertPtr(ppv); - if (!ppv) - return WarnHr(E_POINTER); - *ppv = NULL; - - if (riid == IID_IUnknown) - *ppv = static_cast(static_cast(this)); - else if (riid == IID_ILgCodePageEnumerator) - *ppv = static_cast(static_cast(this)); - else if (riid == IID_ISupportErrorInfo) - { - *ppv = NewObj CSupportErrorInfo(static_cast(this), - IID_ILgCodePageEnumerator); - return S_OK; - } - else - return E_NOINTERFACE; - - AddRef(); - return NOERROR; -} - -//:>******************************************************************************************** -//:> ILgCodePageEnumerator Methods -//:>******************************************************************************************** - -STDMETHODIMP LgCodePageEnumerator::Init() -{ - BEGIN_COM_METHOD -#if WIN32 - IMultiLanguage2Ptr qml2; - qml2.CreateInstance(CLSID_CMultiLanguage); - CheckHr(qml2->EnumCodePages(MIMECONTF_VALID, 0, &m_qecp)); -#else - // TODO-Linux FWNX-114: implement windows code page support on Linux -#endif - END_COM_METHOD(g_fact, IID_ILgCodePageEnumerator); -} - -STDMETHODIMP LgCodePageEnumerator::Next(int * pnId, BSTR * pbstrName) -{ - BEGIN_COM_METHOD - ChkComOutPtr(pnId); - ChkComOutPtr(pbstrName); -#if WIN32 - if (!m_qecp) - ThrowHr(WarnHr(E_UNEXPECTED)); - MIMECPINFO info; - - ULONG celt; - CheckHr(m_qecp->Next(1, &info, &celt)); - if (celt == 1) - { - *pbstrName = SysAllocString(info.wszDescription); - if (!*pbstrName) - ThrowHr(WarnHr(E_OUTOFMEMORY)); - *pnId = info.uiCodePage; - } -#else - // TODO-Linux FWNX-114: implement windows code page support on Linux - *pnId = 0; - *pbstrName = NULL; -#endif - - END_COM_METHOD(g_fact, IID_ILgCodePageEnumerator); -} - -//:>******************************************************************************************** -//:> Forward declarations -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Local Constants and static variables -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Constructor/Destructor -//:>******************************************************************************************** - -LgLanguageEnumerator::LgLanguageEnumerator() -{ - m_cref = 1; - ModuleEntry::ModuleAddRef(); - m_ulCount = 0; - m_iLangId = 0; -} - -LgLanguageEnumerator::~LgLanguageEnumerator() -{ - ModuleEntry::ModuleRelease(); - if (m_prgLangIds) - { - CoTaskMemFree(m_prgLangIds); - m_prgLangIds = NULL; - m_ulCount = 0; - } - -} - -//:>******************************************************************************************** -//:> Generic factory stuff to allow creating an instance with CoCreateInstance. -//:>******************************************************************************************** -static GenericFactory g_factLang( - _T("SIL.Language1.LgLanguageEnumerator"), - &CLSID_LgLanguageEnumerator, - _T("SIL language enumerator"), - _T("Apartment"), - &LgLanguageEnumerator::CreateCom); - - -void LgLanguageEnumerator::CreateCom(IUnknown *punkCtl, REFIID riid, void ** ppv) -{ - AssertPtr(ppv); - Assert(!*ppv); - if (punkCtl) - ThrowHr(WarnHr(CLASS_E_NOAGGREGATION)); - - ComSmartPtr qlcpe; - qlcpe.Attach(NewObj LgLanguageEnumerator()); // ref count initialy 1 - CheckHr(qlcpe->QueryInterface(riid, ppv)); -} - - - -//:>******************************************************************************************** -//:> IUnknown Methods -//:>******************************************************************************************** -STDMETHODIMP LgLanguageEnumerator::QueryInterface(REFIID riid, void **ppv) -{ - AssertPtr(ppv); - if (!ppv) - return WarnHr(E_POINTER); - *ppv = NULL; - - if (riid == IID_IUnknown) - *ppv = static_cast(static_cast(this)); - else if (riid == IID_ILgLanguageEnumerator) - *ppv = static_cast(static_cast(this)); - else if (riid == IID_ISupportErrorInfo) - { - *ppv = NewObj CSupportErrorInfo(static_cast(this), - IID_ILgLanguageEnumerator); - return S_OK; - } - else - return E_NOINTERFACE; - - AddRef(); - return NOERROR; -} - -//:>******************************************************************************************** -//:> ILgLanguageEnumerator Methods -//:>******************************************************************************************** - -STDMETHODIMP LgLanguageEnumerator::Init() -{ - BEGIN_COM_METHOD -#if WIN32 - ITfInputProcessorProfilesPtr qProfiles; - qProfiles.CreateInstance(CLSID_TF_InputProcessorProfiles); - - m_iLangId = 0; - // GetLanguageList might return 0 languages, e.g. when run from Hudson CI machine where - // the tests are run with Local System account. - return qProfiles->GetLanguageList(&m_prgLangIds, &m_ulCount); -#else - // TODO-Linux: need to be able to port this. to some Linux equivelent -#endif - END_COM_METHOD(g_factLang, IID_ILgLanguageEnumerator); -} - -STDMETHODIMP LgLanguageEnumerator::Next(int * pnLoc, BSTR * pbstrName) -{ - BEGIN_COM_METHOD -#if WIN32 - ChkComOutPtr(pnLoc); - ChkComOutPtr(pbstrName); - if (!m_prgLangIds) - ThrowHr(WarnHr(E_UNEXPECTED)); - if (m_iLangId >= m_ulCount) - return S_OK; // past end, leave *pnLoc 0 and *pbstrName null. - - wchar szLangName[MAX_PATH]; - - //Get the language name and print it to the debug window. - if( 0 == GetLocaleInfoW(MAKELCID(m_prgLangIds[m_iLangId], SORT_DEFAULT), - LOCALE_SLANGUAGE, - szLangName, - MAX_PATH)) - { - //InKey can give values that are not supported by the operating system. - //Return the bad id with an error message - *pnLoc = m_prgLangIds[m_iLangId++]; - return E_FAIL; - } - - *pbstrName = SysAllocString(szLangName); - if (!*pbstrName) - ThrowHr(WarnHr(E_OUTOFMEMORY)); - *pnLoc = m_prgLangIds[m_iLangId++]; -#else - // TODO-Linux: need to be able to port this. to some Linux equivelent - *pnLoc = 0; - *pbstrName = NULL; -#endif - - END_COM_METHOD(g_factLang, IID_ILgLanguageEnumerator); -} diff --git a/Src/Language/LgCodePageEnumerator.h b/Src/Language/LgCodePageEnumerator.h deleted file mode 100644 index 27e025071d..0000000000 --- a/Src/Language/LgCodePageEnumerator.h +++ /dev/null @@ -1,113 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgCodePageEnumerator.h -Responsibility: John Thomson -Last reviewed: Not yet. - -Description: - --------------------------------------------------------------------------------*//*:End Ignore*/ -#pragma once -#ifndef LgCodePageEnumerator_INCLUDED -#define LgCodePageEnumerator_INCLUDED - -#if WIN32 -DEFINE_COM_PTR(IEnumCodePage); -DEFINE_COM_PTR(IMultiLanguage2); -#endif - -/*---------------------------------------------------------------------------------------------- -Class: LgCodePageEnumerator -Description: -Hungarian: lcpe -----------------------------------------------------------------------------------------------*/ -class LgCodePageEnumerator : ILgCodePageEnumerator -{ -public: - // Static methods - static void CreateCom(IUnknown *punkOuter, REFIID iid, void ** ppv); - - // Constructors/destructors/etc. - LgCodePageEnumerator(); - virtual ~LgCodePageEnumerator(); - - // IUnknown methods - STDMETHOD(QueryInterface)(REFIID iid, void ** ppv); - STDMETHOD_(UCOMINT32, AddRef)(void) - { - return InterlockedIncrement(&m_cref); - } - STDMETHOD_(UCOMINT32, Release)(void) - { - long cref = InterlockedDecrement(&m_cref); - if (cref == 0) { - m_cref = 1; - delete this; - } - return cref; - } - - // ILgCodePageEnumerator Methods - STDMETHOD(Init)(); - STDMETHOD(Next)(int * pnId, BSTR * pbstrName); - -protected: - // Member variables - long m_cref; - -#if WIN32 - IEnumCodePagePtr m_qecp; -#endif -}; - -#if WIN32 -DEFINE_COM_PTR(ITfInputProcessorProfiles); -#endif -/*---------------------------------------------------------------------------------------------- -Class: LgLanguageEnumerator -Description: -Hungarian: lcpe -----------------------------------------------------------------------------------------------*/ -class LgLanguageEnumerator : ILgLanguageEnumerator -{ -public: - // Static methods - static void CreateCom(IUnknown *punkOuter, REFIID iid, void ** ppv); - - // Constructors/destructors/etc. - LgLanguageEnumerator(); - virtual ~LgLanguageEnumerator(); - - // IUnknown methods - STDMETHOD(QueryInterface)(REFIID iid, void ** ppv); - STDMETHOD_(UCOMINT32, AddRef)(void) - { - return InterlockedIncrement(&m_cref); - } - STDMETHOD_(UCOMINT32, Release)(void) - { - long cref = InterlockedDecrement(&m_cref); - if (cref == 0) { - m_cref = 1; - delete this; - } - return cref; - } - - // ILgLanguageEnumerator Methods - STDMETHOD(Init)(); - STDMETHOD(Next)(int * pnId, BSTR * pbstrName); - -protected: - // Member variables - long m_cref; - - LANGID *m_prgLangIds; // Array set up by init and freed by destructor - ULONG m_ulCount; // Count of langids in m_prgLangIds - ULONG m_iLangId; // Supports enumeration by identifying current position. -}; -#endif //LgCodePageEnumerator_INCLUDED diff --git a/Src/Language/LgFontManager.cpp b/Src/Language/LgFontManager.cpp deleted file mode 100644 index e1746bbcd7..0000000000 --- a/Src/Language/LgFontManager.cpp +++ /dev/null @@ -1,320 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgFontManager.cpp -Responsibility: Larry Waswick -Last reviewed: Not yet. - -Description: - --------------------------------------------------------------------------------*//*:End Ignore*/ - -//:>******************************************************************************************** -//:> Include files -//:>******************************************************************************************** -#include "Main.h" -#pragma hdrstop -//:> Any other headers (not precompiled). -#include "Vector_i.cpp" -#if !WIN32 -#include -#endif - -#undef THIS_FILE -DEFINE_THIS_FILE - -OleStringLiteral pszSys(L"System"); -static Pcsz g_pszSys = pszSys; - -//:>******************************************************************************************** -//:> Forward declarations. -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Local Constants and static variables. -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Constructor/Destructor. -//:>******************************************************************************************** - -/*------------------------------------------------------------------------------------------ - This generic constructor simply gets the list of the (TrueType) fonts for the global - variable g_fm. -------------------------------------------------------------------------------------------*/ -LgFontManager::LgFontManager(void) -{ - // Don't call ModuleAddRef since there is a global singleton LgFontManager. Its - // AddRef and Release methods call ModuleAddRef and ModuleRelease. - GetFontNames(); -} - -LgFontManager::~LgFontManager() -{ -} - -//:>******************************************************************************************** -//:> Generic factory stuff to allow creating an instance with CoCreateInstance. -//:>******************************************************************************************** -// Generic factory used to create an instance of LgFontManager with CoCreateInstance. -static GenericFactory g_fact( - _T("SIL.Language1.FontManager"), - &CLSID_LgFontManager, - _T("SIL Font Manager"), - _T("Apartment"), - &LgFontManager::CreateCom); - - -/*---------------------------------------------------------------------------------------------- - Called by the GenericFactory to "create" an ILgFontManager; it just returns the global one. -----------------------------------------------------------------------------------------------*/ -void LgFontManager::CreateCom(IUnknown * punkCtl, REFIID riid, void ** ppv) -{ - AssertPtr(ppv); - Assert(!*ppv); - if (punkCtl) - ThrowHr(WarnHr(CLASS_E_NOAGGREGATION)); - - CheckHr(LanguageGlobals::g_fm.QueryInterface(riid, ppv)); -} - - -//:>******************************************************************************************** -//:> IUnknown Methods. -//:>******************************************************************************************** -// Get a pointer to the interface identified as iid. -STDMETHODIMP LgFontManager::QueryInterface(REFIID riid, void ** ppv) -{ - AssertPtr(ppv); - if (!ppv) - return WarnHr(E_POINTER); - *ppv = NULL; - - if (riid == IID_IUnknown) - *ppv = static_cast(static_cast(this)); - else if (riid == IID_ILgFontManager) - *ppv = static_cast(this); - else if (riid == IID_ISupportErrorInfo) - { - *ppv = NewObj CSupportErrorInfo(this,IID_ILgFontManager); - return S_OK; - } - else - return E_NOINTERFACE; - - reinterpret_cast(*ppv)->AddRef(); - return NOERROR; -} - - -//:>******************************************************************************************** -//:> ILgFontManager methods. -//:>******************************************************************************************** - -/*---------------------------------------------------------------------------------------------- - Answer in fAvail whether the font named bstrName is available, i.e., in the font list. - - @h3{Parameters} - @code{ - bstrName Name of font. - pfAvail Points to true if the font bstrname is available; false if not. - } -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgFontManager::IsFontAvailable(BSTR bstrName, ComBool * pfAvail) -{ - BEGIN_COM_METHOD; - ChkComBstrArgN(bstrName); - if (!bstrName) - return E_INVALIDARG; - ChkComOutPtr(pfAvail); - - *pfAvail = false; - for (int i = 0; i < m_vstuFonts.Size(); i++) - { - if (m_vstuFonts[i] == bstrName) - { - *pfAvail = true; - return S_OK; - } - } - - END_COM_METHOD(g_fact, IID_ILgFontManager); -} - -/*---------------------------------------------------------------------------------------------- - Answer in fAvail whether the font, made up of cch OLECHAR's in prgchName, is available, - i.e., in the font list. - - @h3{Parameters} - @code{ - cch Count of characters in the font name. - prgchName Range of characters that make up the font name. - pfAvail Points to true if the font prgchName is available; false if not. - } -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgFontManager::IsFontAvailableRgch(int cch, OLECHAR * prgchName, ComBool * pfAvail) -{ - BEGIN_COM_METHOD; - ChkComArrayArg(prgchName, cch); - if (!cch) - return E_INVALIDARG; - ChkComOutPtr(pfAvail); - - *pfAvail = false; - for (int i = 0; i < m_vstuFonts.Size(); i++) - { - if (m_vstuFonts[i].Equals(prgchName, cch)) - { - *pfAvail = true; - return S_OK; - } - } - - END_COM_METHOD(g_fact, IID_ILgFontManager); -} - -/*---------------------------------------------------------------------------------------------- - Answer a comma-separated string of font names in pbstrNames. - - @h3{Parameters} - @code{ - pbstrNames comma-separated string of font names. - } -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgFontManager::AvailableFonts(BSTR * pbstrNames) -{ - BEGIN_COM_METHOD; - ChkComArgPtr(pbstrNames); - - StrUni rgchwComma(L","); - - // Get the list of system fonts, if not already done. - if (0 == m_vstuFonts.Size()) - GetFontNames(); - - // Append font names, each followed by a delimiter. - StrUni stuNames = m_vstuFonts[0]; - for (int i = 1; i < m_vstuFonts.Size(); i++) - { - stuNames.Append(rgchwComma.Chars()); - stuNames.Append(m_vstuFonts[i]); - } - - // SysFreeString(*pbstrNames); // Free previous string, if any. - *pbstrNames = SysAllocString(stuNames.Chars()); - if (!*pbstrNames) - ThrowOutOfMemory(); - - END_COM_METHOD(g_fact, IID_ILgFontManager); -} - -/*---------------------------------------------------------------------------------------------- - Call GetFontNames to refresh the list of fonts. This will trigger a call to FontCallBack, - which will add each font name to the vector stored in m_vstuFonts. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgFontManager::RefreshFontList(void) -{ - BEGIN_COM_METHOD; - - GetFontNames(); - - END_COM_METHOD(g_fact, IID_ILgFontManager); -} - - -//:>******************************************************************************************** -//:> Protected methods. -//:>******************************************************************************************** -#if WIN32 -/*---------------------------------------------------------------------------------------------- - This callback function for EnumFontFamiliesEx, called by GetFontNames, will add each font - name to the vector stored in m_vstuFonts. Keep the vector sorted. -----------------------------------------------------------------------------------------------*/ -int CALLBACK LgFontManager::FontCallBack(ENUMLOGFONTEX * pelfe, NEWTEXTMETRICEX * pntme, - DWORD ft, LPARAM lp) -{ - const achar * pszFont = pelfe->elfLogFont.lfFaceName; - - // The third condition below eliminates font names which begin with '@'. These are a bit - // of a mystery, and seem to represent very large Unicode fonts. For example "@Batang". - // Note that when EnumFontFamiliesEx returns "@Batang" it will also, separately, return - // "Batang", so "Batang" will still be in the list. - if (ft & TRUETYPE_FONTTYPE && _tcscmp(pszFont, g_pszSys) && (*pszFont != '@')) - { - int i = 0; - // Search for the font name pszFont in the sorted vector m_vstuFonts. - for ( - ; - i < LanguageGlobals::g_fm.m_vstuFonts.Size() && LanguageGlobals::g_fm.m_vstuFonts[i] < pszFont; - i++); - - // Add the font name to the vector m_vstuFonts if it is not there already. - if (i == LanguageGlobals::g_fm.m_vstuFonts.Size()) - LanguageGlobals::g_fm.m_vstuFonts.Push(pszFont); - else if (LanguageGlobals::g_fm.m_vstuFonts[i] != pszFont) - LanguageGlobals::g_fm.m_vstuFonts.Insert(i, pszFont); - } - - return 1; // Continue enumerating. -} -#endif //WIN32 - -//:>******************************************************************************************** -//:> Private methods. -//:>******************************************************************************************** - -/*---------------------------------------------------------------------------------------------- - Use an information context to get the available fonts. -----------------------------------------------------------------------------------------------*/ -void LgFontManager::GetFontNames(void) -{ - AssertObj(this); -#if WIN32 - LOGFONT lf; - HDC hdc; - - hdc =CreateIC(TEXT("DISPLAY"), NULL, NULL, NULL); - if (hdc) - { - ClearItems(&lf, 1); - lf.lfCharSet = DEFAULT_CHARSET; - - ::EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC)&FontCallBack, 0, 0); - - BOOL fSuccess; - fSuccess = ::DeleteDC(hdc); - Assert(fSuccess); - } -#else - PangoFontMap * pFontMap = pango_cairo_font_map_get_default(); - int nFamilies; - PangoFontFamily ** pFontFamily; - pango_font_map_list_families(pFontMap, &pFontFamily, &nFamilies); - - while (--nFamilies >= 0) - { - const char * fontName = pango_font_family_get_name(pFontFamily[nFamilies]); - int i = 0; - // Search for the font name fontName in the sorted vector m_vstuFonts. - for ( - ; - i < LanguageGlobals::g_fm.m_vstuFonts.Size() && LanguageGlobals::g_fm.m_vstuFonts[i] < fontName; - i++) - { - //Do Nothing - } - - // Add the font name to the vector m_vstuFonts if it is not there already. - if (i == LanguageGlobals::g_fm.m_vstuFonts.Size()) - LanguageGlobals::g_fm.m_vstuFonts.Push(fontName); - else if (LanguageGlobals::g_fm.m_vstuFonts[i] != fontName) - LanguageGlobals::g_fm.m_vstuFonts.Insert(i, fontName); - } - - g_free(pFontFamily); -#endif //WIN32 - -} diff --git a/Src/Language/LgFontManager.h b/Src/Language/LgFontManager.h deleted file mode 100644 index 3fceb08b13..0000000000 --- a/Src/Language/LgFontManager.h +++ /dev/null @@ -1,98 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgFontManager.h -Responsibility: Larry Waswick -Last reviewed: Not yet. --------------------------------------------------------------------------------*//*:End Ignore*/ -#pragma once -#ifndef LgFontManager_H -#define LgFontManager_H - -/*---------------------------------------------------------------------------------------------- - Obtain a list of the (TrueType) fonts that are available on the system, and handle simple - queries about font availability. - - Note: the font manager may load the available fonts once, and use this cached list to answer - subsequent queries. To be sure the answer to a query is current, call RefreshFontList. - - @h3{Data Structures} - @code{ - m_vstuFonts - Vector to hold font names. - } - - @h3{Hungarian: fm} -----------------------------------------------------------------------------------------------*/ -class LgFontManager : public ILgFontManager -{ -public: - static void CreateCom(IUnknown *punkCtl, REFIID riid, void ** ppv); - - virtual ~LgFontManager(); - - //:>**************************************************************************************** - //:> IUnknown methods. - //:>**************************************************************************************** - // Get a pointer to the interface identified as iid. - STDMETHOD(QueryInterface)(REFIID iid, void ** ppv); - - // Add a reference by calling addref on the module, since this is a singleton. - STDMETHOD_(UCOMINT32, AddRef)(void) - { - return ModuleEntry::ModuleAddRef(); - } - // Release a reference by calling release on the module, since this is a singleton. - STDMETHOD_(UCOMINT32, Release)(void) - { - return ModuleEntry::ModuleRelease(); - } - - //:>**************************************************************************************** - //:> ILgFontManager methods. - //:>**************************************************************************************** - STDMETHOD(IsFontAvailable)(BSTR bstrName, ComBool * pfAvail); - STDMETHOD(IsFontAvailableRgch)(int cch, OLECHAR * prgchName, ComBool * pfAvail); - STDMETHOD(AvailableFonts)(BSTR * pbstrNames); - STDMETHOD(RefreshFontList)(void); - -#ifdef DEBUG - // Check to make certain we have a valid internal state for debugging purposes. - bool AssertValid(void) - { - AssertPtr(this); - AssertObj(&m_vstuFonts); - return true; - } -#endif // DEBUG - -protected: - /*------------------------------------------------------------------------------------------ - This generic constructor simply gets the list of the (TrueType) fonts for the global - variable g_fm. - ------------------------------------------------------------------------------------------*/ - LgFontManager(void); - -#if WIN32 - static int CALLBACK FontCallBack(ENUMLOGFONTEX * pelfe, NEWTEXTMETRICEX * pntme, - DWORD ft, LPARAM lp); -#endif - - friend class LanguageGlobals; - - //:>**************************************************************************************** - //:> Member variables. - //:>**************************************************************************************** - // Vector to hold font names. - Vector m_vstuFonts; - -private: - // Get the available fonts. - void GetFontNames(void); -}; - -DEFINE_COM_PTR(LgFontManager); - -#endif //!LgFontManager_H diff --git a/Src/Language/LgInputMethodEditor.cpp b/Src/Language/LgInputMethodEditor.cpp deleted file mode 100644 index c25657b6d6..0000000000 --- a/Src/Language/LgInputMethodEditor.cpp +++ /dev/null @@ -1,463 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgInputMethodEditor.cpp -Responsibility: Rand Burgett -Last reviewed: Not yet. - -Description: - --------------------------------------------------------------------------------*//*:End Ignore*/ - -//:>******************************************************************************************** -//:> Include files -//:>******************************************************************************************** -#include "Main.h" -#pragma hdrstop -// any other headers (not precompiled) - -#undef THIS_FILE -DEFINE_THIS_FILE - -//:>******************************************************************************************** -//:> Forward declarations -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Local Constants and static variables -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Constructor/Destructor -//:>******************************************************************************************** - -LgInputMethodEditor::LgInputMethodEditor() -{ - m_cref = 1; - ModuleEntry::ModuleAddRef(); -} - -LgInputMethodEditor::~LgInputMethodEditor() -{ - ModuleEntry::ModuleRelease(); -} - -//:>******************************************************************************************** -//:> Generic factory stuff to allow creating an instance with CoCreateInstance. -//:>******************************************************************************************** -static GenericFactory g_fact( - _T("SIL.Language1.LgInputMethodEditor"), - &CLSID_LgInputMethodEditor, - _T("SIL Input Method Editor"), - _T("Apartment"), - &LgInputMethodEditor::CreateCom); - - -void LgInputMethodEditor::CreateCom(IUnknown *punkCtl, REFIID riid, void ** ppv) -{ - AssertPtr(ppv); - Assert(!*ppv); - if (punkCtl) - ThrowHr(WarnHr(CLASS_E_NOAGGREGATION)); - - ComSmartPtr qime; - qime.Attach(NewObj LgInputMethodEditor()); // ref count initialy 1 - CheckHr(qime->QueryInterface(riid, ppv)); -} - - - -//:>******************************************************************************************** -//:> IUnknown Methods -//:>******************************************************************************************** -STDMETHODIMP LgInputMethodEditor::QueryInterface(REFIID riid, void **ppv) -{ - AssertPtr(ppv); - if (!ppv) - return WarnHr(E_POINTER); - *ppv = NULL; - - if (riid == IID_IUnknown) - *ppv = static_cast(static_cast(this)); - else if (riid == IID_ISimpleInit) - *ppv = static_cast(this); - else if (riid == IID_ILgInputMethodEditor) - *ppv = static_cast(this); - else if (riid == IID_ISupportErrorInfo) - { - *ppv = NewObj CSupportErrorInfo2(static_cast(this), - IID_ISimpleInit, IID_ILgInputMethodEditor); - return S_OK; - } - else - return E_NOINTERFACE; - - AddRef(); - return NOERROR; -} - -//:>******************************************************************************************** -//:> ISimpleInit Methods -//:>******************************************************************************************** - -/*---------------------------------------------------------------------------------------------- - Initialize an instance, typically from a ClassInitMoniker - - To create a suitable moniker, do something like this: - - const wchar * psz = L"Times New Roman;Helvetica,Arial;Courier"; - IClassInitMonikerPtr qcim; - hr = qcim.CreateInstance(CLSID_ClassInitMoniker); - hr = qcim->InitNew(CLSID_LgSystemCollater, (const BYTE *)psz, StrLen(psz) * isizeof(wchar)); - - Commas separate font names in a list; semi-colons separate lists for Serif, SansSerif, - and Monospace (in that order). - - ENHANCE JohnT: should we verify that the fonts in question are installed? -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgInputMethodEditor::InitNew(const BYTE * prgb, int cb) -{ - BEGIN_COM_METHOD; - ChkComArrayArg(prgb, cb); - - return S_OK; - - END_COM_METHOD(g_fact, IID_ISimpleInit); -} - -/*---------------------------------------------------------------------------------------------- - Return the initialization value previously set by InitNew. - - @param pbstr Pointer to a BSTR for returning the initialization data. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgInputMethodEditor::get_InitializationData(BSTR * pbstr) -{ - BEGIN_COM_METHOD; - ChkComArgPtr(pbstr); - - *pbstr = NULL; - - END_COM_METHOD(g_fact, IID_ISimpleInit); -} - - -//:>******************************************************************************************** -//:> ILgInputMethodEditor methods -//:>******************************************************************************************** -/*---------------------------------------------------------------------------------------------- -Setup(); - Given something the user typed, following any preprocessing that happens - automatically as a result of Setup (e.g., Keyman processing), do any further - processing required to actually replace the selected part of the string with what the user typed. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgInputMethodEditor::Setup() -{ - BEGIN_COM_METHOD; - - return S_OK; - - END_COM_METHOD(g_fact, IID_ILgFontManager); -} - -/*---------------------------------------------------------------------------------------------- -Replace - The default implementation just replaces characters from ichMin to ichLim with - those from bstrInput, then set *pichModMin to ichMin, and *pichModLim and - *pichIP both to ichMin + BstrLen(bstrInput). - - Arguments: - bstrInput what user typed - pttpInput text properties desired for new text - ptsbOld original, unedited text, gets modified - ichMin, ichLim range in original to replace - pichModMin, pichModLim range in output text affected - pichIP position of IP in modified string - -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgInputMethodEditor::Replace(BSTR bstrInput, ITsTextProps * pttpInput, - ITsStrBldr * ptsbOld, int ichMin, int ichLim, int * pichModMin, int * pichModLim, - int * pichIP) -{ - BEGIN_COM_METHOD; - ChkComBstrArgN(bstrInput); - ChkComArgPtrN(pttpInput); - ChkComArgPtr(ptsbOld); - ChkComOutPtr(pichModMin); - ChkComOutPtr(pichModLim); - ChkComOutPtr(pichIP); - - int cCh; - SmartBstr sbstr; - CheckHr(ptsbOld->get_Length(&cCh)); - if (ichMin < 0 || ichLim > cCh || ichMin > ichLim) - { - *pichModMin = 0; - *pichModLim = 0; - *pichIP = 0; - ThrowHr(WarnHr(E_INVALIDARG)); - } - - // Check to make sure the ichMin is not between a surrognte pair. - do - { - if (0 < ichMin) - { - CheckHr(ptsbOld->GetChars(ichMin, ichMin + 1, &sbstr)); - if (sbstr[0] < 0xDC00 || sbstr[0] > 0xDFFF) - break; - } - else - { - break; - } - } while (--ichMin > 0); - - // Check to make sure the ichLim is not between a surrgante pair. - do - { - if (cCh > ichLim) - { - CheckHr(ptsbOld->GetChars(ichLim, ichLim + 1, &sbstr)); - if (sbstr[0] < 0xDC00 || sbstr[0] > 0xDFFF) - break; - } - else - { - break; - } - } while (++ichLim < cCh); - - // Now, do the real work - - CheckHr(ptsbOld->Replace(ichMin, ichLim, bstrInput, pttpInput)); - *pichModMin = ichMin; - *pichModLim = ichMin + BstrLen(bstrInput); - *pichIP = ichMin + BstrLen(bstrInput); - - END_COM_METHOD(g_fact, IID_ILgFontManager); -} - -/*---------------------------------------------------------------------------------------------- - Backspace - The user pressed a certain number of backspaces. Delete an appropriate amount of - the string represented by the input string builder, indicating exactly what changed. - Also, if there were not enough characters to delete, indicate how many backspaces - were left over. - - Arguments: - ichStart starting position of backspaces - cactBackspace number of backspaces pressed - ptsbOld original, unedited text, gets modified - pichModMin, pichModLim range in output text affected - pichIP position of IP in modified string - pcactBsRemaining Number not handled, to affect previous writing system - -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgInputMethodEditor::Backspace(int ichStart, int cactBackspace, - ITsStrBldr * ptsbOld, int * pichModMin, int * pichModLim, int * pichIP, - int * pcactBsRemaining) -{ - BEGIN_COM_METHOD; - ChkComArgPtr(ptsbOld); - ChkComOutPtr(pichModMin); - ChkComOutPtr(pichModLim); - ChkComOutPtr(pichIP); - ChkComOutPtr(pcactBsRemaining); - - int cCh; - int ichMin; - int ich; - int ichMin1; - int iBsIn; - int cBsOut=0; - SmartBstr sbstr; - - if (ichStart < 1) - { - *pichModMin = 0; - *pichModLim = 0; - *pichIP = 0; - *pcactBsRemaining = cactBackspace; - return S_OK; - } - - // Check to make sure the ichStart is not between a surrgante pair. - CheckHr(ptsbOld->get_Length(&cCh)); - if (cCh > ichStart) - { - CheckHr(ptsbOld->GetChars(ichStart, ichStart + 1, &sbstr)); - if (sbstr[0] > 0xDBFF && sbstr[0] < 0xE000) - ichStart++; - } - - // increase backspace count for any other surrgate pairs. - iBsIn = cactBackspace; - ichMin1 = ichStart - (cactBackspace * 2) - 1; - if (ichMin1 < 0) - ichMin1 = 0; - CheckHr(ptsbOld->GetChars(ichMin1, ichStart, &sbstr)); - ich = ichStart - ichMin1 - 1; - do - { - if (sbstr[ich] < 0xDC00 || sbstr[ich] > 0xDFFF) - --iBsIn; - ++cBsOut; - if (--ich < 0) - break; - } while (iBsIn > 0); - cactBackspace = cBsOut + iBsIn; - - // Now, do the real work - if (ichStart > cactBackspace) - { - ichMin = ichStart - cactBackspace; - CheckHr(ptsbOld->Replace(ichMin, ichStart, NULL, NULL)); - *pichModMin = ichMin; - *pichModLim = ichMin; - *pichIP = ichMin; - *pcactBsRemaining = 0; - } - else - { - CheckHr(ptsbOld->Replace(0, ichStart, NULL, NULL)); - *pichModMin = 0; - *pichModLim = 0; - *pichIP = 0; - *pcactBsRemaining = cactBackspace - ichStart; - } - - END_COM_METHOD(g_fact, IID_ILgFontManager); -} - -/*---------------------------------------------------------------------------------------------- - DeleteForward - The user pressed a certain number of forward deletes. Forward delete an appropriate - amount of the string represented by the input string builder, indicating exactly what - changed. lso, if there were not enough characters to delete, indicate how many deletes - were left over. - - Arguments: - ichStart starting position of deletes - cactDelForward number of DF pressed - ptsbOld original, unedited text, gets modified - pichModMin, pichModLim range in output text affected - pichIP position of IP in modified string - pcactDfRemaining Number not handled, to affect next writing system - -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgInputMethodEditor::DeleteForward(int ichStart, int cactDelForward, - ITsStrBldr * ptsbOld, int * pichModMin, int * pichModLim, int * pichIP, - int * pcactDfRemaining) -{ - BEGIN_COM_METHOD; - ChkComArgPtr(ptsbOld); - ChkComOutPtr(pichModMin); - ChkComOutPtr(pichModLim); - ChkComOutPtr(pichIP); - ChkComOutPtr(pcactDfRemaining); - - int cCh; - int ichLim; - int ich; - int iDfIn; - int cDfOut=0; - SmartBstr sbstr; - - CheckHr(ptsbOld->get_Length(&cCh)); - if (ichStart > cCh - 2) - { - *pichModMin = cCh; - *pichModLim = cCh; - *pichIP = cCh; - *pcactDfRemaining = cactDelForward; - ThrowHr(WarnHr(E_INVALIDARG)); - } - - // Check to make sure the ichStart is not between a surrgante pair. - if (cCh > ichStart) - { - CheckHr(ptsbOld->GetChars(ichStart, ichStart + 1, &sbstr)); - if (sbstr[0] > 0xDBFF && sbstr[0] < 0xE000) - ichStart--; - } - - // increase DeleteForward count for any other surrgate pairs. - iDfIn = cactDelForward; - ichLim = ichStart + (cactDelForward * 2) + 1; - if (ichLim > cCh) - ichLim = cCh; - CheckHr(ptsbOld->GetChars(ichStart, ichLim, &sbstr)); - ich = ichStart; - do - { - if (sbstr[ich] < 0xDC00 || sbstr[ich] > 0xDFFF) - --iDfIn; - ++cDfOut; - if (++ich >= cCh) - break; - } while (iDfIn > 0); - cactDelForward = cDfOut + iDfIn; - - // Now, do the real work - if (ichStart + cactDelForward < cCh) - { - ichLim = ichStart + cactDelForward; - CheckHr(ptsbOld->Replace(ichStart, ichLim, NULL, NULL)); - *pichModMin = ichStart; - *pichModLim = ichStart; - *pichIP = ichStart; - *pcactDfRemaining = 0; - } - else - { - CheckHr(ptsbOld->Replace(ichStart, cCh, NULL, NULL)); - *pichModMin = ichStart; - *pichModLim = ichStart; - *pichIP = ichStart; - *pcactDfRemaining = iDfIn; - } - - END_COM_METHOD(g_fact, IID_ILgFontManager); -} - -/*---------------------------------------------------------------------------------------------- - IsValidInsertionPoint - True if input method considers an IP at the specified index reasonable. - Note that really useful IPs should also satisfy the Renderer; see - ILgSegment>>IsValidInsertionPoint. - - Arguments: - ich - ptss - pfValid - -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgInputMethodEditor::IsValidInsertionPoint(int ich, ITsString * ptss, - BOOL * pfValid) -// TODO: Shouldn't pfValid be a ComBool? -{ - BEGIN_COM_METHOD; - ChkComArgPtr(ptss); - ChkComOutPtr(pfValid); - - int cCh; - SmartBstr sbstr; - CheckHr(ptss->get_Length(&cCh)); - if (ich == cCh) - { - *pfValid = 1; - } - else if ((ich >= 0) && (ich < cCh)) - { - CheckHr(ptss->GetChars(ich, ich + 1, &sbstr)); - *pfValid = ((sbstr[0] < 0xDC00) || (sbstr[0] > 0xDFFF)) && (ich >= 0) && (ich <= cCh); - } - else - { - *pfValid = 0; - } - END_COM_METHOD(g_fact, IID_ILgFontManager); -} diff --git a/Src/Language/LgInputMethodEditor.h b/Src/Language/LgInputMethodEditor.h deleted file mode 100644 index a930d923b8..0000000000 --- a/Src/Language/LgInputMethodEditor.h +++ /dev/null @@ -1,84 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 1999, 2001 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgInputMethodEditor.h -Responsibility: Rand Burgett -Last reviewed: Not yet. - -Description: - --------------------------------------------------------------------------------*//*:End Ignore*/ -#pragma once -#ifndef LgInputMethodEditor_INCLUDED -#define LgInputMethodEditor_INCLUDED - -/*---------------------------------------------------------------------------------------------- -Class: LgInputMethodEditor -Description: -Hungarian: ime -----------------------------------------------------------------------------------------------*/ -class LgInputMethodEditor : - public ILgInputMethodEditor, - public ISimpleInit -{ -public: - // Static methods - static void CreateCom(IUnknown *punkOuter, REFIID iid, void ** ppv); - - // Constructors/destructors/etc. - LgInputMethodEditor(); - virtual ~LgInputMethodEditor(); - - // IUnknown methods - STDMETHOD(QueryInterface)(REFIID iid, void ** ppv); - STDMETHOD_(UCOMINT32, AddRef)(void) - { - return InterlockedIncrement(&m_cref); - } - STDMETHOD_(UCOMINT32, Release)(void) - { - long cref = InterlockedDecrement(&m_cref); - if (cref == 0) { - m_cref = 1; - delete this; - } - return cref; - } - - // ISimpleInit Methods - STDMETHOD(InitNew)(const BYTE * prgb, int cb); - STDMETHOD(get_InitializationData)(BSTR * pbstr); - - // IRenderEngine methods - STDMETHOD(Setup)(); - - STDMETHOD(Replace)(BSTR bstrInput, ITsTextProps* pttpInput, ITsStrBldr* ptsbOld, - int ichMin, int ichLim, int* pichModMin, int* pichModLim, int* pichIP); - - STDMETHOD(Backspace)(int pichStart, int cactBackspace, ITsStrBldr* ptsbOld, - int* pichModMin, int* pichModLim, int* pichIP, int* pcactBsRemaining); - - STDMETHOD(DeleteForward)(int pichStart, int cactDelForward, ITsStrBldr* ptsbOld, - int* pichModMin, int* pichModLim, int* pichIP, int* pcactDfRemaining); - - STDMETHOD(IsValidInsertionPoint)(int ich, ITsString* ptss, BOOL* pfValid); - -protected: - // Member variables - long m_cref; - - // Static methods - - // Constructors/destructors/etc. - - // Other protected methods -// void AdjustEndForWidth(IVwGraphics * pvg); - void FindLineBreak(const byte * prglbs, const int ichMin, const int ichLim, - const LgLineBreak lbrkRequired, int& ichBreak, int& ichDim); -}; -DEFINE_COM_PTR(LgInputMethodEditor); - -#endif //LgInputMethodEditor_INCLUDED diff --git a/Src/Language/LgKeymanHandler.cpp b/Src/Language/LgKeymanHandler.cpp index f168814224..a2653e3aff 100644 --- a/Src/Language/LgKeymanHandler.cpp +++ b/Src/Language/LgKeymanHandler.cpp @@ -111,9 +111,7 @@ bool KeymanOn() ::CloseHandle(hMutex); return true; } -#else // !WIN32 - // TODO-Linux: - need to intergate with Keyman -#endif // !WIN32 +#endif return false; // Keyman is not running. } @@ -125,11 +123,6 @@ LgKeymanHandler::LgKeymanHandler() { m_cref = 1; ModuleEntry::ModuleAddRef(); - -#if !WIN32 - // Create C# Keyboard Switcher which does most of the work on Linux. - m_qkbs.CreateInstance(CLSID_KeyboardSwitcher); -#endif } LgKeymanHandler::~LgKeymanHandler() @@ -349,21 +342,7 @@ STDMETHODIMP LgKeymanHandler::Init(ComBool fForce) } s_fKeymanInitialized = true; -#else // !WIN32 - // Use C# Keyboard Switcher to build up a list of avaliable keyboards. - int nKeyboards; - m_qkbs->get_IMEKeyboardsCount(&nKeyboards); - for(int i = 0; i < nKeyboards; ++i) - { - SmartBstr bstrKeyboardName; - m_qkbs->GetKeyboardName(i, &bstrKeyboardName); - KbdInfo ki; - ki.m_stuName = bstrKeyboardName.Chars(); - ki.m_id = 0; // what todo about this? - s_vkiKeyboards.Push(ki); - } - s_fKeymanInitialized = true; -#endif // !WIN32 +#endif END_COM_METHOD(g_fact, IID_ILgKeymanHandler); } @@ -375,14 +354,6 @@ STDMETHODIMP LgKeymanHandler::Close() { BEGIN_COM_METHOD -#if !WIN32 - if (m_qkbs) - { - m_qkbs->Close(); - m_qkbs = NULL; - } -#endif - END_COM_METHOD(g_fact, IID_ILgKeymanHandler); } @@ -423,42 +394,10 @@ bool LgKeymanHandler::InitInternal() s_fKeymanFailed = true; #if WIN32 ::MessageBox(NULL, stuMsg.Chars(), stuCaption.Chars(), MB_OK | MB_ICONINFORMATION); -#else // !WIN32 - // TODO-Linux: port #endif // !WIN32 return s_fKeymanInitialized; } -/*---------------------------------------------------------------------------------------------- - Obtain the number of keyboard layouts currently avaiable. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgKeymanHandler::get_NLayout(int * pclayout) -{ - BEGIN_COM_METHOD - ChkComOutPtr(pclayout); - if (!s_fKeymanInitialized) - CheckHr(Init(false)); - *pclayout = s_vkiKeyboards.Size(); - END_COM_METHOD(g_fact, IID_ILgKeymanHandler); -} - -/*---------------------------------------------------------------------------------------------- - Obtain the ith layout name. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgKeymanHandler::get_Name(int ilayout, BSTR * pbstrName) -{ - BEGIN_COM_METHOD - if (!s_fKeymanInitialized) - CheckHr(Init(false)); - if (!s_fKeymanInitialized) - return E_UNEXPECTED; - if ((uint)ilayout >= (uint)(s_vkiKeyboards.Size())) - ThrowHr(WarnHr(E_INVALIDARG)); - s_vkiKeyboards[ilayout].m_stuName.GetBstr(pbstrName); - - END_COM_METHOD(g_fact, IID_ILgKeymanHandler); -} - /*---------------------------------------------------------------------------------------------- Get the active keyboard. Returns NULL if Keyman is not running or otherwise can't be initialized; "(None)" if no keyman keyboard active. @@ -505,93 +444,12 @@ STDMETHODIMP LgKeymanHandler::get_ActiveKeyboardName(BSTR * pbstrName) return S_OK; } } -#else - // Use C# Keyboard Switcher get the current active keyboard. - SmartBstr bstrKeyboardName; - m_qkbs->get_IMEKeyboard(&bstrKeyboardName); - *pbstrName = bstrKeyboardName.Detach(); - return S_OK; #endif Assert(false); // Keyman gave us an ID, but it didn't match! return E_UNEXPECTED; END_COM_METHOD(g_fact, IID_ILgKeymanHandler); } -/*---------------------------------------------------------------------------------------------- - Set the active keyboard. (Pass null or empty string to disable Keyman). -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgKeymanHandler::put_ActiveKeyboardName(BSTR bstrName) -{ - BEGIN_COM_METHOD - ChkComBstrArgN(bstrName); - if (!InitInternal() || !s_wm_kmselectlang) - return S_OK; -#if WIN32 - if (BstrLen(bstrName) != 0) - { - for (int iki = 0; iki < s_vkiKeyboards.Size(); ++iki) - { - if (wcscmp(s_vkiKeyboards[iki].m_stuName.Chars(), bstrName) == 0) - { -#ifdef TRACING_KEYMAN - StrAnsi staMsg; - staMsg.Format("Setting keyman keyboard to %d for %B\n", - s_vkiKeyboards[iki].m_id, bstrName); - ::OutputDebugStringA(staMsg.Chars()); -#endif - ::PostMessage(::GetFocus(), s_wm_kmselectlang, knKeymanID, - s_vkiKeyboards[iki].m_id); - return S_OK; - } - } - // It's an error if it's an invalid name; but disable Keyman anyway. -#ifdef TRACING_KEYMAN - StrAnsi staMsg; - staMsg.Format("Disabling keyman...name (%B) not recognized\n", bstrName); - ::OutputDebugStringA(staMsg.Chars()); -#endif - // Posting a message saying there is no keyman keyboard active runs code in - // SimpleRootSite.OnKeymanKeyboardChange which tries to set the active writing system - // to one which requires no keyman keyboard. This is an unfortunate thing to do - // as a side effect of trying to set an unavailable keyboard for a particular WS. LS-12471. - //::PostMessage(::GetFocus(), s_wm_kmselectlang, knKeymanID, KEYMANID_NONKEYMAN); - // This can happen if people have been renaming/removing Keyman keyboards, so don't - // generate a useless (and expensive time-wise) stack trace. - ReturnHr(E_INVALIDARG); - } - else - { -#ifdef TRACING_KEYMAN - OutputDebugStringA("Disabling keyman...name is null\n"); -#endif - ::PostMessage(::GetFocus(), s_wm_kmselectlang, knKeymanID, KEYMANID_NONKEYMAN); - } -#else - // Use C# Keyboard Switcher set the current active keyboard. - m_qkbs->put_IMEKeyboard(bstrName); -#endif - END_COM_METHOD(g_fact, IID_ILgKeymanHandler); -} - -/*---------------------------------------------------------------------------------------------- - Return the windows message (obtained from RegisterWindowsMessage("WM_KMSELECTLANG"). - Review JohnT: Or should it be WM_KMKBCHANGE? -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgKeymanHandler::get_KeymanWindowsMessage(int * pwm) -{ - BEGIN_COM_METHOD - ChkComOutPtr(pwm); -#if WIN32 - if (!s_wm_kmkbchange) - s_wm_kmkbchange = ::RegisterWindowMessageW(L"WM_KMKBCHANGE"); - *pwm = s_wm_kmkbchange; -#else - // TODO-Linux: port -#endif - END_COM_METHOD(g_fact, IID_ILgKeymanHandler); -} - - // Explicit instantiation. #include "Vector_i.cpp" template class Vector; diff --git a/Src/Language/LgKeymanHandler.h b/Src/Language/LgKeymanHandler.h index 99ab2a508a..e20faf0894 100644 --- a/Src/Language/LgKeymanHandler.h +++ b/Src/Language/LgKeymanHandler.h @@ -15,14 +15,6 @@ Last reviewed: Not yet. #ifndef LgKeymanHandler_INCLUDED #define LgKeymanHandler_INCLUDED - -#if !WIN32 -#include "ViewsTlb.h" -DEFINE_COM_PTR(IIMEKeyboardSwitcher); -class KeyboardSwitcher; -#define CLSID_KeyboardSwitcher __uuidof(KeyboardSwitcher) -#endif - /*---------------------------------------------------------------------------------------------- Class: LgKeymanHandler Description: A class that manages Keyman, being able to invoke a keyboard, find out which @@ -60,11 +52,7 @@ class LgKeymanHandler : STDMETHOD(Init)(ComBool fForce); STDMETHOD(Close)(); - STDMETHOD(get_NLayout)(int * pclayout); - STDMETHOD(get_Name)(int ilayout, BSTR * pbstrName); STDMETHOD(get_ActiveKeyboardName)(BSTR * pbstrName); - STDMETHOD(put_ActiveKeyboardName)(BSTR bstrName); - STDMETHOD(get_KeymanWindowsMessage)(int * pwm); // Other public methods protected: @@ -73,10 +61,5 @@ class LgKeymanHandler : bool InitInternal(); void ThrowErrorWithInfo(HRESULT hrErr, int stidDescription); - -#if !WIN32 - // C# COM object that switches keyboards. - IIMEKeyboardSwitcherPtr m_qkbs; -#endif }; #endif //LgKeymanHandler_INCLUDED diff --git a/Src/Language/LgTextServices.cpp b/Src/Language/LgTextServices.cpp deleted file mode 100644 index 2affdc1a7a..0000000000 --- a/Src/Language/LgTextServices.cpp +++ /dev/null @@ -1,457 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 2004 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgTextServices.cpp -Responsibility: Steve McConnel -Last reviewed: Not yet. - -Description: - --------------------------------------------------------------------------------*//*:End Ignore*/ - -//:>******************************************************************************************** -//:> Include files -//:>******************************************************************************************** -#include "Main.h" -#pragma hdrstop -//:> Any other headers (not precompiled). - -#if WIN32 -DEFINE_COM_PTR(ITfInputProcessorProfiles); -DEFINE_COM_PTR(IEnumTfLanguageProfiles); - -#undef THIS_FILE -DEFINE_THIS_FILE - -// we use a managed implementation on Linux -#undef ENABLE_TSF -#define ENABLE_TSF - -#undef Tracing_KeybdSelection -//#define Tracing_KeybdSelection - -#undef TRACING_KEYMAN -//#define TRACING_KEYMAN - -//:>******************************************************************************************** -//:> Forward declarations. -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Local Constants and static variables. -//:>******************************************************************************************** - -//:>******************************************************************************************** -//:> Constructor/Destructor. -//:>******************************************************************************************** - - -//:>******************************************************************************************** -//:> Generic factory stuff to allow creating an instance with CoCreateInstance. -//:>******************************************************************************************** -// Generic factory used to create an instance of LgTextServices with CoCreateInstance. -static GenericFactory g_fact( - _T("SIL.Language1.TextServices"), - &CLSID_LgTextServices, - _T("SIL Text Services"), - _T("Apartment"), - &LgTextServices::CreateCom); - -/*---------------------------------------------------------------------------------------------- - Called by the GenericFactory to "create" an ILgTextServices; it just returns the global one. -----------------------------------------------------------------------------------------------*/ -void LgTextServices::CreateCom(IUnknown * punkCtl, REFIID riid, void ** ppv) -{ - AssertPtr(ppv); - Assert(!*ppv); - if (punkCtl) - ThrowHr(WarnHr(CLASS_E_NOAGGREGATION)); - - CheckHr(LanguageGlobals::g_lts.QueryInterface(riid, ppv)); -} - - -//:>******************************************************************************************** -//:> IUnknown Methods. -//:>******************************************************************************************** -// Get a pointer to the interface identified as iid. -STDMETHODIMP LgTextServices::QueryInterface(REFIID riid, void ** ppv) -{ - AssertPtr(ppv); - if (!ppv) - return WarnHr(E_POINTER); - *ppv = NULL; - - if (riid == IID_IUnknown) - *ppv = static_cast(static_cast(this)); - else if (riid == IID_ILgTextServices) - *ppv = static_cast(this); - else if (riid == IID_ISupportErrorInfo) - { - *ppv = NewObj CSupportErrorInfo(this,IID_ILgTextServices); - return S_OK; - } - else - return E_NOINTERFACE; - - reinterpret_cast(*ppv)->AddRef(); - return NOERROR; -} - - -//:>******************************************************************************************** -//:> ILgTextServices methods. -//:>******************************************************************************************** - -const CLSID kclsidKMTipTextService = { 0x7ba04432, 0x8609, 0x4fe6, {0xbf, - 0xf7, 0x97, 0x10, 0x91, 0xde, 0x09, 0x33} }; -static INT8 s_WinVersion = -1; - -/*---------------------------------------------------------------------------------------------- - Return true if we're running on Windows 2000 or newer; return false if we're running on - a Windows version older than Windows 2000 or on a different platform. -----------------------------------------------------------------------------------------------*/ -bool IsWin2kOrHigher() -{ - if (s_WinVersion < 0) - { - // Try calling GetVersionEx using the OSVERSIONINFOEX structure, - // If that fails, we're too old. - OSVERSIONINFOEX osvi; - ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - - if (::GetVersionEx((OSVERSIONINFO *) &osvi) && - osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) - { - Assert(osvi.dwMajorVersion < 128); - s_WinVersion = (INT8)osvi.dwMajorVersion; - } - else - s_WinVersion = 0; - } - - return s_WinVersion >= 5; -} - -/*---------------------------------------------------------------------------------------------- - Returns true if the current keyman/other keyboard is different from the desired - keyman/other keyboard. -----------------------------------------------------------------------------------------------*/ -bool IsKeyboardDifferent(BSTR bstrDesiredKeymanKbd, BSTR bstrActiveKeymanKbd) -{ - return wcscmp(bstrActiveKeymanKbd ? bstrActiveKeymanKbd : L"", - bstrDesiredKeymanKbd ? bstrDesiredKeymanKbd : L"") != 0; -} - -/*---------------------------------------------------------------------------------------------- - Turn off the keyman keyboard -----------------------------------------------------------------------------------------------*/ -void TurnOffKeymanKbd(BSTR * pbstrActiveOtherImKbd) -{ - // It seems sometimes to be necessary to explicitly turn Keyman off, though it's not - // supposed to be. One reason is that on loss of focus, C# code loses track of the - // current keyboard, so *pbstrActiveOtherImKbd cannot be relied on. - //if (BstrLen(*pbstrActiveOtherImKbd)) - ILgKeymanHandlerPtr qkh; - qkh.CreateInstance(CLSID_LgKeymanHandler); - CheckHr(qkh->put_ActiveKeyboardName(NULL)); - if (*pbstrActiveOtherImKbd) - ::SysFreeString(*pbstrActiveOtherImKbd); - *pbstrActiveOtherImKbd = NULL; -} - -/*---------------------------------------------------------------------------------------------- - Set the system keyboard (Windows API/X11 API way) -----------------------------------------------------------------------------------------------*/ -void SetKeyboard_System(int lcid) -{ -#ifdef Tracing_KeybdSelection - StrAnsi sta; - sta.Format("LgTextServices::SetKeyboard(%d) [not Keyman]%n", lcid); - ::OutputDebugStringA(sta.Chars()); -#endif - int nLangId = LANGIDFROMLCID(lcid); - if (nLangId == 0) - nLangId = ::GetSystemDefaultLangID(); - // JohnT: Damien made the change to the commented line below as an attempt to fix FWR-1939. - // However it appears to cause the worse problem noted in FWR_3308. - // Passing 0 as the high word selectst the default keyboard for the language. - // Windows 7 (at least) does a good job of remembering what keyboard the user last wanted - // for the language. The only problem would be if the user is using the same system language - // for two writing systems where he wants to use different keyboards. We can't support that yet. - //HKL hkl = (HKL)(nLangId << 16 | (nLangId & 0xffff)); - HKL hkl = (HKL)nLangId; - - // If we're not activating a Keyman keyboard, activate the appropriate OS IM. - // Microsoft says we should only do this if we were not able to do it using - // ActivateLanguageProfile (private communication to JohnT). -#ifdef Tracing_KeybdSelection - sta.Format("LgTextServices::SetKeyboard(%d) - " - "hkl = %x, ::GetKeyboardLayout() = %x%n", - lcid, hkl, ::GetKeyboardLayout(0)); - ::OutputDebugStringA(sta.Chars()); -#endif - if (hkl != ::GetKeyboardLayout(0)) - { - // We need to work out whether we're using at least W2000, because - // KLF_SETFORPROCESS is not supported before that. - UINT flags = 0; - if (IsWin2kOrHigher()) - { - //Windows 2000 or better, we can use KLF_SETFORPROCESS. - flags = KLF_SETFORPROCESS; - } -#ifdef Tracing_KeybdSelection - StrAnsi sta; - sta.Format("LgTextServices::SetKeyboard(%d) - " - "::ActivateKeyboardLayout(%x, %x) [nLangId = %d]\n", - lcid, hkl, flags, nLangId); - ::OutputDebugStringA(sta.Chars()); -#endif - ::ActivateKeyboardLayout(hkl, flags); - Assert(sizeof(int) >= sizeof(hkl)); - } -} - -#ifdef ENABLE_TSF -/*---------------------------------------------------------------------------------------------- - Set the keyboard through TSF -----------------------------------------------------------------------------------------------*/ -bool SetKeyboard_TSF(bool fDoingOtherIm, int lcid, int * pnActiveLangId) -{ -#ifdef Tracing_KeybdSelection - StrAnsi sta; - sta.Format("LgTextServices::SetKeyboard(%d) [making TSF calls]%n", lcid); - ::OutputDebugStringA(sta.Chars()); - sta.Format("LgTextServices::SetKeyboard(%d) - ::GetKeyboardLayout() = %x%n", - lcid, ::GetKeyboardLayout(0)); - ::OutputDebugStringA(sta.Chars()); -#endif - HRESULT hr = S_OK; - ITfInputProcessorProfilesPtr qtfipp; - int nLangId = LANGIDFROMLCID(lcid); - bool fSetInputLang = false; - // Don't check the HR or use CreateInstance; I (JohnT) think this may fail if TSF is not - // fully active. - ::CoCreateInstance(CLSID_TF_InputProcessorProfiles, NULL, CLSCTX_ALL, - IID_ITfInputProcessorProfiles, (void **)&qtfipp); - if (!qtfipp) - { - Warn("Could not get ITfInputProcessorProfiles to set Keyman text service\n"); - } - else - { - // Have to make the language active before we can set the profile; - // and want to set the language even if we aren't doing Keyman. - if (*pnActiveLangId != (LANGID)nLangId) - { - // Do NOT do this if the right langID is already current. In some bizarre cases - // during WM_INPUTLANGCHANGED it can lead to a new input-lang-changed in a - // DIFFERENT language and an infinite loop. - *pnActiveLangId = (LANGID)nLangId; - IgnoreHr(hr = qtfipp->ChangeCurrentLanguage((LANGID)nLangId)); - } -#ifdef Tracing_KeybdSelection - sta.Format( - "LgTextServices::SetKeyboard(%d) [qtfipp->ChangeCL(%d) => hr = %x]%n", - lcid, nLangId, hr); - ::OutputDebugStringA(sta.Chars()); -#endif - if (FAILED(hr)) - { - Warn("failed to change language\n"); - } - else if (fDoingOtherIm) - { - // Make sure the Keyman text service is turned on. For some bizarre reason there is - // no API to just ask for the service to turn on for the langid, we have to do our - // own search for the profile that corresponds to this langid and text service. - IEnumTfLanguageProfilesPtr qenum; - #ifdef Tracing_KeybdSelection - sta.Format("LgTextServices::SetKeyboard(%d) [qtfipp->EnumLP(%d)]%n", - lcid, nLangId); - ::OutputDebugStringA(sta.Chars()); - sta.Format("LgTextServices::SetKeyboard(%d) - ::GetKeyboardLayout() = %x%n", - lcid, ::GetKeyboardLayout(0)); - ::OutputDebugStringA(sta.Chars()); - #endif - IgnoreHr(hr = qtfipp->EnumLanguageProfiles((LANGID)nLangId, &qenum)); - if (FAILED(hr)) - { - Warn("Could not get enumerator for language profiles\n"); - } - else - { - // If doing keyman try to turn on Keyman text service. - TF_LANGUAGEPROFILE profile; - for ( ; ; ) - { - ULONG cprofile; - IgnoreHr(hr = qenum->Next(1, &profile, &cprofile)); - if (FAILED(hr) || cprofile != 1) - { - Warn("failed to find language profiled for Keyman\n"); - break; - } - if (kclsidKMTipTextService == profile.clsid) - { - // got it at last! -#ifdef Tracing_KeybdSelection - StrAnsi sta; - sta.Format("LgTextServices::SetKeyboard(%d) - " - "qtfipp->ActivateLanguageProfile(nLangId = %d)\n", - lcid, nLangId); - ::OutputDebugStringA(sta.Chars()); -#endif - IgnoreHr(hr = qtfipp->ActivateLanguageProfile( - kclsidKMTipTextService, (LANGID)nLangId, profile.guidProfile)); - if (FAILED(hr)) - { - Warn("failed to activate language profile\n"); - } - else - { - fSetInputLang = true; - } - break; - } - } - } -#ifdef Tracing_KeybdSelection - sta.Format("LgTextServices::SetKeyboard(%d) [after qtfipp->ChangeCL(%d)]%n", - lcid, nLangId); - ::OutputDebugStringA(sta.Chars()); - sta.Format("LgTextServices::SetKeyboard(%d) - ::GetKeyboardLayout() = %x%n", - lcid, ::GetKeyboardLayout(0)); - ::OutputDebugStringA(sta.Chars()); -#endif - } - else - { - // this ensures that we switch to the correct keyboard (not Keyman addin) as well as - // the correct language - // TODO (DamienD): we could use the TSF interface ITfInputProcessorProfileMgr to change - // the keyboard, but it is only available on Vista and higher. Is there a benefit to - // using that interface? - SetKeyboard_System(lcid); - fSetInputLang = true; - } - } - return fSetInputLang; -} -#endif /*ENABLE_TSF*/ - -/*---------------------------------------------------------------------------------------------- - Set a keyman keyboard (or other input method) -----------------------------------------------------------------------------------------------*/ -HRESULT SetKeyboard_OtherIM(int lcid, BSTR bstrOtherImKbd, BSTR * pbstrActiveOtherImKbd, - ComBool * pfSelectLangPending) -{ -#ifdef Tracing_KeybdSelection - StrAnsi sta; - sta.Format("LgTextServices::SetKeyboard(%d) [setting Keyman kbd]%n", lcid); - ::OutputDebugStringA(sta.Chars()); -#endif - int nLangId = LANGIDFROMLCID(lcid); - HRESULT hr = S_OK; - ILgKeymanHandlerPtr qkh; - qkh.CreateInstance(CLSID_LgKeymanHandler); - // Tell Keyman about the particular keyboard (but only if it changed). - if (IsKeyboardDifferent(bstrOtherImKbd, *pbstrActiveOtherImKbd)) - { - // Activate the particular layout we want. - // John Durdin says this next step is necessary. - //::ActivateKeyboardLayout(::GetKeyboardLayout(0), 0); - // JohnT: discovered that if we've never set a keyboard before, the current one - // won't be right, but forcing the right langid into the low word seems to help. - // Keyman always uses the US English keyboard, which is the magic number we're - // stuffing into the high word. - HKL hklDesired = (HKL)(0x04090000 | (nLangId & 0xffff)); -#ifdef Tracing_KeybdSelection - StrAnsi sta; - sta.Format("LgTextServices::SetKeyboard(%d) - " - "::ActivateKeyboardLayout(%d [%x], 0) for keyman setup\n", - lcid, hklDesired, hklDesired); - ::OutputDebugStringA(sta.Chars()); -#endif - ::ActivateKeyboardLayout(hklDesired, 0); - - try - { - CheckHr(qkh->put_ActiveKeyboardName(bstrOtherImKbd)); -#ifdef TRACING_KEYMAN - StrUni stuMsg; - stuMsg.Format(L"%b is now the active Keyman keyboard.\n", - bstrOtherImKbd); - ::OutputDebugStringW(stuMsg.Chars()); -#endif - if (*pbstrActiveOtherImKbd) - ::SysFreeString(*pbstrActiveOtherImKbd); - CopyBstr(pbstrActiveOtherImKbd, bstrOtherImKbd); - *pfSelectLangPending = true; - } - catch (Throwable& thr) - { - hr = thr.Result(); -#ifdef TRACING_KEYMAN - StrAnsi staMsg; - staMsg.Format("Cannot make %B the active Keyman keyboard!?\n", - bstrOtherImKbd); - ::OutputDebugStringA(staMsg.Chars()); -#endif - if (BstrLen(*pbstrActiveOtherImKbd)) - { - // We failed, so ensure it's turned off. - TurnOffKeymanKbd(pbstrActiveOtherImKbd); - *pfSelectLangPending = true; - } - } - } - return hr; -} - -/*---------------------------------------------------------------------------------------------- - Set the system keyboard and TSF language. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP LgTextServices::SetKeyboard(int lcid, BSTR bstrOtherImKbd, int * pnActiveLangId, - BSTR * pbstrActiveOtherImKbd, ComBool * pfSelectLangPending) -{ - BEGIN_COM_METHOD; - ChkComBstrArgN(bstrOtherImKbd); - ChkComArgPtr(pnActiveLangId); - ChkComArgPtr(pbstrActiveOtherImKbd); - ChkComArgPtr(pfSelectLangPending); - - HRESULT hr; - int nLangId = LANGIDFROMLCID(lcid); - - bool fDoingOtherIm = BstrLen(bstrOtherImKbd) > 0; - bool fSetInputLang = false; -#ifdef ENABLE_TSF - if (IsKeyboardDifferent(bstrOtherImKbd, *pbstrActiveOtherImKbd) || - (LANGID)nLangId != (LANGID)*pnActiveLangId) - { - fSetInputLang = SetKeyboard_TSF(fDoingOtherIm, lcid, pnActiveLangId); - } -#endif /*ENABLE_TSF*/ - - if (fDoingOtherIm) - { - hr = SetKeyboard_OtherIM(lcid, bstrOtherImKbd, pbstrActiveOtherImKbd, pfSelectLangPending); - } - else // no keyman keyboard wanted. - { - if (!fSetInputLang) - SetKeyboard_System(lcid); - - TurnOffKeymanKbd(pbstrActiveOtherImKbd); - *pfSelectLangPending = true; - } - - END_COM_METHOD(g_fact, IID_ILgTextServices); -} -#endif // WIN32 diff --git a/Src/Language/LgTextServices.h b/Src/Language/LgTextServices.h deleted file mode 100644 index ea9ad023a5..0000000000 --- a/Src/Language/LgTextServices.h +++ /dev/null @@ -1,72 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 2004 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: LgTextServices.h -Responsibility: Steve McConnel -Last reviewed: Not yet. --------------------------------------------------------------------------------*//*:End Ignore*/ -#pragma once -#ifndef LgTextServices_H -#define LgTextServices_H - -#ifdef WIN32 -/*---------------------------------------------------------------------------------------------- - Provide access to TSF functionality wrapped in easy-to-call methods. - - @h3{Hungarian: lts} -----------------------------------------------------------------------------------------------*/ -class LgTextServices : public ILgTextServices -{ -public: - static void CreateCom(IUnknown *punkCtl, REFIID riid, void ** ppv); - - //:>**************************************************************************************** - //:> IUnknown methods. - //:>**************************************************************************************** - // Get a pointer to the interface identified as iid. - STDMETHOD(QueryInterface)(REFIID iid, void ** ppv); - - // Add a reference by calling addref on the module, since this is a singleton. - STDMETHOD_(UCOMINT32, AddRef)(void) - { - return ModuleEntry::ModuleAddRef(); - } - // Release a reference by calling release on the module, since this is a singleton. - STDMETHOD_(UCOMINT32, Release)(void) - { - return ModuleEntry::ModuleRelease(); - } - - //:>**************************************************************************************** - //:> ILgTextServices methods. - //:>**************************************************************************************** - STDMETHOD(SetKeyboard)(int lcid, BSTR bstrKeymanKbd, int * pnActiveLangId, - BSTR * pbstrActiveKeymanKbd, ComBool * pfSelectLangPending); - -#ifdef DEBUG - // Check to make certain we have a valid internal state for debugging purposes. - bool AssertValid(void) - { - AssertPtr(this); - return true; - } -#endif // DEBUG - -protected: - /*------------------------------------------------------------------------------------------ - This generic constructor does nothing. - ------------------------------------------------------------------------------------------*/ - LgTextServices(void) - { - } - - friend class LanguageGlobals; -}; - -DEFINE_COM_PTR(LgTextServices); -#endif // WIN32 - -#endif //!LgTextServices_H diff --git a/Src/Language/Main.h b/Src/Language/Main.h index b8c6b877f6..ac4503d8c7 100644 --- a/Src/Language/Main.h +++ b/Src/Language/Main.h @@ -109,8 +109,6 @@ using namespace fwutil; // Rect and Point classes #include "LgWordBreakSpaceSpec.h" #endif // LANG_MODEL -#include "LanguageGlobals.h" - // these are a gray area, including aspects of both model and engine // Todo JohnT: These structs are part of an obsolete approach to overriding character properties. // Get rid of them and whatever uses them. (Taken from OldLgWritingSystem file.) @@ -182,9 +180,7 @@ DEFINE_COM_PTR(UniscribeEngine); #include "RomRenderSegment.h" #include "RomRenderEngine.h" #include "LgSimpleEngines.h" -#include "LgCPWordTokenizer.h" #include "LgNumericEngine.h" -#include "LgInputMethodEditor.h" #if !WIN32 #include "UniscribeLinux.h" #endif @@ -192,15 +188,12 @@ DEFINE_COM_PTR(UniscribeEngine); #include "UniscribeEngine.h" // Other tools -#include "LgFontManager.h" #include "FwStyledText.h" #include "StringToNumHelpers.h" #include "WriteXml.h" // From AppCore. #include "xmlparse.h" #include "LgKeymanHandler.h" -#include "LgCodePageEnumerator.h" #include "LgIcuWrappers.h" -#include "LgTextServices.h" #include "RegexMatcherWrapper.h" diff --git a/Src/Language/Makefile b/Src/Language/Makefile index be9bec9ee2..884adfa561 100644 --- a/Src/Language/Makefile +++ b/Src/Language/Makefile @@ -80,47 +80,13 @@ LINK_LIBS := \ OBJ_LANGSERV = -# not currently used -OBJ_LANMODEL = \ - $(INT_DIR)/LgCharOverride.o \ - $(INT_DIR)/LgCharPropSpec.o \ - $(INT_DIR)/LgCharSpec.o \ - $(INT_DIR)/LgCollaterSpec.o \ - $(INT_DIR)/LgComponent.o \ - $(INT_DIR)/LgConverterSpec.o \ - $(INT_DIR)/LgConvertStringSpec.o \ - $(INT_DIR)/LgExternalSpecComponent.o \ - $(INT_DIR)/LgLineBreakSpaceSpec.o \ - $(INT_DIR)/LgLineBreakSpec.o \ - $(INT_DIR)/LgOwnedSpecComponent.o \ - $(INT_DIR)/LgNumericConverterSpec.o \ - $(INT_DIR)/LgRenderSpec.o \ - $(INT_DIR)/LgRomanRendererSpec.o \ - $(INT_DIR)/LgSpec.o \ - $(INT_DIR)/LgSpellCheckSpec.o \ - $(INT_DIR)/LgSysCollaterSpec.o \ - $(INT_DIR)/LgTokenizerSpec.o \ - $(INT_DIR)/LgUnicodeCollaterSpec.o \ - $(INT_DIR)/LgUserClassSpec.o \ - $(INT_DIR)/LgWfiCheckerSpec.o \ - $(INT_DIR)/LgWinRendSpec.o \ - $(INT_DIR)/LgWordBreakSpaceSpec.o \ - $(INT_DIR)/LgCPWordTokenizer.o \ - $(INT_DIR)/LgNumericEngine.o \ - $(INT_DIR)/TsStringPlus.o \ - $(INT_DIR)/FwXml.o \ - OBJ_LANG = \ - $(INT_DIR)/LanguageGlobals.o \ $(INT_DIR)/LgIcuWrappers.o \ $(INT_DIR)/LgSimpleEngines.o \ $(INT_DIR)/LgIcuCharPropEngine.o \ - $(INT_DIR)/LgFontManager.o \ $(INT_DIR)/LgUnicodeCollater.o \ - $(INT_DIR)/LgInputMethodEditor.o \ - $(INT_DIR)/LocaleIndex.o \ - $(INT_DIR)/LgCodePageEnumerator.o \ $(INT_DIR)/LgKeymanHandler.o \ + $(INT_DIR)/LocaleIndex.o \ $(INT_DIR)/FwXml.o \ $(INT_DIR)/WriteXml.o \ $(INT_DIR)/FwStyledText.o \ @@ -131,38 +97,6 @@ OBJ_LANG = \ $(INT_DIR)/RomRenderSegment.o \ -# LgCodePageEnumerator.o \ # This is used only in FwCoreDlgs (written in C#) - Need by FwCoreDlgs as loaded as a COM object -# LgKeymanHandler.o \ -# UniscribeEngine.o \ -# UniscribeSegment.o \ - -# Not used -XMO_LANGSERV = \ - $(COM_INT_DIR)/LgCharOverride.xmo \ - $(COM_INT_DIR)/LgCharPropSpec.xmo \ - $(COM_INT_DIR)/LgCharSpec.xmo \ - $(COM_INT_DIR)/LgCollaterSpec.xmo \ - $(COM_INT_DIR)/LgComponent.xmo \ - $(COM_INT_DIR)/LgConverterSpec.xmo \ - $(COM_INT_DIR)/LgConvertStringSpec.xmo \ - $(COM_INT_DIR)/LgWritingSystemModel.xmo \ - $(COM_INT_DIR)/LgExternalSpecComponent.xmo \ - $(COM_INT_DIR)/LgLineBreakSpaceSpec.xmo \ - $(COM_INT_DIR)/LgLineBreakSpec.xmo \ - $(COM_INT_DIR)/LgOwnedSpecComponent.xmo \ - $(COM_INT_DIR)/LgNumericConverterSpec.xmo \ - $(COM_INT_DIR)/LgRenderSpec.xmo \ - $(COM_INT_DIR)/LgRomanRendererSpec.xmo \ - $(COM_INT_DIR)/LgSpec.xmo \ - $(COM_INT_DIR)/LgSpellCheckSpec.xmo \ - $(COM_INT_DIR)/LgSysCollaterSpec.xmo \ - $(COM_INT_DIR)/LgTokenizerSpec.xmo \ - $(COM_INT_DIR)/LgUnicodeCollaterSpec.xmo \ - $(COM_INT_DIR)/LgUserClassSpec.xmo \ - $(COM_INT_DIR)/LgWfiCheckerSpec.xmo \ - $(COM_INT_DIR)/LgWinRendSpec.xmo \ - $(COM_INT_DIR)/LgWordBreakSpaceSpec.xmo \ - OBJ_OTHER = \ $(INT_DIR)/ModuleEntry.o \ $(INT_DIR)/TextProps1.o \ diff --git a/Src/Language/Test/Makefile b/Src/Language/Test/Makefile index 4cd6cbb2d3..91201898c6 100644 --- a/Src/Language/Test/Makefile +++ b/Src/Language/Test/Makefile @@ -82,10 +82,8 @@ FWLANG_OBJ := \ $(LANGUAGE_OBJ)/RomRenderSegment.o \ $(LANGUAGE_OBJ)/LgSimpleEngines.o \ $(LANGUAGE_OBJ)/LgIcuCharPropEngine.o \ - $(LANGUAGE_OBJ)/LgFontManager.o \ - $(LANGUAGE_OBJ)/LgInputMethodEditor.o \ + $(LANGUAGE_OBJ)/LgKeymanHandler.o \ $(LANGUAGE_OBJ)/LocaleIndex.o \ - $(LANGUAGE_OBJ)/LanguageGlobals.o \ $(GENERIC_OBJ)/TextProps1.o \ $(GR_LIB_OBJ)/GrUtil.o \ $(LANGUAGE_OBJ)/FwXml.o \ @@ -121,7 +119,6 @@ $(INT_DIR)/Collection.cpp: testLanguage.h \ MockLgWritingSystem.h \ TestLgCollatingEngine.h \ TestLgIcuCharPropEngine.h \ - TestLgFontManager.h \ TestRomRenderEngine.h \ RenderEngineTestBase.h @echo Collecting tests for testLanguage diff --git a/Src/Language/Test/TestLanguage.vcxproj b/Src/Language/Test/TestLanguage.vcxproj index 15074776b0..7c54622b6c 100644 --- a/Src/Language/Test/TestLanguage.vcxproj +++ b/Src/Language/Test/TestLanguage.vcxproj @@ -75,13 +75,13 @@ - + diff --git a/Src/Language/Test/TestLanguage.vcxproj.filters b/Src/Language/Test/TestLanguage.vcxproj.filters index 6bdca65973..6643abcf5b 100644 --- a/Src/Language/Test/TestLanguage.vcxproj.filters +++ b/Src/Language/Test/TestLanguage.vcxproj.filters @@ -32,9 +32,6 @@ Header Files - - Header Files - Header Files @@ -50,5 +47,6 @@ + \ No newline at end of file diff --git a/Src/Language/Test/TestLgFontManager.h b/Src/Language/Test/TestLgFontManager.h deleted file mode 100644 index 20cfa0c092..0000000000 --- a/Src/Language/Test/TestLgFontManager.h +++ /dev/null @@ -1,77 +0,0 @@ -/*--------------------------------------------------------------------*//*:Ignore this sentence. -Copyright (C) 2003 SIL International. All rights reserved. - -Distributable under the terms of either the Common Public License or the -GNU Lesser General Public License, as specified in the LICENSING.txt file. - -File: TestLgFontManager.h -Responsibility: -Last reviewed: - - Unit tests for the LgFontManager class. --------------------------------------------------------------------------------*//*:End Ignore*/ -#ifndef TESTLGFONTMANAGER_H_INCLUDED -#define TESTLGFONTMANAGER_H_INCLUDED - -#pragma once - -#include "testLanguage.h" - -namespace TestLanguage -{ - /******************************************************************************************* - Tests for LgFontManager - ******************************************************************************************/ - class TestLgFontManager : public unitpp::suite - { - ILgFontManagerPtr m_qfm0; - - void testNullArgs() - { - unitpp::assert_true("m_qfm0", m_qfm0.Ptr()); - HRESULT hr; - try{ - CheckHr(hr = m_qfm0->IsFontAvailable(NULL, NULL)); - unitpp::assert_eq("IsFontAvailable(NULL, NULL) HRESULT", E_INVALIDARG, hr); - } - catch(Throwable& thr) - { - unitpp::assert_eq("IsFontAvailable(NULL, NULL) HRESULT", E_INVALIDARG, thr.Result()); - } - try{ - CheckHr(hr = m_qfm0->IsFontAvailableRgch(0, NULL, NULL)); - unitpp::assert_eq("IsFontAvailableRgch(0, NULL, NULL) HRESULT", E_INVALIDARG, hr); - } - catch(Throwable& thr) - { - unitpp::assert_eq("IsFontAvailableRgch(0, NULL, NULL) HRESULT", E_INVALIDARG, thr.Result()); - } - try{ - CheckHr(hr = m_qfm0->AvailableFonts(NULL)); - unitpp::assert_eq("AvailableFonts(NULL) HRESULT", E_POINTER, hr); - } - catch(Throwable& thr) - { - unitpp::assert_eq("AvailableFonts(NULL) HRESULT", E_POINTER, thr.Result()); - } - } - - public: - TestLgFontManager(); - virtual void SuiteSetup() - { - LgFontManager::CreateCom(NULL, IID_ILgFontManager, (void **)&m_qfm0); - } - virtual void SuiteTeardown() - { - m_qfm0.Clear(); - } - }; -} - -#endif /*TESTLGFONTMANAGER_H_INCLUDED*/ - -// Local Variables: -// mode:C++ -// compile-command:"cmd.exe /e:4096 /c c:\\FW\\Bin\\mklg-tst.bat" -// End: (These 4 lines are useful to Steve McConnel.) diff --git a/Src/Language/Test/testLanguage.mak b/Src/Language/Test/testLanguage.mak index c086c8d523..149b253285 100644 --- a/Src/Language/Test/testLanguage.mak +++ b/Src/Language/Test/testLanguage.mak @@ -56,15 +56,12 @@ OBJ_LANGUAGETESTSUITE=\ $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\RomRenderSegment.obj\ $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\LgSimpleEngines.obj\ $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\LgIcuCharPropEngine.obj\ - $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\LgFontManager.obj\ $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\LgUnicodeCollater.obj\ - $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\LgInputMethodEditor.obj\ + $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\LgKeymanHandler.obj\ $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\FwStyledText.obj\ $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\WriteXml.obj\ $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\usepch\TextProps1.obj\ $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\FwXml.obj\ - $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\LanguageGlobals.obj\ - $(BUILD_ROOT)\Obj\$(BUILD_CONFIG)\Language\autopch\LgTextServices.obj\ OBJ_GRUTIL=\ $(INT_DIR)\autopch\GrUtil.obj\ @@ -101,7 +98,6 @@ $(LANGUAGETEST_SRC)\Collection.cpp: $(LANGUAGETEST_SRC)\testLanguage.h\ $(LANGUAGETEST_SRC)\TestRegexMatcher.h\ $(LANGUAGETEST_SRC)\TestLgCollatingEngine.h\ $(LANGUAGETEST_SRC)\TestLgIcuCharPropEngine.h\ - $(LANGUAGETEST_SRC)\TestLgFontManager.h\ $(LANGUAGETEST_SRC)\TestUniscribeEngine.h\ $(LANGUAGETEST_SRC)\TestRomRenderEngine.h\ $(LANGUAGETEST_SRC)\RenderEngineTestBase.h diff --git a/Src/TE/DiffView/DiffViewTests/DiffDialogTests.cs b/Src/TE/DiffView/DiffViewTests/DiffDialogTests.cs index 781b71ad72..6a3a207ef4 100644 --- a/Src/TE/DiffView/DiffViewTests/DiffDialogTests.cs +++ b/Src/TE/DiffView/DiffViewTests/DiffDialogTests.cs @@ -446,13 +446,6 @@ public override void FixtureSetup() Cache.ServiceLocator.WritingSystems.DefaultVernacularWritingSystem.DefaultFontName = "Times New Roman"; } - /// - public override void FixtureTeardown() - { - KeyboardHelper.Release(); - base.FixtureTeardown(); - } - /// ------------------------------------------------------------------------------------ /// /// Override to start an undoable UOW. diff --git a/Src/TeDll/TeDll.csproj b/Src/TeDll/TeDll.csproj index 8c572775e2..0cd402a918 100644 --- a/Src/TeDll/TeDll.csproj +++ b/Src/TeDll/TeDll.csproj @@ -170,6 +170,10 @@ False ..\..\Output\Debug\OxesIO.dll + + False + ..\..\Downloads\Palaso.dll + False ..\..\DistFiles\ParatextShared.dll @@ -313,9 +317,7 @@ Code - - Component - + UserControl @@ -323,21 +325,11 @@ DockableUsfmBrowser.cs - - UserControl - - - UserControl - - - UserControl - - - Component - - - UserControl - + + + + + Form @@ -352,16 +344,12 @@ ScrTextListSelectionForm.cs - - Component - + Code - - Form - + Code @@ -372,12 +360,8 @@ TrainingAvailable.cs - - Component - - - UserControl - + + Designer BtDraftSplitWrapper.cs diff --git a/Src/TeDll/TeMainWnd.cs b/Src/TeDll/TeMainWnd.cs index 20fc215715..077b9215ea 100644 --- a/Src/TeDll/TeMainWnd.cs +++ b/Src/TeDll/TeMainWnd.cs @@ -22,6 +22,7 @@ using System.Media; using System.Windows.Forms; using Microsoft.Win32; +using Palaso.WritingSystems; using Paratext; using SIL.FieldWorks.Common.COMInterfaces; using SIL.FieldWorks.Common.Controls; @@ -5458,7 +5459,7 @@ protected bool OnUnsQuestions(object args) m_StyleSheet.GetUiFontForWritingSystem(Cache.DefaultVernWs, 0), vernWs.IcuLocale, vernWs.RightToLeftScript, Path.Combine(ScrTextCollection.SettingsDirectory ?? @"c:\My Paratext Projects", "cms"), ccSettings, App.ApplicationName, start, end, - vern => KeyboardHelper.ActivateKeyboard(vern ? vernWs.LCID : defaultWs.LCID), + vern => ((IWritingSystemDefinition)(vern ? vernWs : defaultWs)).LocalKeyboard.Activate(), () => ShowHelp.ShowHelpTopic(m_app, "khtpNoHelpTopic"), LookupTerm); // TODO: Come up with a Help topic diff --git a/Src/TestUtils/BaseTest.cs b/Src/TestUtils/BaseTest.cs index bcd4fa9bbe..c8e983984e 100644 --- a/Src/TestUtils/BaseTest.cs +++ b/Src/TestUtils/BaseTest.cs @@ -132,8 +132,6 @@ public virtual void FixtureSetup() [TestFixtureTearDown] public virtual void FixtureTeardown() { - KeyboardHelper.Release(); - // FWC-16: we have to call CoFreeUnusedLibraries. This causes sqlnclir.dll to get // unloaded. If we don't do this we get a deadlock after the fixture teardown // because we're running STA. diff --git a/Src/views/Views.idh b/Src/views/Views.idh index b105b518ac..515f701d3d 100644 --- a/Src/views/Views.idh +++ b/Src/views/Views.idh @@ -1664,7 +1664,7 @@ Last reviewed: @H3{Hungarian: rootb} *******************************************************************************************/ - DeclareInterface(VwRootBox, VwNotifyChange, 85DB7D7D-D47B-440e-A213-F62D5224C982) + DeclareInterface(VwRootBox, VwNotifyChange, A8944421-3A75-4DD5-A469-2EE251228A26) { //:> Initialization @@ -2342,18 +2342,6 @@ Last reviewed: [in] int ysTop, [in] int dysHeight); - // Set the proper keyboard for the given writing system. - // The reason this method belongs in this interface is that it may use the selection - // location to place an IME composition window, and most callers know the rootbox - // explicitly, but not the selection. - HRESULT SetKeyboardForWs( - [in] ILgWritingSystem * pws, - [in, out] BSTR * pbstrActiveKeymanKbd, - [in, out] int * pnActiveLangId, - [in, out] int * phklActive, - [in, out] ComBool * pfSelectLangPending); - - // Get/set the the maximum number of paragraphs to scan looking for editable text. If // we can't find anything editable in this many paragraphs, we'll assume the whole text // is read-only. (This affects cursor movement, which likes to find the editable text @@ -5647,30 +5635,6 @@ DeclareInterface(VwLayoutManager, Unknown, 13F3A421-4915-455b-B57F-AFD4073CFFA0) [out, retval] int * pdxpHeight); }; -/******************************************************************************************* - Interface IIMEKeyboardSwitcher - This interface is designed to allow changing the current IME keyboard in Linux from C++ code. -*******************************************************************************************/ -DeclareInterface(IMEKeyboardSwitcher, Unknown, 4D2BC310-DADF-11DE-9E3A-0019DBF4566E) -{ - // Gets the name of the IMEKeyboard for the focued input context - [propget] HRESULT IMEKeyboard( - [out, retval] BSTR * pbstr); - - // Sets IMEKeyboard for the focused input context - [propput] HRESULT IMEKeyboard( - [in] BSTR pbstr); - - [propget] HRESULT IMEKeyboardsCount( - [out, retval] int * pdCount); - - HRESULT GetKeyboardName( - [in] int index, - [out, retval] BSTR * pbstr); - - HRESULT Close(); -} - /******************************************************************************************* Interface IPictureFactory Allows creating a IPicture. @@ -5989,8 +5953,4 @@ DeclareInterface(ViewInputMgr, Unknown, e41668f7-d506-4c8a-a5d7-feae5630797e) // Called when the text of a document changes. HRESULT OnTextChange(); - - // VwRootBox will need to do these - // HRESULT AddToKeepList(li) - // HRESULT ClearPointersTo(VwParagraphBox) } diff --git a/Src/views/ViewsTlb.idl b/Src/views/ViewsTlb.idl index 5dbedb0a1e..c202ccb6fa 100644 --- a/Src/views/ViewsTlb.idl +++ b/Src/views/ViewsTlb.idl @@ -27,9 +27,4 @@ DeclareLibrary(Views, 1.0, "Views 1.0 Type Library", #include "Views.idh" -// // Include WorldPad WPX load+save interfaces for Linux builds -// #if !WIN32 -// #include "WorldPad.idh" -// #endif // !WIN32 - }; diff --git a/Src/views/Views_GUIDs.cpp b/Src/views/Views_GUIDs.cpp index 1bf5567e49..b0b6013b5f 100644 --- a/Src/views/Views_GUIDs.cpp +++ b/Src/views/Views_GUIDs.cpp @@ -12,7 +12,7 @@ DEFINE_UUIDOF(IVwRootSite, 0xC999413C, 0x28C8, 0x481c, 0x95, 0x43, 0xB0, 0x6C, 0 DEFINE_UUIDOF(ISilDataAccess, 0x26E6E70E, 0x53EB, 0x4372, 0x96, 0xF1, 0x0F, 0x47, 0x07, 0xCC, 0xD1, 0xEB); DEFINE_UUIDOF(IStructuredTextDataAccess, 0xA2A4F9FA, 0xD4E8, 0x4bfb, 0xB6, 0xB7, 0x5F, 0x45, 0xDA, 0xF2, 0xDC, 0x0C); DEFINE_UUIDOF(IVwCacheDa, 0xB9ADC49A, 0xE28B, 0x4858, 0x8C, 0x04, 0x53, 0xE0, 0xD2, 0xE5, 0xA7, 0x6F); -DEFINE_UUIDOF(IVwRootBox, 0x85DB7D7D, 0xD47B, 0x440e, 0xA2, 0x13, 0xF6, 0x2D, 0x52, 0x24, 0xC9, 0x82); +DEFINE_UUIDOF(IVwRootBox, 0xA8944421, 0x3A75, 0x4DD5, 0xA4, 0x69, 0x2E, 0xE2, 0x51, 0x22, 0x8A, 0x26); DEFINE_UUIDOF(IVwPropertyStore, 0x3D4847FE, 0xEA2D, 0x4255, 0xA4, 0x96, 0x77, 0x00, 0x59, 0xA1, 0x34, 0xCC); DEFINE_UUIDOF(IVwOverlay, 0x7D9089C1, 0x3BB9, 0x11d4, 0x80, 0x78, 0x00, 0x00, 0xC0, 0xFB, 0x81, 0xB5); DEFINE_UUIDOF(IVwPrintContext, 0xFF2E1DC2, 0x95A8, 0x41c6, 0x85, 0xF4, 0xFF, 0xCA, 0x3A, 0x64, 0x21, 0x6A); @@ -42,7 +42,6 @@ DEFINE_UUIDOF(IVwDrawRootBuffered, 0xD9E9D65F, 0xE81F, 0x439e, 0x80, 0x10, 0x5B, DEFINE_UUIDOF(VwDrawRootBuffered, 0x97199458, 0x10C7, 0x49da, 0xB3, 0xAE, 0xEA, 0x92, 0x2E, 0xA6, 0x48, 0x59); DEFINE_UUIDOF(VwSynchronizer, 0x5E149A49, 0xCAEE, 0x4823, 0x97, 0xF7, 0xBB, 0x9D, 0xED, 0x2A, 0x62, 0xBC); DEFINE_UUIDOF(VwLayoutStream, 0x1CD09E06, 0x6978, 0x4969, 0xA1, 0xFC, 0x46, 0x27, 0x23, 0x58, 0x7C, 0x32); -DEFINE_UUIDOF(IIMEKeyboardSwitcher, 0x4D2BC310, 0xDADF, 0x11DE, 0x9E, 0x3A, 0x00, 0x19, 0xDB, 0xF4, 0x56, 0x6E); DEFINE_UUIDOF(IPictureFactory, 0x110B7E88, 0x2968, 0x11E0, 0xB4, 0x93, 0x00, 0x19, 0xDB, 0xF4, 0x56, 0x6E); DEFINE_UUIDOF(PictureFactory, 0x17A2E876, 0x2968, 0x11E0, 0x80, 0x46, 0x00, 0x19, 0xDB, 0xF4, 0x56, 0x6E); DEFINE_UUIDOF(IVwWindow, 0x8856396c, 0x63a9, 0x4bc7, 0xad, 0x47, 0x87, 0xec, 0x8b, 0x6e, 0xf5, 0xa4); diff --git a/Src/views/VwRootBox.cpp b/Src/views/VwRootBox.cpp index 6492ba5522..6d89f08907 100644 --- a/Src/views/VwRootBox.cpp +++ b/Src/views/VwRootBox.cpp @@ -24,13 +24,8 @@ DEFINE_THIS_FILE -#ifdef WIN32 #undef ENABLE_TSF #define ENABLE_TSF -#else /* ! WIN32 */ -#undef MANAGED_KEYBOARDING -#define MANAGED_KEYBOARDING -#endif /* ! WIN32 */ #undef Tracing_KeybdSelection //#define Tracing_KeybdSelection @@ -54,27 +49,16 @@ const CLSID CLSID_ViewInputManager = {0x830BAF1F, 0x6F84, 0x46EF, {0xB6, 0x3E, 0 VwRootBox::VwRootBox(VwPropertyStore * pzvps) :VwDivBox(pzvps) { - m_cref = 1; - ModuleEntry::ModuleAddRef(); - m_fDirty = false; - m_fNewSelection = false; - m_fInDrag = false; - m_hrSegmentError = S_OK; - m_cMaxParasToScan = 4; - // Usually set in Layout method, but some tests don't do this... - // play safe also for any code called before Layout. - m_ptDpiSrc.x = 96; - m_ptDpiSrc.y = 96; - -#ifdef ENABLE_TSF - m_qtxs.Attach(NewObj VwTextStore(this)); -#elif defined(MANAGED_KEYBOARDING) - m_qvim.CreateInstance(CLSID_ViewInputManager); -#endif /*ENABLE_TSF*/ + Init(); } // Protected default constructor used for CreateCom VwRootBox::VwRootBox() +{ + Init(); +} + +void VwRootBox::Init() { m_cref = 1; ModuleEntry::ModuleAddRef(); @@ -83,13 +67,19 @@ VwRootBox::VwRootBox() m_fInDrag = false; m_hrSegmentError = S_OK; m_cMaxParasToScan = 4; + // Usually set in Layout method, but some tests don't do this... + // play safe also for any code called before Layout. m_ptDpiSrc.x = 96; m_ptDpiSrc.y = 96; #ifdef ENABLE_TSF - m_qtxs.Attach(NewObj VwTextStore(this)); -#elif defined(MANAGED_KEYBOARDING) +#ifdef WIN32 + VwTextStorePtr qtxs; + qtxs.Attach(NewObj VwTextStore(this)); + CheckHr(qtxs->QueryInterface(IID_IViewInputMgr, (void**)&m_qvim)); +#else m_qvim.CreateInstance(CLSID_ViewInputManager); +#endif #endif /*ENABLE_TSF*/ } @@ -97,8 +87,6 @@ VwRootBox::VwRootBox() VwRootBox::~VwRootBox() { #ifdef ENABLE_TSF - Assert(!m_qtxs); // Make sure the Close method was called before it gets destroyed. -#elif defined(MANAGED_KEYBOARDING) Assert(!m_qvim); // Make sure the Close method was called before it gets destroyed. #endif /*ENABLE_TSF*/ Assert(!m_qsda); // Make sure the Close method was called before it gets destroyed. @@ -277,10 +265,6 @@ STDMETHODIMP VwRootBox::SetSite(IVwRootSite * pvrs) m_qvrs = pvrs; #ifdef ENABLE_TSF - // Initialize for interaction with Text Services. - if (m_qtxs) - m_qtxs->Init(); -#elif defined(MANAGED_KEYBOARDING) if (m_qvim) CheckHr(m_qvim->Init(this)); #endif /*ENABLE_TSF*/ @@ -686,11 +670,6 @@ STDMETHODIMP VwRootBox::DestroySelection() if (!m_qvwsel) return S_OK; // nothing to destroy #ifdef ENABLE_TSF - // If we don't do this the text service keeps trying to do things - // and we get errors because our VwTextStore doesn't work right when there's no selection. - if (m_qtxs) - m_qtxs->TerminateAllCompositions(); -#elif defined(MANAGED_KEYBOARDING) // If we don't do this the text service keeps trying to do things // and we get errors because our VwTextStore doesn't work right when there's no selection. if (m_qvim) @@ -2531,9 +2510,6 @@ void VwRootBox::HandleActivate(VwSelectionState vss, bool fSetFocus) // This is critical to be called whenever Activate() is called, so that TSF has the // right focus. Missing this call to SetFocus() caused LT-5345 and LT-7488! #ifdef ENABLE_TSF - if (vss == vssEnabled && fSetFocus && m_qtxs) - m_qtxs->SetFocus(); -#elif defined(MANAGED_KEYBOARDING) if (vss == vssEnabled && fSetFocus && m_qvim) CheckHr(m_qvim->SetFocus()); #endif /*ENABLE_TSF*/ @@ -2541,9 +2517,6 @@ void VwRootBox::HandleActivate(VwSelectionState vss, bool fSetFocus) if (m_vss == vss) return; #ifdef ENABLE_TSF - if (vss != vssEnabled && m_qtxs) - m_qtxs->OnLoseFocus(); -#elif defined(MANAGED_KEYBOARDING) if (vss != vssEnabled && m_qvim) CheckHr(m_qvim->KillFocus()); #endif /*ENABLE_TSF*/ @@ -2590,8 +2563,6 @@ STDMETHODIMP VwRootBox::get_IsCompositionInProgress(ComBool * pfInProgress) ChkComArgPtr(pfInProgress); #ifdef ENABLE_TSF - *pfInProgress = m_qtxs->IsCompositionActive(); -#elif defined(MANAGED_KEYBOARDING) CheckHr(m_qvim->get_IsCompositionActive(pfInProgress)); #else *pfInProgress = FALSE; @@ -2948,68 +2919,6 @@ STDMETHODIMP VwRootBox::DrawRoot2(IVwGraphics * pvg, RECT rcSrcRoot1, RECT rcDst END_COM_METHOD(g_fact, IID_IVwRootBox); } -/*---------------------------------------------------------------------------------------------- - Set the active keyboard appropriately for the given writing system. This method doesn't - really belong necessarily on IVwRootBox, but it fits there as well as anywhere. - - @param pws - points to ILgWritingSystem object. - @param pbstrActiveKeymanKbd - name of the current (active) Keyman keyboard, if any. - @param pnActiveLangId - lang id of the current (active) keyboard. - @param phklActive - HKL of the current (active) keyboard/language - @param pfSelectLangPending - set true as appropriate. -----------------------------------------------------------------------------------------------*/ -STDMETHODIMP VwRootBox::SetKeyboardForWs(ILgWritingSystem * pws, BSTR * pbstrActiveKeymanKbd, - int * pnActiveLangId, int * phklActive, ComBool * pfSelectLangPending) -{ - BEGIN_COM_METHOD; - ChkComArgPtr(pws); - ChkComArgPtr(pbstrActiveKeymanKbd); - ChkComArgPtr(pnActiveLangId); - ChkComArgPtr(phklActive); - ChkComArgPtr(pfSelectLangPending); - - int nLangId; - int nLocale; - CheckHr(pws->get_LCID(&nLocale)); - CheckHr(pws->get_CurrentLCID(&nLangId)); - int ws; - CheckHr(pws->get_Handle(&ws)); -#ifdef Tracing_KeybdSelection - StrAnsi sta; - sta.Format("VwRootBox::SetKeyboardForWs(%d) [new langid %d from old hkl %d]%n", - ws, nLangId, *pnActiveLangId); - ::OutputDebugStringA(sta.Chars()); -#endif - - // We possibly set a Keyman keyboard, more precisely than the langid can do. Only attempt - // this if we are using the default langid for the ws. - SmartBstr sbstrKeymanKbd; - if (nLangId == LANGIDFROMLCID(nLocale)) - CheckHr(pws->get_Keyboard(&sbstrKeymanKbd)); - // else let it seem we don't have one, even if we do. -#ifdef TRACING_KEYMAN - StrAnsi sta; - sta.Format("Adjusting keyboard for ws %d, keyman keyboard should be %S\n", - ws, sbstrKeymanKbd.Chars()); - OutputDebugStringA(sta.Chars()); -#endif - ILgTextServicesPtr qlts; -#ifdef WIN32 - qlts.CreateInstance(CLSID_LgTextServices); -#else - CheckHr(m_qvim->QueryInterface(IID_ILgTextServices, (void **) &qlts)); -#endif - CheckHr(qlts->SetKeyboard(nLangId, sbstrKeymanKbd, pnActiveLangId, pbstrActiveKeymanKbd, - pfSelectLangPending)); -#if ENABLE_INPUT_METHODS - HKL hkl = ::GetKeyboardLayout(0); - *phklActive = (int)hkl; - SetImeWindowLocation(hkl); -#endif - - END_COM_METHOD(g_fact, IID_IVwRootBox); -} - /*---------------------------------------------------------------------------------------------- Lay the box out in the available width. Must be called before Draw, Height, or Width ----------------------------------------------------------------------------------------------*/ @@ -3028,9 +2937,6 @@ STDMETHODIMP VwRootBox::Layout(IVwGraphics * pvg, int dxAvailWidth) Construct(pvg, dxAvailWidth); VwDivBox::DoLayout(pvg, dxAvailWidth, -1, true); #ifdef ENABLE_TSF - if (m_qtxs) - m_qtxs->OnLayoutChange(); -#elif defined(MANAGED_KEYBOARDING) if (m_qvim) CheckHr(m_qvim->OnLayoutChange()); #endif /*ENABLE_TSF*/ @@ -3713,20 +3619,11 @@ STDMETHODIMP VwRootBox::Close() m_qsync.Clear(); #ifdef ENABLE_TSF - if (m_qtxs) // In case this method is called twice (which can happen). - { - // m_qtxs gets created in the c'tor, so one could think of destroying it in the d'tor. - // However, because VwTextStore holds a smart pointer to us (VwRootBox) this would - // result in the RootBox not being deleted because the reference count is one off. - m_qtxs->Close(); // Clear out any internal smart pointers. - m_qtxs.Clear(); - } -#elif defined(MANAGED_KEYBOARDING) + // m_qvim gets created in the c'tor, so one could think of destroying it in the + // d'tor. However, because the view manager holds a smart pointer to us (VwRootBox) this + // would result in the RootBox not being deleted because the reference count is one off. if (m_qvim) // In case this method is called twice (which can happen). { - // m_qvim gets created in the c'tor, so one could think of destroying it in the d'tor. - // However, because the view manager holds a smart pointer to us (VwRootBox) this would - // result in the RootBox not being deleted because the reference count is one off. CheckHr(m_qvim->Close()); // Clear out any internal smart pointers. m_qvim.Clear(); } @@ -4018,9 +3915,6 @@ void VwRootBox::NotifySelChange(VwSelChangeType nHow, bool fUpdateRootSite) CheckHr(m_qvrs->SelectionChanged(this, m_qvwsel)); #ifdef ENABLE_TSF - if (m_qtxs) - m_qtxs->OnSelChange(nHow); -#elif defined(MANAGED_KEYBOARDING) if (m_qvim) { // I'm not sure if it is really necessary to store m_pvpboxLastSelectedAnchor or if we @@ -4065,9 +3959,6 @@ void VwRootBox::LayoutFull() if (dyOld != FieldHeight() || dxOld != Width() || dyOld2 != Height()) CheckHr(m_qvrs->RootBoxSizeChanged(this)); #ifdef ENABLE_TSF - if (m_qtxs) - m_qtxs->OnLayoutChange(); -#elif defined(MANAGED_KEYBOARDING) if (m_qvim) CheckHr(m_qvim->OnLayoutChange()); #endif /*ENABLE_TSF*/ @@ -4289,9 +4180,6 @@ bool VwRootBox::RelayoutCore(IVwGraphics * pvg, int dxpAvailWidth, VwRootBox * p bool result = SuperClass::Relayout(pvg, dxpAvailWidth, prootb, pfixmap, dxpAvailOnLine, pmmbi); #ifdef ENABLE_TSF - if (m_qtxs) - m_qtxs->OnLayoutChange(); -#elif defined(MANAGED_KEYBOARDING) if (m_qvim) CheckHr(m_qvim->OnLayoutChange()); #endif /*ENABLE_TSF*/ @@ -4408,66 +4296,6 @@ void VwRootBox::SetSelection(VwSelection * pvwsel, bool fUpdateRootSite) return; } -#if ENABLE_INPUT_METHODS -/*---------------------------------------------------------------------------------------------- - If the current keyboard and window is associated with an IME, then set the IME composition - window's location to (approximately) follow the screen location of the selection. -----------------------------------------------------------------------------------------------*/ -void VwRootBox::SetImeWindowLocation(HKL hkl) -{ - if (!::ImmIsIME(hkl)) - return; - HWND hwnd = NULL; - m_qvrs->get_Hwnd((DWORD *)&hwnd); - if (hwnd == NULL) - return; - HIMC himc = ::ImmGetContext(hwnd); - if (himc == NULL) - return; - if (m_qvwsel.Ptr() == NULL) - return; - - COMPOSITIONFORM comp; - if (::ImmGetCompositionWindow(himc, &comp)) - { -#ifdef Tracing_KeybdSelection - StrAnsi staStyle; - switch (comp.dwStyle) - { - case CFS_DEFAULT: staStyle = "CFS_DEFAULT"; break; - case CFS_FORCE_POSITION: staStyle = "CFS_FORCE_POSITION"; break; - case CFS_POINT: staStyle = "CFS_POINT"; break; - case CFS_RECT: staStyle = "CFS_RECT"; break; - default: staStyle.Format("0x%x", (int)comp.dwStyle); break; - } - StrAnsi staMsg; - staMsg.Format("VwRootBox::SetImeWindowLocation(hkl = %d) - " - "::ImmGetCompositionWindow() => %s, {X=%d,Y=%d}, {L=%d,T=%d,R=%d,B=%d}%n", - (int)hkl, staStyle.Chars(), (int)comp.ptCurrentPos.x, (int)comp.ptCurrentPos.y, - (int)comp.rcArea.left, (int)comp.rcArea.top, (int)comp.rcArea.right, - (int)comp.rcArea.bottom); - ::OutputDebugStringA(staMsg.Chars()); -#endif - HoldGraphics hg(this); - Rect rdPrimary, rdSec; - ComBool fSplit, fEndBeforeAnchor; - CheckHr(m_qvwsel->Location(hg.m_qvg, hg.m_rcSrcRoot, hg.m_rcDstRoot, &rdPrimary, - &rdSec, &fSplit, &fEndBeforeAnchor)); -#ifdef Tracing_KeybdSelection - staMsg.Format("VwRootBox::SetImeWindowLocation(hkl = %d) - " - "m_qvwsel->Location() => rdPrimary = {L=%d,T=%d,R=%d,B=%d}%n", - (int)hkl, rdPrimary.left, rdPrimary.top, rdPrimary.right, rdPrimary.bottom); - ::OutputDebugStringA(staMsg.Chars()); -#endif - comp.dwStyle = CFS_POINT; - comp.ptCurrentPos.x = rdPrimary.left; - comp.ptCurrentPos.y = rdPrimary.top; - ::ImmSetCompositionWindow(himc, &comp); - } -} -#endif //ENABLE_INPUT_METHODS - - //:>******************************************************************************************** //:> Notifier-related methods //:>******************************************************************************************** @@ -4875,9 +4703,6 @@ void VwRootBox::MaximizeLaziness(VwBox * pboxMinKeep, VwBox * pboxLimKeep) for (int i = 0; i < m_vselInUse.Size(); i++) m_vselInUse[i]->AddToKeepList(&li); #ifdef ENABLE_TSF - if (m_qtxs) - m_qtxs->AddToKeepList(&li); -#elif defined(MANAGED_KEYBOARDING) if (m_pvpboxLastSelectedAnchor) li.KeepSequence(m_pvpboxLastSelectedAnchor, m_pvpboxLastSelectedAnchor->NextOrLazy()); #endif /*ENABLE_TSF*/ @@ -5434,9 +5259,6 @@ STDMETHODIMP VwRootBox::get_Synchronizer(IVwSynchronizer ** ppsync) inline bool VwRootBox::OnMouseEvent(int xd, int yd, RECT rcSrc, RECT rcDst, VwMouseEvent me) { #ifdef ENABLE_TSF - if (m_qtxs) - return m_qtxs->MouseEvent(xd, yd, rcSrc, rcDst, me); -#elif defined(MANAGED_KEYBOARDING) if (m_qvim) { ComBool fHandled; diff --git a/Src/views/VwRootBox.h b/Src/views/VwRootBox.h index 28fd84faa7..eec2de5123 100644 --- a/Src/views/VwRootBox.h +++ b/Src/views/VwRootBox.h @@ -20,13 +20,8 @@ Last reviewed: Not yet. class VwTextStore; DEFINE_COM_PTR(VwTextStore); -#ifdef WIN32 #undef ENABLE_TSF #define ENABLE_TSF -#else /* ! WIN32 */ -#undef MANAGED_KEYBOARDING -#define MANAGED_KEYBOARDING -#endif /*---------------------------------------------------------------------------------------------- These are values that may be passed to VwRootBox::OnExtendedChar. @@ -194,8 +189,6 @@ class VwRootBox : public IVwRootBox, public IServiceProvider, public VwDivBox IVwViewConstructor ** ppvwvc, int * pfrag, IVwStylesheet ** ppss); STDMETHOD(DrawRoot2)(IVwGraphics * pvg, RECT rcSrcRoot1, RECT rcDstRoot1, ComBool fDrawSel, int ysTop, int dysHeight); - STDMETHOD(SetKeyboardForWs)(ILgWritingSystem * pws, BSTR * pbstrActiveKeymanKbd, - int * pnActiveLangId, int * phklActive, ComBool * pfSelectLangPending); STDMETHOD(get_MaxParasToScan)(int * pcParas); STDMETHOD(put_MaxParasToScan)(int cParas); STDMETHOD(DoSpellCheckStep)(ComBool * pfComplete); @@ -331,10 +324,14 @@ class VwRootBox : public IVwRootBox, public IServiceProvider, public VwDivBox void HandleActivate(VwSelectionState vss, bool fSetFocus = false); #ifdef ENABLE_TSF - VwTextStore * TextStore() {return m_qtxs;} -#elif defined(MANAGED_KEYBOARDING) IViewInputMgr * InputManager() { return m_qvim; } + VwParagraphBox * GetLastSelectedAnchorBox() { return m_pvpboxLastSelectedAnchor; } + + // The specified box is being deleted. If somehow m_pvpboxLastSelectedAnchor still + // points at it (this can happen, for one example, during a replace all where + // NoteDependencies cause large-scale regeneration), clear the pointers to a safe, + // neutral state. void ClearSelectedAnchorPointerTo(VwParagraphBox * pvpbox) { if (m_pvpboxLastSelectedAnchor == pvpbox) @@ -420,8 +417,6 @@ class VwRootBox : public IVwRootBox, public IServiceProvider, public VwDivBox VwSynchronizerPtr m_qsync; // If not null use this to synchronize object display heights. #ifdef ENABLE_TSF - VwTextStorePtr m_qtxs; -#elif defined(MANAGED_KEYBOARDING) // last selected paragraph box. See comment in VwRootBox::NotifySelChange. VwParagraphBox * m_pvpboxLastSelectedAnchor; @@ -461,6 +456,7 @@ class VwRootBox : public IVwRootBox, public IServiceProvider, public VwDivBox // Protected default constructor does nothing. // After creating with CreateCom, must set everything up from Init VwRootBox(); + void Init(); HRESULT MakeSimpleSelAt(VwBox * pboxStart, int itssStart, ComBool fInitial, ComBool fEdit, ComBool fRange, ComBool fInstall, IVwSelection ** ppsel, bool fContinueToParents = true); @@ -477,7 +473,6 @@ class VwRootBox : public IVwRootBox, public IServiceProvider, public VwDivBox virtual void FixSync(VwSynchronizer *psync, VwRootBox * prootb){} VwNotifier * NotifierForObjPropIndex(HVO hvoContext, int tag, int iprop); - void SetImeWindowLocation(HKL hkl); VwBox * FindClosestBox(IVwGraphics * pvg, int xd, int yd, Rect rcSrc, Rect rcDst, Rect * prcSrc, Rect * prcDst); bool EnsureConstructed(bool fDoLayout = false); diff --git a/Src/views/VwSelection.cpp b/Src/views/VwSelection.cpp index a823b7dedb..68948f0e00 100644 --- a/Src/views/VwSelection.cpp +++ b/Src/views/VwSelection.cpp @@ -5238,13 +5238,6 @@ void VwTextSelection::CommitAndContinue(bool * pfOk, VwChangeInfo * pci) if (!m_qtsbProp) { #ifdef ENABLE_TSF - if (m_pvpbox->Root()->TextStore()->IsDoingRecommit()) - { - // We need to do a real update!! - StartEditing(); - } - else -#elif defined(MANAGED_KEYBOARDING) ComBool fDoingRecommit; CheckHr(m_pvpbox->Root()->InputManager()->get_IsEndingComposition(&fDoingRecommit)); if (fDoingRecommit) @@ -7286,8 +7279,6 @@ void VwTextSelection::DoUpdateProp(VwRootBox * prootb, HVO hvo, PropTag tag, VwN *pfOk = false; // only set true if we make it all the way (though failures throw exceptions) #ifdef ENABLE_TSF - VwTextStore * ptxs = prootb->TextStore(); -#elif defined(MANAGED_KEYBOARDING) IViewInputMgr * pvim = prootb->InputManager(); #endif @@ -7310,12 +7301,6 @@ void VwTextSelection::DoUpdateProp(VwRootBox * prootb, HVO hvo, PropTag tag, VwN int ichOffset = m_ichAnchor - m_ichMinEditProp; int * poffset = &ichOffset; #ifdef ENABLE_TSF - if (ptxs->IsCompositionActive()) - { - ptxs->NoteCommitDuringComposition(); - } - else -#elif defined(MANAGED_KEYBOARDING) ComBool fProcessed; CheckHr(pvim->OnUpdateProp(&fProcessed)); if (!fProcessed) @@ -7406,15 +7391,13 @@ void VwTextSelection::DoUpdateProp(VwRootBox * prootb, HVO hvo, PropTag tag, VwN CheckHr(qsda->get_StringProp(hvo, tag, &qtssOld)); int ichMinDiff, ichLimDiff; // in qtssNewSub CompareStrings(qtssOld, qtssNewSub, &ichMinDiff, &ichLimDiff); -#ifdef MANAGED_KEYBOARDING +#ifdef ENABLE_TSF ComBool fDoingRecommit; CheckHr(pvim->get_IsEndingComposition(&fDoingRecommit)); #endif if (ichMinDiff >= 0 #ifdef ENABLE_TSF - || ptxs->IsDoingRecommit() // there's some difference -#elif defined(MANAGED_KEYBOARDING) || fDoingRecommit // there's some difference #endif ) @@ -7495,15 +7478,13 @@ void VwTextSelection::DoUpdateProp(VwRootBox * prootb, HVO hvo, PropTag tag, VwN CheckHr(qsda->get_MultiStringAlt(hvo, tag, fragEdit, &qtssOld)); ComBool fEqual; CheckHr(qtssOld->Equals(qtssNewSub, &fEqual)); -#ifdef MANAGED_KEYBOARDING +#ifdef ENABLE_TSF ComBool fDoingRecommit; CheckHr(pvim->get_IsEndingComposition(&fDoingRecommit)); #endif if (!fEqual #ifdef ENABLE_TSF - || ptxs->IsDoingRecommit() -#elif defined(MANAGED_KEYBOARDING) || fDoingRecommit #endif ) diff --git a/Src/views/VwTextBoxes.cpp b/Src/views/VwTextBoxes.cpp index 2f64e72178..7ec12e54e5 100644 --- a/Src/views/VwTextBoxes.cpp +++ b/Src/views/VwTextBoxes.cpp @@ -4048,10 +4048,6 @@ VwParagraphBox::~VwParagraphBox() if (prootb) { #ifdef ENABLE_TSF - VwTextStore * ptxs = prootb->TextStore(); - if (ptxs) - ptxs->ClearPointersTo(this); -#elif defined(MANAGED_KEYBOARDING) prootb->ClearSelectedAnchorPointerTo(this); #endif /*ENABLE_TSF*/ Assert(prootb->m_pvpboxNextSpellCheck != this); @@ -4760,8 +4756,6 @@ void VwParagraphBox::ReplaceStrings(IVwGraphics * pvg, int itssMin, int itssLim, int ctssOld = Source()->CStrings(); int ctssNew = pvpboxRep->Source()->CStrings(); #ifdef ENABLE_TSF - VwTextStore * ptxs = Root()->TextStore(); -#elif defined(MANAGED_KEYBOARDING) IViewInputMgr * pvim = Root()->InputManager(); #endif /*ENABLE_TSF*/ VwBox * pboxFirstSubRep = pvpboxRep->FirstBox(); @@ -4793,12 +4787,6 @@ void VwParagraphBox::ReplaceStrings(IVwGraphics * pvg, int itssMin, int itssLim, // dictionary. It requires a paint. Source()->ReplaceContents(itssMin, itssLim, pvpboxRep->Source()); Assert(cchNew == cchOld); -#ifdef ENABLE_TSF - // Must NOT notify if it didn't change...this produces spurious messages - // that interfere with IMEs. - //if (ptxs) - // ptxs->OnDocChange(); -#endif /*ENABLE_TSF*/ return; // no change needed } @@ -4819,9 +4807,6 @@ void VwParagraphBox::ReplaceStrings(IVwGraphics * pvg, int itssMin, int itssLim, // string collection. Source()->ReplaceContents(itssMin, itssLim, pvpboxRep->Source()); #ifdef ENABLE_TSF - if (ptxs) - ptxs->OnDocChange(); -#elif defined(MANAGED_KEYBOARDING) if (pvim) CheckHr(pvim->OnTextChange()); #endif /*ENABLE_TSF*/ @@ -4939,9 +4924,6 @@ void VwParagraphBox::ReplaceStrings(IVwGraphics * pvg, int itssMin, int itssLim, prootb->RelayoutRoot(pvg, &fixmap); #ifdef ENABLE_TSF - if (ptxs) - ptxs->OnDocChange(); -#elif defined(MANAGED_KEYBOARDING) if (pvim) CheckHr(pvim->OnTextChange()); #endif /*ENABLE_TSF*/ @@ -4976,9 +4958,6 @@ void VwParagraphBox::ReplaceStrings(IVwGraphics * pvg, int itssMin, int itssLim, prootb->InvalidateRect(&vwrectNew); } #ifdef ENABLE_TSF - if (ptxs) - ptxs->OnDocChange(); -#elif defined(MANAGED_KEYBOARDING) if (pvim) CheckHr(pvim->OnTextChange()); #endif /*ENABLE_TSF*/ @@ -5008,9 +4987,6 @@ void VwParagraphBox::ReplaceStrings(IVwGraphics * pvg, int itssMin, int itssLim, Root()->InvalidateRect(&vwrectNew); #ifdef ENABLE_TSF - if (ptxs) - ptxs->OnDocChange(); -#elif defined(MANAGED_KEYBOARDING) if (pvim) CheckHr(pvim->OnTextChange()); #endif /*ENABLE_TSF*/ @@ -5835,9 +5811,6 @@ void VwParagraphBox::DoLayoutAux(IVwGraphics * pvg, void * pv) Assert(false); #endif #ifdef ENABLE_TSF - if (Root()->TextStore()) - Root()->TextStore()->OnLayoutChange(); -#elif defined(MANAGED_KEYBOARDING) if (Root()->InputManager()) CheckHr(Root()->InputManager()->OnLayoutChange()); #endif /*ENABLE_TSF*/ diff --git a/Src/views/VwTextStore.cpp b/Src/views/VwTextStore.cpp index 65a188b8d3..821ec988ff 100644 --- a/Src/views/VwTextStore.cpp +++ b/Src/views/VwTextStore.cpp @@ -212,6 +212,8 @@ STDMETHODIMP VwTextStore::QueryInterface(REFIID riid, void ** ppv) *ppv = static_cast(this); else if (riid == IID_ITfContextOwnerCompositionSink) *ppv = static_cast(this); + else if (riid == IID_IViewInputMgr) + *ppv = static_cast(this); // else if (&riid == &CLSID_VwTextStore) // *ppv = static_cast(this); else if (riid == IID_ISupportErrorInfo) @@ -1562,94 +1564,70 @@ STDMETHODIMP VwTextStore::InsertEmbeddedAtSelection(DWORD dwFlags, IDataObject * } //:>******************************************************************************************** -//:> Other Methods. +//:> IViewInputMgr methods //:>******************************************************************************************** /*---------------------------------------------------------------------------------------------- - Retrieve the start and end boxes of the selection. Return true if there is a text selection. - Returns a value for both boxes, even if they are the same. + Create and initialize the document manager. + This can be called more than once. If a document manager already exists we do nothing. ----------------------------------------------------------------------------------------------*/ -VwTextSelection * VwTextStore::GetStartAndEndBoxes(VwParagraphBox ** ppvpboxStart, - VwParagraphBox ** ppvpboxEnd, bool * pfEndBeforeAnchor) +STDMETHODIMP VwTextStore::Init(IVwRootBox* prootb) { - VwTextSelection * psel = dynamic_cast(m_qrootb->Selection()); - VwParagraphBox * pvpboxStart = NULL; - VwParagraphBox * pvpboxEnd = NULL; - if (psel) - { - ComBool fEndBeforeAnchor; - CheckHr(psel->get_EndBeforeAnchor(&fEndBeforeAnchor)); - if (pfEndBeforeAnchor) - *pfEndBeforeAnchor = static_cast(fEndBeforeAnchor); + BEGIN_COM_METHOD; + if (!s_qttmThreadMgr) + return S_OK; + // If we already have a DocMgr, we don't want to create a new one, especially without + // properly closing off the old one with a pop to clear the reference count on this. + // Otherwise we end up with leaking memory on this. + if (m_qtdmDocMgr) + return S_OK; + // Create the Text Services Framework document manager for this "document" (root box). + CheckHr(s_qttmThreadMgr->CreateDocumentMgr(&m_qtdmDocMgr)); - if (fEndBeforeAnchor) - { - pvpboxStart = psel->EndBox(); - pvpboxEnd = psel->AnchorBox(); - if (!pvpboxStart) // Single-paragraph selection. - pvpboxStart = pvpboxEnd; - } - else - { - pvpboxStart = psel->AnchorBox(); - pvpboxEnd = psel->EndBox(); - if (!pvpboxEnd) // Single-paragraph selection. - pvpboxEnd = pvpboxStart; - } - if (pvpboxStart) - { - m_cchLastPara = pvpboxStart->Source()->Cch(); - if (pvpboxStart != pvpboxEnd) - m_cchLastPara += s_cchParaBreak + pvpboxEnd->Source()->Cch(); - } - else - { - // probably in the middle of setting up the selection. Not much we can do... - psel = NULL; - } - } - // If no selection, let the caller worry about it. - *ppvpboxStart = pvpboxStart; - *ppvpboxEnd = pvpboxEnd; - return psel; + // Create and install the Text Services Framework "context". + CheckHr(m_qtdmDocMgr->CreateContext(s_tfClientID, 0, dynamic_cast(this), + &m_qtcContext, &m_tfEditCookie)); + CheckHr(m_qtdmDocMgr->Push(m_qtcContext)); + + m_prootb = dynamic_cast(prootb); + AssertPtr(m_prootb); + + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); } /*---------------------------------------------------------------------------------------------- - Compute the length of the current text (in decomposed characters NFD). + Release the interfaces installed by the constructor or by Init. ----------------------------------------------------------------------------------------------*/ -int VwTextStore::TextLength() +STDMETHODIMP VwTextStore::Close() { - VwParagraphBox * pvpboxFirst; - VwParagraphBox * pvpboxLast; - VwTextSelection * psel = GetStartAndEndBoxes(&pvpboxFirst, &pvpboxLast); - if (psel) - { - if (pvpboxFirst != pvpboxLast) - return pvpboxFirst->Source()->Cch() + s_cchParaBreak + pvpboxLast->Source()->Cch(); - else - return pvpboxFirst->Source()->Cch(); - } - else - { - // Handle no selection by pretending we have an empty document. - return 0; - } + BEGIN_COM_METHOD; + if (!m_qtdmDocMgr) + return S_OK; + AssertPtr(s_qttmThreadMgr.Ptr()); + CheckHr(m_qtdmDocMgr->Pop(TF_POPF_ALL)); + m_qtdmDocMgr.Clear(); + m_qtcContext.Clear(); + m_qrootb.Clear(); + m_qws.Clear(); + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); } /*---------------------------------------------------------------------------------------------- The document changed. (Ideally we'd like to know where, but at least let the service know.) ----------------------------------------------------------------------------------------------*/ -void VwTextStore::OnDocChange() +STDMETHODIMP VwTextStore::OnTextChange() { + BEGIN_COM_METHOD; if (m_fNotify) { if (m_AdviseSinkInfo.m_dwMask & TS_AS_TEXT_CHANGE && m_AdviseSinkInfo.m_qTextStoreACPSink) { // issue a document changed notification. The OldEnd may not be exactly right. + VwParagraphBox* pvpboxCurrent = m_prootb->GetLastSelectedAnchorBox(); TS_TEXTCHANGE ttc; ttc.acpStart = 0; - ttc.acpOldEnd = m_pvpboxCurrent ? LogToAcp(m_pvpboxCurrent->Source()->Cch()) : 0; + ttc.acpOldEnd = pvpboxCurrent ? LogToAcp(pvpboxCurrent->Source()->Cch()) : 0; ttc.acpNewEnd = ttc.acpOldEnd; #ifdef TRACING_TSF StrAnsi sta; @@ -1660,6 +1638,8 @@ void VwTextStore::OnDocChange() } } DoDisplayAttrs(); + + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); } /*---------------------------------------------------------------------------------------------- @@ -1667,8 +1647,9 @@ void VwTextStore::OnDocChange() @param nHow Flag how the selection changed: ksctSamePara, ksctDiffPara, etc. ----------------------------------------------------------------------------------------------*/ -void VwTextStore::OnSelChange(VwSelChangeType nHow) +STDMETHODIMP VwTextStore::OnSelectionChange(int nHow) { + BEGIN_COM_METHOD; #ifdef TRACING_TSF StrAnsi sta; sta.Format("VwTextStore::OnSelChange(%d), m_fNotify = %s%n", @@ -1694,7 +1675,7 @@ void VwTextStore::OnSelChange(VwSelChangeType nHow) // scripts are installed. For example, we've had crashes here when selecting an // icon in interlinear text using Chinese data. if (!psel) - return; + return S_OK; VwParagraphBox * pvpboxNew = psel ? psel->AnchorBox() : NULL; if (m_AdviseSinkInfo.m_dwMask & TS_AS_TEXT_CHANGE && m_AdviseSinkInfo.m_qTextStoreACPSink) @@ -1705,7 +1686,8 @@ void VwTextStore::OnSelChange(VwSelChangeType nHow) // REVIEW (DamienD): I don't think this will give an accurate acpOldEnd, since // the LogToAcp() method calculates the acp offset based off of the current // paragraphs in the selection - ttc.acpOldEnd = LogToAcp(m_pvpboxCurrent ? m_pvpboxCurrent->Source()->Cch() + VwParagraphBox* pvpboxCurrent = m_prootb->GetLastSelectedAnchorBox(); + ttc.acpOldEnd = LogToAcp(pvpboxCurrent ? pvpboxCurrent->Source()->Cch() : m_cchLastPara); ttc.acpNewEnd = pvpboxNew ? LogToAcp(pvpboxNew->Source()->Cch()) : 0; #ifdef TRACING_TSF @@ -1725,7 +1707,6 @@ void VwTextStore::OnSelChange(VwSelChangeType nHow) m_AdviseSinkInfo.m_qTextStoreACPSink->OnTextChange(0, &ttc); } } - m_pvpboxCurrent = pvpboxNew; } if (m_AdviseSinkInfo.m_dwMask & TS_AS_SEL_CHANGE && m_AdviseSinkInfo.m_qTextStoreACPSink && nHow != ksctDeleted) @@ -1761,10 +1742,12 @@ void VwTextStore::OnSelChange(VwSelChangeType nHow) pIErrorInfo->Release(); } + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); } -void VwTextStore::OnLayoutChange() +STDMETHODIMP VwTextStore::OnLayoutChange() { + BEGIN_COM_METHOD; m_fLayoutChanged = false; if (m_fNotify) { @@ -1784,18 +1767,21 @@ void VwTextStore::OnLayoutChange() } } DoDisplayAttrs(); + + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); } /*---------------------------------------------------------------------------------------------- Set the Text Service focus to our root box. ----------------------------------------------------------------------------------------------*/ -void VwTextStore::SetFocus() +STDMETHODIMP VwTextStore::SetFocus() { + BEGIN_COM_METHOD; #ifdef TRACING_TSF TraceTSF("VwTextStore::SetFocus()\r\n"); #endif if (!s_qttmThreadMgr) - return; + return S_OK; // retrieve the current writing system, so that we can use it to determine whether to // return NFD or NFC to TSF @@ -1813,51 +1799,293 @@ void VwTextStore::SetFocus() { Assert(false); //, "Microsoft's thread manager threw an exception from SetFocus!"); } + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); +} + +/*---------------------------------------------------------------------------------------------- + Send appropriate mouse event notifications, if they have been requested. A "Mouse Down" + event terminates all open compositions if it is not handled by the sink (unless, of course, + the sink does not exist). +----------------------------------------------------------------------------------------------*/ +STDMETHODIMP VwTextStore::OnMouseEvent(int xd, int yd, RECT rcSrc1, RECT rcDst1, VwMouseEvent me, + ComBool * pfProcessed) +{ + BEGIN_COM_METHOD; + ChkComOutPtr(pfProcessed); + if (!m_qMouseSink) + { + *pfProcessed = FALSE; + return S_OK; + } + // Determine whether it intersects the range that the mouse sink is interested in. + HoldGraphicsAtDst hg(m_qrootb, Point(xd, yd)); + // Find the most local box where the user clicked, and where he clicked relative to it. + Rect rcSrcBox; + Rect rcDstBox; + VwBox * pboxClick = m_qrootb->FindBoxClicked(hg.m_qvg, xd, yd, hg.m_rcSrcRoot, hg.m_rcDstRoot, + &rcSrcBox, &rcDstBox); + if (!pboxClick) + { + // The mouse event is nowhere of interest to text services. + *pfProcessed = EndAllCompositions(me == kmeDown); + return S_OK; + } + + VwSelectionPtr qvwsel; + pboxClick->GetSelection(hg.m_qvg, m_qrootb, xd, yd, hg.m_rcSrcRoot, hg.m_rcDstRoot, rcSrcBox, + rcDstBox, &qvwsel); + + VwTextSelection * psel = dynamic_cast(qvwsel.Ptr()); + if (!psel) + { + // It must be a text selection to be relevant for text services. + *pfProcessed = EndAllCompositions(me == kmeDown); + return S_OK; + } + + VwParagraphBox * pvpboxClick = psel->AnchorBox(); + if (pvpboxClick != m_pvpboxMouseSink) + { + // The mouse event is not near the box of interest. + *pfProcessed = EndAllCompositions(me == kmeDown); + return S_OK; + } + + int ichClick = psel->AnchorOffset(); + if (ichClick < m_ichMinMouseSink || ichClick > m_ichLimMouseSink) + { + // The mouse event is not (even close to) the range of interest. + *pfProcessed = EndAllCompositions(me == kmeDown); + return S_OK; + } + RECT rdPrimary, rdSecondary; + ComBool fSplit, fEndBeforeAnchor; + Point pt(xd,yd); + bool fFoundChar = false; + Rect rdChar; + if (ichClick > 0 && ichClick > m_ichMinMouseSink) + { + // See if the click is in the character before the position. Selection was made from a single + // click, so it is an IP. Extend it to cover the previous character. + psel->m_ichEnd--; + psel->m_fEndBeforeAnchor = true; + psel->Location(hg.m_qvg, hg.m_rcSrcRoot, hg.m_rcDstRoot, &rdPrimary, + &rdSecondary, &fSplit, &fEndBeforeAnchor); + rdChar = rdPrimary; + if (rdChar.Contains(pt)) + { + fFoundChar = true; + } + else + { + psel->m_ichEnd++; + } + } + if (ichClick < pvpboxClick->Source()->Cch() && ichClick < m_ichLimMouseSink && !fFoundChar) + { + // See if the click is in the character after the position. Selection was made from a single + // click, so it is an IP. Extend it to cover the following character. + psel->m_ichEnd++; + psel->m_fEndBeforeAnchor = false; + psel->Location(hg.m_qvg, hg.m_rcSrcRoot, hg.m_rcDstRoot, &rdPrimary, + &rdSecondary, &fSplit, &fEndBeforeAnchor); + rdChar = rdPrimary; + if (rdChar.Contains(pt)) + { + fFoundChar = true; + } + } + if (!fFoundChar) + { + // The mouse event wasn't inside a character in the range, maybe just before or + // after (or empty string). + *pfProcessed = EndAllCompositions(me == kmeDown); + return S_OK; + } + + ULONG edge = LogToAcp(ichClick) - LogToAcp(m_ichMinMouseSink); + int section = ((rdChar.right - rdChar.left) > 0) ? + min((xd - rdChar.left) * 4 / (rdChar.right - rdChar.left), 3) : 1; + ULONG quadrant = (section + 2) % 4; // want 2, 3, 0, 1 for the respective sections. + DWORD dwBtnStatus = 0; + + // Figure a set of flags that indicates approximately the state of the mouse. + switch(me) + { + case kmeDown: // no shift, main button + case kmeDblClick: // assume no shift, main button + case kmeMoveDrag: // mouse move, main button down, assume no modifiers + // All of these cases assume the main button is down, nothing else. + dwBtnStatus = MK_LBUTTON; + break; + case kmeExtend: // main click, shift down + dwBtnStatus = MK_LBUTTON | MK_SHIFT; + break; + case kmeUp: // main button up. + // Assume nothing is down + break; + } + + // Send the notification. + BOOL fEaten; + m_qMouseSink->OnMouseEvent(edge, quadrant, dwBtnStatus, &fEaten); +#ifdef TRACING_TSF + if (me == kmeDown) + { + StrAnsi sta; + sta.Format( +"VwTextStore::MouseEvent, xd = %d (%d), width = %d, edge = %d, quadrant = %d - fEaten = %s%n", + xd, xd - rdChar.left, rdChar.Width(), (int) edge, (int) quadrant, + fEaten ? "true" : "false"); + TraceTSF(sta.Chars()); + } +#endif + if (!fEaten) + { + // End all current compositions on mouse down. + *pfProcessed = EndAllCompositions(me == kmeDown); + return S_OK; + } + return S_OK; + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); +} + +STDMETHODIMP VwTextStore::KillFocus() +{ + BEGIN_COM_METHOD; + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); +} + +STDMETHODIMP VwTextStore::OnUpdateProp(ComBool * pSuppressNormalization) +{ + BEGIN_COM_METHOD; + ChkComOutPtr(pSuppressNormalization); + CheckHr(get_IsCompositionActive(pSuppressNormalization)); + if (*pSuppressNormalization) + NoteCommitDuringComposition(); + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); +} + +STDMETHODIMP VwTextStore::get_IsCompositionActive(ComBool * pfCompositionActive) +{ + BEGIN_COM_METHOD; + ChkComOutPtr(pfCompositionActive); + *pfCompositionActive = m_compositions.Size() > 0; + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); +} + +STDMETHODIMP VwTextStore::get_IsEndingComposition(ComBool * pfDoingRecommit) +{ + BEGIN_COM_METHOD; + ChkComOutPtr(pfDoingRecommit); + *pfDoingRecommit = m_fDoingRecommit; + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); +} + +/*---------------------------------------------------------------------------------------------- + Terminate all compositions, and refresh the display attributes. +----------------------------------------------------------------------------------------------*/ +STDMETHODIMP VwTextStore::TerminateAllCompositions() +{ + BEGIN_COM_METHOD; + +#ifdef TRACING_TSF + TraceTSF("VwTextStore::TerminateAllCompositions\n"); +#endif + // Can't have (or terminate!) compositions without a real context. + if (!m_qtcContext) + return S_OK; + HRESULT hr; + ITfContextOwnerCompositionServices * pCompServices; + //get the ITfContextOwnerCompositionServices interface pointer + hr = m_qtcContext->QueryInterface(IID_ITfContextOwnerCompositionServices, + (void **)&pCompServices); + if (SUCCEEDED(hr)) + { + // passing NULL terminates all compositions. We should get OnEndComposition notifications. + hr = pCompServices->TerminateComposition(NULL); + pCompServices->Release(); +#ifdef TRACING_TSF + TraceTSF(" all compositions terminated!\n"); +#endif + } + + END_COM_METHOD(g_factDummy, IID_IViewInputMgr); } +//:>******************************************************************************************** +//:> Other Methods. +//:>******************************************************************************************** + /*---------------------------------------------------------------------------------------------- - Create and initialize the document manager. - This can be called more than once. It releases the old document manager if one - already exists. + Retrieve the start and end boxes of the selection. Return true if there is a text selection. + Returns a value for both boxes, even if they are the same. ----------------------------------------------------------------------------------------------*/ -void VwTextStore::Init() +VwTextSelection * VwTextStore::GetStartAndEndBoxes(VwParagraphBox ** ppvpboxStart, + VwParagraphBox ** ppvpboxEnd, bool * pfEndBeforeAnchor) { - if (!s_qttmThreadMgr) - return; - // If we already have a DocMgr, we don't want to create a new one, especially without - // properly closing off the old one with a pop to clear the reference count on this. - // Otherwise we end up with leaking memory on this. - if (m_qtdmDocMgr) - return; - // Create the Text Services Framework document manager for this "document" (root box). - CheckHr(s_qttmThreadMgr->CreateDocumentMgr(&m_qtdmDocMgr)); - - // Create and install the Text Services Framework "context". - CheckHr(m_qtdmDocMgr->CreateContext(s_tfClientID, 0, dynamic_cast(this), - &m_qtcContext, &m_tfEditCookie)); - CheckHr(m_qtdmDocMgr->Push(m_qtcContext)); - -// HRESULT hr; -// hr = s_qttmThreadMgr->AssociateFocus( -// HWND hwnd, -// ITfDocumentMgr* pdimNew, -// ITfDocumentMgr** ppdimPrev); + VwTextSelection * psel = dynamic_cast(m_qrootb->Selection()); + VwParagraphBox * pvpboxStart = NULL; + VwParagraphBox * pvpboxEnd = NULL; + if (psel) + { + ComBool fEndBeforeAnchor; + CheckHr(psel->get_EndBeforeAnchor(&fEndBeforeAnchor)); + if (pfEndBeforeAnchor) + *pfEndBeforeAnchor = static_cast(fEndBeforeAnchor); + if (fEndBeforeAnchor) + { + pvpboxStart = psel->EndBox(); + pvpboxEnd = psel->AnchorBox(); + if (!pvpboxStart) // Single-paragraph selection. + pvpboxStart = pvpboxEnd; + } + else + { + pvpboxStart = psel->AnchorBox(); + pvpboxEnd = psel->EndBox(); + if (!pvpboxEnd) // Single-paragraph selection. + pvpboxEnd = pvpboxStart; + } + if (pvpboxStart) + { + m_cchLastPara = pvpboxStart->Source()->Cch(); + if (pvpboxStart != pvpboxEnd) + m_cchLastPara += s_cchParaBreak + pvpboxEnd->Source()->Cch(); + } + else + { + // probably in the middle of setting up the selection. Not much we can do... + psel = NULL; + } + } + // If no selection, let the caller worry about it. + *ppvpboxStart = pvpboxStart; + *ppvpboxEnd = pvpboxEnd; + return psel; } /*---------------------------------------------------------------------------------------------- - Release the interfaces installed by the constructor or by Init. + Compute the length of the current text (in decomposed characters NFD). ----------------------------------------------------------------------------------------------*/ -void VwTextStore::Close() +int VwTextStore::TextLength() { - if (!m_qtdmDocMgr) - return; - AssertPtr(s_qttmThreadMgr.Ptr()); - CheckHr(m_qtdmDocMgr->Pop(TF_POPF_ALL)); - m_qtdmDocMgr.Clear(); - m_qtcContext.Clear(); - m_qrootb.Clear(); - m_qws.Clear(); + VwParagraphBox * pvpboxFirst; + VwParagraphBox * pvpboxLast; + VwTextSelection * psel = GetStartAndEndBoxes(&pvpboxFirst, &pvpboxLast); + if (psel) + { + if (pvpboxFirst != pvpboxLast) + return pvpboxFirst->Source()->Cch() + s_cchParaBreak + pvpboxLast->Source()->Cch(); + else + return pvpboxFirst->Source()->Cch(); + } + else + { + // Handle no selection by pretending we have an empty document. + return 0; + } } /*---------------------------------------------------------------------------------------------- @@ -1989,21 +2217,6 @@ void VwTextStore::CreateNewSelection(int ichFirst, int ichLast, bool fEndBeforeA *pptsel = qtsel.Detach(); } -void VwTextStore::AddToKeepList(LazinessIncreaser *pli) -{ - if (m_pvpboxCurrent) - pli->KeepSequence(m_pvpboxCurrent, m_pvpboxCurrent->NextOrLazy()); -} - -// The specified box is being deleted. If somehow we are stil pointing at it -// (this can happen, for one example, during a replace all where NoteDependencies -// cause large-scale regeneration), clear the pointers to a safe, neutral state. -void VwTextStore::ClearPointersTo(VwParagraphBox * pvpbox) -{ - if (m_pvpboxCurrent == pvpbox) - m_pvpboxCurrent = NULL; -} - COLORREF InterpretTfDaColor(TF_DA_COLOR tdc, COLORREF current) { if (tdc.type == TF_CT_SYSCOLOR) @@ -2260,33 +2473,6 @@ STDMETHODIMP VwTextStore::OnUpdateComposition(ITfCompositionView * pComposition, } -/*---------------------------------------------------------------------------------------------- - Terminate all compositions, and refresh the display attributes. -----------------------------------------------------------------------------------------------*/ -void VwTextStore::TerminateAllCompositions(void) -{ -#ifdef TRACING_TSF - TraceTSF("VwTextStore::TerminateAllCompositions\n"); -#endif - // Can't have (or terminate!) compositions without a real context. - if (!m_qtcContext) - return; - HRESULT hr; - ITfContextOwnerCompositionServices * pCompServices; - //get the ITfContextOwnerCompositionServices interface pointer - hr = m_qtcContext->QueryInterface(IID_ITfContextOwnerCompositionServices, - (void **)&pCompServices); - if (SUCCEEDED(hr)) - { - // passing NULL terminates all compositions. We should get OnEndComposition notifications. - hr = pCompServices->TerminateComposition(NULL); - pCompServices->Release(); -#ifdef TRACING_TSF - TraceTSF(" all compositions terminated!\n"); -#endif - } -} - /*---------------------------------------------------------------------------------------------- Called when a composition is terminated. See MSDN for details (ITfContextOwnerCompositionSink::OnEndComposition). @@ -2383,145 +2569,6 @@ STDMETHODIMP VwTextStore::UnadviseMouseSink(DWORD dwCookie) END_COM_METHOD(g_factDummy, IID_ITfMouseTrackerACP); } -/*---------------------------------------------------------------------------------------------- - Send appropriate mouse event notifications, if they have been requested. A "Mouse Down" - event terminates all open compositions if it is not handled by the sink (unless, of course, - the sink does not exist). -----------------------------------------------------------------------------------------------*/ -bool VwTextStore::MouseEvent(int xd, int yd, RECT rcSrc1, RECT rcDst1, VwMouseEvent me) -{ - if (!m_qMouseSink) - return false; - // Determine whether it intersects the range that the mouse sink is interested in. - HoldGraphicsAtDst hg(m_qrootb, Point(xd, yd)); - // Find the most local box where the user clicked, and where he clicked relative to it. - Rect rcSrcBox; - Rect rcDstBox; - VwBox * pboxClick = m_qrootb->FindBoxClicked(hg.m_qvg, xd, yd, hg.m_rcSrcRoot, hg.m_rcDstRoot, - &rcSrcBox, &rcDstBox); - if (!pboxClick) - { - // The mouse event is nowhere of interest to text services. - return EndAllCompositions(me == kmeDown); - } - - VwSelectionPtr qvwsel; - pboxClick->GetSelection(hg.m_qvg, m_qrootb, xd, yd, hg.m_rcSrcRoot, hg.m_rcDstRoot, rcSrcBox, - rcDstBox, &qvwsel); - - VwTextSelection * psel = dynamic_cast(qvwsel.Ptr()); - if (!psel) - { - // It must be a text selection to be relevant for text services. - return EndAllCompositions(me == kmeDown); - } - - VwParagraphBox * pvpboxClick = psel->AnchorBox(); - if (pvpboxClick != m_pvpboxMouseSink) - { - // The mouse event is not near the box of interest. - return EndAllCompositions(me == kmeDown); - } - - int ichClick = psel->AnchorOffset(); - if (ichClick < m_ichMinMouseSink || ichClick > m_ichLimMouseSink) - { - // The mouse event is not (even close to) the range of interest. - return EndAllCompositions(me == kmeDown); - } - RECT rdPrimary, rdSecondary; - ComBool fSplit, fEndBeforeAnchor; - Point pt(xd,yd); - bool fFoundChar = false; - Rect rdChar; - if (ichClick > 0 && ichClick > m_ichMinMouseSink) - { - // See if the click is in the character before the position. Selection was made from a single - // click, so it is an IP. Extend it to cover the previous character. - psel->m_ichEnd--; - psel->m_fEndBeforeAnchor = true; - psel->Location(hg.m_qvg, hg.m_rcSrcRoot, hg.m_rcDstRoot, &rdPrimary, - &rdSecondary, &fSplit, &fEndBeforeAnchor); - rdChar = rdPrimary; - if (rdChar.Contains(pt)) - { - fFoundChar = true; - } - else - { - psel->m_ichEnd++; - } - } - if (ichClick < pvpboxClick->Source()->Cch() && ichClick < m_ichLimMouseSink && !fFoundChar) - { - // See if the click is in the character after the position. Selection was made from a single - // click, so it is an IP. Extend it to cover the following character. - psel->m_ichEnd++; - psel->m_fEndBeforeAnchor = false; - psel->Location(hg.m_qvg, hg.m_rcSrcRoot, hg.m_rcDstRoot, &rdPrimary, - &rdSecondary, &fSplit, &fEndBeforeAnchor); - rdChar = rdPrimary; - if (rdChar.Contains(pt)) - { - fFoundChar = true; - } - } - if (!fFoundChar) - { - // The mouse event wasn't inside a character in the range, maybe just before or - // after (or empty string). - return EndAllCompositions(me == kmeDown); - } - - ULONG edge = LogToAcp(ichClick) - LogToAcp(m_ichMinMouseSink); - int section = ((rdChar.right - rdChar.left) > 0) ? - min((xd - rdChar.left) * 4 / (rdChar.right - rdChar.left), 3) : 1; - ULONG quadrant = (section + 2) % 4; // want 2, 3, 0, 1 for the respective sections. - DWORD dwBtnStatus = 0; - - // Figure a set of flags that indicates approximately the state of the mouse. - switch(me) - { - case kmeDown: // no shift, main button - case kmeDblClick: // assume no shift, main button - case kmeMoveDrag: // mouse move, main button down, assume no modifiers - // All of these cases assume the main button is down, nothing else. - dwBtnStatus = MK_LBUTTON; - break; - case kmeExtend: // main click, shift down - dwBtnStatus = MK_LBUTTON | MK_SHIFT; - break; - case kmeUp: // main button up. - // Assume nothing is down - break; - } - - // Send the notification. - BOOL fEaten; - m_qMouseSink->OnMouseEvent(edge, quadrant, dwBtnStatus, &fEaten); -#ifdef TRACING_TSF - if (me == kmeDown) - { - StrAnsi sta; - sta.Format( -"VwTextStore::MouseEvent, xd = %d (%d), width = %d, edge = %d, quadrant = %d - fEaten = %s%n", - xd, xd - rdChar.left, rdChar.Width(), (int) edge, (int) quadrant, - fEaten ? "true" : "false"); - TraceTSF(sta.Chars()); - } -#endif - if (!fEaten) - { - // End all current compositions on mouse down. - return EndAllCompositions(me == kmeDown); - } - return fEaten; -} - -void VwTextStore::OnLoseFocus() -{ -} - /*---------------------------------------------------------------------------------------------- Convert the ACP character index (used by TSF manager) to the decomposed NFD character index used internally by views code. @@ -2626,14 +2673,11 @@ int VwTextStore::LogToAcp(int ichReq) ----------------------------------------------------------------------------------------------*/ bool VwTextStore::IsNfdIMEActive() { - if (!m_qws) - return false; - - // at this point, we assume that all Keyman keyboards require NFD and all other IMEs require - // NFC. - SmartBstr sbstrKeymanKbd; - CheckHr(m_qws->get_Keyboard(&sbstrKeymanKbd)); - return BstrLen(sbstrKeymanKbd) > 0; + // Historically, we tried to give Keyman NFD, since normal operation requires Keyman keyboards + // for FLEx to be NFD-based. With the 2013 approach to keyboarding, we are not using TSF + // with Keyman 7 or 8. Marc promises that Keyman 9 will handle NFC context. Keeping the method + // in case we find we need NFD context for something... + return false; } void VwTextStore::GetCurrentWritingSystem() diff --git a/Src/views/VwTextStore.h b/Src/views/VwTextStore.h index 7e6a89e5e8..8855830680 100644 --- a/Src/views/VwTextStore.h +++ b/Src/views/VwTextStore.h @@ -16,6 +16,11 @@ Last reviewed: Not yet. #ifndef VwTextStore_INCLUDED #define VwTextStore_INCLUDED +namespace TestViews +{ + class TestVwTextStore; +}; + DEFINE_COM_PTR(ITextStoreACP); DEFINE_COM_PTR(ITextStoreACPSink); DEFINE_COM_PTR(ITextStoreACPServices); @@ -38,8 +43,10 @@ DEFINE_COM_PTR(ITfMouseSink); Hungarian: txs ----------------------------------------------------------------------------------------------*/ class VwTextStore : public ITextStoreACP, public ITfContextOwnerCompositionSink, - public ITfMouseTrackerACP + public ITfMouseTrackerACP, public IViewInputMgr { + friend class TestViews::TestVwTextStore; + public: VwTextStore(VwRootBox * prootb); ~VwTextStore(); @@ -116,16 +123,20 @@ class VwTextStore : public ITextStoreACP, public ITfContextOwnerCompositionSink, DWORD* pdwCookie); STDMETHOD(UnadviseMouseSink)(DWORD dwCookie); - // Other Public Methods. + // IViewInputMgr + STDMETHOD(Init)(IVwRootBox * prootb); + STDMETHOD(Close)(); + STDMETHOD(OnTextChange)(); + STDMETHOD(OnSelectionChange)(int nHow); + STDMETHOD(OnLayoutChange)(); + STDMETHOD(SetFocus)(); + STDMETHOD(OnMouseEvent)(int xd, int yd, RECT rcSrc1, RECT rcDst1, VwMouseEvent me, ComBool * pfProcessed); + STDMETHOD(KillFocus)(); + STDMETHOD(OnUpdateProp)(ComBool * pSuppressNormalization); + STDMETHOD(get_IsCompositionActive)(ComBool * pfCompositionActive); + STDMETHOD(get_IsEndingComposition)(ComBool * pfDoingRecommit); + STDMETHOD(TerminateAllCompositions)(); - void OnDocChange(); - void OnSelChange(VwSelChangeType nHow); - void OnLayoutChange(); - void SetFocus(); - void Init(); - void Close(); - void AddToKeepList(LazinessIncreaser *pli); - bool MouseEvent(int xd, int yd, RECT rcSrc1, RECT rcDst1, VwMouseEvent me); protected: // Member variables @@ -174,7 +185,7 @@ class VwTextStore : public ITextStoreACP, public ITfContextOwnerCompositionSink, bool IsNfdIMEActive(); void GetCurrentWritingSystem(); - VwParagraphBox * m_pvpboxCurrent; + VwRootBox * m_prootb; public: static ITfThreadMgrPtr s_qttmThreadMgr; @@ -185,8 +196,8 @@ class VwTextStore : public ITextStoreACP, public ITfContextOwnerCompositionSink, ITfContextPtr m_qtcContext; TfEditCookie m_tfEditCookie; +private: // Internal methods. - bool _LockDocument(DWORD dwLockFlags) { if (m_fLocked) @@ -228,7 +239,6 @@ class VwTextStore : public ITextStoreACP, public ITfContextOwnerCompositionSink, VwTextSelection ** pptsel); void ClearPointersTo(VwParagraphBox * pvpbox); void DoDisplayAttrs(); - void TerminateAllCompositions(void); // Conditionally terminate all compositions and return false. Used mostly in MouseEvent(). bool EndAllCompositions(bool fStop) { @@ -236,23 +246,13 @@ class VwTextStore : public ITextStoreACP, public ITfContextOwnerCompositionSink, TerminateAllCompositions(); return false; } - void OnLoseFocus(); DWORD SuspendAdvise(IUnknown ** ppunk); - bool IsCompositionActive() - { - return m_compositions.Size() > 0; - } void NoteCommitDuringComposition() { m_fCommitDuringComposition = true; } - bool IsDoingRecommit() - { - return m_fDoingRecommit; - } - private: int RetrieveText(int ichFirst, int ichLast, int cchPlainReqNfd, wchar* pchPlainNfd); void NormalizeText(StrUni & stuText, WCHAR* pchPlain, UCOMINT32 cchPlainReq, diff --git a/Src/views/views.vcxproj b/Src/views/views.vcxproj index e5b5691681..2c669ca996 100644 --- a/Src/views/views.vcxproj +++ b/Src/views/views.vcxproj @@ -82,8 +82,8 @@ .\Debug\ ..\..\Bin\mkvw.bat d ..\..\Bin\mkvw.bat d cc - - ..\..\output\debug\views.dll + ..\..\Bin\mkvw.bat d e + ..\..\Output\Debug\views.dll $(NMakePreprocessorDefinitions) ..\..\Output\Common\Raw;..\..\Output\Common;..\Kernel;..\Generic;.;$(NMakeIncludeSearchPath) $(NMakeForcedIncludes) @@ -175,4 +175,4 @@ - + \ No newline at end of file diff --git a/Src/xWorks/NotebookExportDialog.cs b/Src/xWorks/NotebookExportDialog.cs index 7f6dbba6d0..35e8b779ec 100644 --- a/Src/xWorks/NotebookExportDialog.cs +++ b/Src/xWorks/NotebookExportDialog.cs @@ -22,6 +22,7 @@ using System.Diagnostics; using System.IO; using System.Xml; +using Palaso.WritingSystems; using XCore; using System.Text; using SIL.CoreImpl; @@ -228,7 +229,10 @@ private void ExportLanguages(TextWriter writer) XmlUtils.MakeSafeXml(wsLocal.LanguageName)); writer.WriteLine("{0}", XmlUtils.MakeSafeXml(wsLocal.Abbreviation)); - writer.WriteLine("", wsLocal.LCID); + // We previously wrote out the LCID, but this is obsolete. It would be unreliable to output the WindowsLcid, which only + // old writing systems will have. If something needs this, we need to output something new in its place. But I'm pretty sure + // nothing does...Locale is not used in any of the notebook output transforms. + //writer.WriteLine("", ((ILegacyWritingSystemDefinition)wsLocal).WindowsLcid); writer.WriteLine("", wsLocal.RightToLeftScript ? "true" : "false"); if (ws == m_cache.DefaultAnalWs)